Matlab绘制网络——顺便学习了Matlab写函数
来源:互联网 发布:郑州大学网络服务中心 编辑:程序博客网 时间:2024/04/28 12:34
本来,是要研究网络拓扑的,因此,想最简简单的用Matlab画出来,以便得到直观的图形,找到网上一篇代码,如下:
%最新版改进Salam网络拓扑随机生成算法通用MATLAB源码%{本程序为最新版源码,源码无删减,能绘出漂亮的网络拓扑图片,算法改进说明如下:1.使用K均值聚类控制节点分布的疏密,使得产生的网络拓扑连通性和均匀性更好2.产生的网络拓扑数据丰富,包括:链路的费用、时延、带宽,节点的费用、时延、时延抖动、丢包率3.链路时延等于节点距离除以三分之二光速,更加符合实际情况%}function [Sxy,AM,EdgeCost,EdgeDelay,EdgeBandWide,VertexCost,VertexDelay,VertexDelayJitter,VertexPacketLoss]=SalamNet_NetCreate(BorderLength,NodeAmount, ..., Alpha,Beta,PlotIf,EdgeCostDUB,EdgeBandWideDUB,VertexCostDUB,VertexDelayDUB,VertexDelayJitterDUB,VertexPacketLossDUB)%%改进的 Salama网络拓扑随机生成算法%%算法说明 %? 1.使用K均值聚类控制节点分布的疏密,使得产生的网络拓扑连通性和均匀性更好%? 2.产生的网络拓扑数据丰富,包括:链路的费用、时延、带宽,节点的费用、时延、时延抖动、丢包率%? 3.链路时延等于节点距离除以三分之二光速,更加符合实际情况%% 输入参数列表%BorderLenght————正方形区域的边长,单位:km%NodeAmount————网络节点的个数%Alpha————网络特征参数,Alpha越大,短边相对长边的比例越大%Beta————网络特征参数,Beta越大,边的密度越大%PlotIf————是否画网络拓扑图,如果为1,则画图,否则不画图%EdgeCostDUB————链路费用的控制参数,1*2,存储链路费用的下界和上界%EdgeBandWideDUB————链路带宽的控制参数,1*2,存储下界和上界%VertexCostDUB————节点费用的控制参数,1*2,存储节点费用的下界和上界%VertexDelayDUB————节点时延的控制参数,1*2,节储节点时延的下界和上界%VertexDelayJitterDUB————节点时延抖动的控制参数,1*2,存储节点时延抖动的下界和上界%VertexPacketLossDUB————节点丢包率的控制参数,1*2,存储节点丢包率的下界%%输出参数%Sxy————3*N的矩阵,各列分别用于存储节点的序号,横坐标,纵坐标的矩阵%AM————0 1存储矩阵,AM(i,j)=1表示存在由i到j的有向边,N*N%EdgeCost————链路费用矩阵,N*N%EdgeDelay————链路时延矩阵,N*N%EdgeBandWide————链路带宽矩阵,N*N%VertexCost————节点费用向量,1*N%VertexDelay————节点时延向量,1*N%VertexDelayJitter————节点时延抖动向量,1*N%VertexPacketLoss————节点丢包率向量,1*N%%推荐的输入参数设置 %BorderLength=1000;NodeAmount=25;Alpha=100000000;Beta=200000000000;%PlotIf=1;EdgeCostDUB=[2,5];EdgeBandWideDUB=[30,1000];VertexCostDUB=[2,4];%VertexDelayDUB=1e-4*[5,20];VertexDelayJitterDUB=1e-4*[3,8];%VertexPacketLossDUB=1e-4*[0,500]%%%参数初始化NN = 10*NodeAmount;SSxy = zeros(NN,2);%在正方形区域内随机均匀选取NN个节点for i = 1:NN SSxy(i,1) = BorderLength*rand; SSxy(i,2) = BorderLength*rand;end[IDX,C] = kmeans(SSxy,NodeAmount);Sxy = [[1:NodeAmount]',C]';%按横坐标由小到大的顺序重新为每一个节点编号temp = Sxy;Sxy2 = Sxy(2,:);Sxy2_sort = sort(Sxy2);for i = 1:NodeAmount pos = find(Sxy2==Sxy2_sort(i)); if length(pos)>1 error('仿真故障,请重试!'); end temp(1,i) = i; temp(2,i) = Sxy(2,pos); temp(3,i) = Sxy(3,pos);endSxy = temp;%输出参数初始化AM = zeros(NodeAmount,NodeAmount);EdgeCost = zeros(NodeAmount,NodeAmount);EdgeDelay = zeros(NodeAmount,NodeAmount);EdgeBandWide = zeros(NodeAmount,NodeAmount);VertexCost = zeros(1,NodeAmount);VertexDelay = zeros(1,NodeAmount);VertexDelayJitter = zeros(1,NodeAmount);VertexPacketLoss = zeros(1,NodeAmount);for i = 1:(NodeAmount-1) for j = (i+1):NodeAmount Distance =( (Sxy(2,i)-Sxy(2,j))^2+(Sxy(3,i)-Sxy(3,j))^2)^0.5; P = Beta*exp(-Distance^5/(Alpha*BorderLength)); if P>rand AM(i,j) = 1; AM(j,i) = 1; EdgeDelay(i,j) = 0.5*Distance/100000; EdgeDelay(j,i) = EdgeDelay(i,j); EdgeCost(i,j) = EdgeCostDUB(1)+(EdgeCostDUB(2)-EdgeCostDUB(1))*rand; EdgeCost(j,i)=EdgeCost(i,j); EdgeBandWide(i,j) = EdgeBandWideDUB(1)+(EdgeBandWideDUB(2)-EdgeBandWideDUB(1))*rand; EdgeBandWide(j,i)=EdgeBandWide(i,j); else EdgeDelay(i,j) = inf; EdgeDelay(j,i) = inf; EdgeCost(i,j) = inf; EdgeCost(j,i) = inf; EdgeBandWide(i,j) = inf; EdgeBandWide(j,i) = inf; end endendfor i = 1:NodeAmount VertexCost(i) = VertexCostDUB(1)+(VertexCostDUB(2)-VertexCostDUB(1))*rand; VertexDelay(i) = VertexDelayDUB(1)+(VertexDelayDUB(2)-VertexDelayDUB(1))*rand; VertexDelayJitter(i) = VertexDelayJitterDUB(1)+(VertexDelayJitterDUB(2)-VertexDelayJitterDUB(1))*rand; VertexPacketLoss(i) = VertexPacketLossDUB(1)+(VertexPacketLossDUB(2)-VertexPacketLossDUB(1))*rand;endNet_plot(BorderLength,NodeAmount,Sxy,EdgeCost,PlotIf);end%用于绘制网络拓扑的函数function Net_plot(BorderLength,NodeAmount,Sxy,EdgeCost,PlotIf)%画节点if PlotIf == 1 plot(Sxy(2,:),Sxy(3,:),'ko','MarkerEdgeColor','b','MarkerFaceColor','g','MarkerSize',5); %设置图形显示范围 xlim([0,BorderLength]); ylim([0,BorderLength]); hold on; %节点标序号 for i = 1:NodeAmount Str = int2str(i); text(Sxy(2,i)+BorderLength/100,Sxy(3,i)+BorderLength/100,Str,'FontName','Times New Roman','FontSize',12); hold on; endend%画边if PlotIf == 1 for i = 1:(NodeAmount-1) for j = (i+1):NodeAmount if isinf(EdgeCost(i,j)) == 0 plot([Sxy(2,i),Sxy(2,j)],[Sxy(3,i),Sxy(3,j)]); hold on; end end endendif PlotIf == 1 xlabel('x (km)','FontName','Times New Roman','FontSize',12); ylabel('y (km)','FontName','Times New Roman','FontSize',12);endend
上述代码片在https://code.csdn.net/snippets/306505
写Matlab函数有三种,一种是M文件函数,如上面代码SalamNet_NetCreate.m,调用就是[Sxy,AM,EdgeCost,EdgeDelay,EdgeWide,VertexCost,VertexDelay,VertexDelayJitter,VertexPacketLoss]=SalamNet_NetCreate(1000,25,100000000,200000000000,1,[2,5],[30,1000],[2,4],1e-4*[5,20],1e-4*[3,8],1e-4*[0,500]),函数中function告诉这是一个Matlab函数,
一种是在线函数,inline()
f=inline('x+y','x','y')
创建了二元函数f(x,y)=x+y,工作区输入f(2,3)计算2+3,等同于feval_r(f,2,3)。
第三种是匿名函数
函数句柄=@(变量名) 函数表达式
上述文件函数运行得到的图如下:
0 0
- Matlab绘制网络——顺便学习了Matlab写函数
- scatter函数绘制散点图——MATLAB
- MATLAB 绘制函数曲线图
- 数学建模常用Matlab/Lingo/c代码总结系列——Matlab图形绘制函数汇总
- MATLAB学习——函数的编写
- 使用matlab绘制数学函数
- MATLAB绘制空间域高斯函数
- sigmoid函数matlab绘制曲线
- matlab—eval函数
- matlab—cat函数
- matlab 贝叶斯网络学习
- Matlab绘图——对称曲线绘制
- MATLAB学习笔记——matlab基础
- matlab isosurface函数绘制隐函数曲面
- Matlab绘制六边形蜂窝网络并编号
- MATLAB 函数学习笔记
- Matlab学习记录(函数)
- 机器学习MATLAB函数
- 杭电 1014 Uniform Generator
- php图片添加水印的例子
- 11
- ubuntu加载模块出现Invalid module format
- 这两天在Ubuntu12.04.1安装jdk1.7/MyEclipse10/Jboss-as-7.1.1/Oracle11g遇到的种种问题记录下来
- Matlab绘制网络——顺便学习了Matlab写函数
- 美世界购盛
- ocx控件注册问题
- 刺猬的拥抱
- 数据库表设计原则
- Andriod 从源码的角度详解View,ViewGroup的Touch事件的分发机制
- 机器学习自学指南
- 9.1
- YII框架学习及总结-0-基础概念