matlab根据邻接矩阵作图
- 格式:doc
- 大小:56.50 KB
- 文档页数:5
MATLAB矩阵⽣成⽆向⽹络图 寝室有⼀个是做⽹络的,需要把矩阵变为⽹络图使其形象⼀点,所以我在这⾥就写了这样⼀个函数。
功能是将邻接矩阵或关联矩阵变为⽹络图,不过我这⾥只能转换为⽆向图,有向图的箭头我还需要在研究⼀下,似乎有annotation函数可以调⽤。
1 %函数名netplot2 %使⽤⽅法输⼊请help netplot3 %⽆返回值%函数只能处理⽆向图4 %作者:tiandsp5 %最后修改:2012.12.266 function netplot(A,flag)7 %调⽤⽅法输⼊netplot(A,flag),⽆返回值8 %A为邻接矩阵或关联矩阵9 %flag=1时处理邻接矩阵10 %flag=2时处理关联矩阵11 %函数只能处理⽆向图12if flag==1 %邻接矩阵表⽰⽆向图13 ND_netplot(A);14return;15 end1617if flag==2 %关联矩阵表⽰⽆向图18 [m n]=size(A); %关联矩阵变邻接矩阵19 W=zeros(m,m);20for i=1:n21 a=find(A(:,i)~=0);22 W(a(1),a(2))=1;23 W(a(2),a(1))=1;24 end25 ND_netplot(W);26return;27 end2829 function ND_netplot(A)30 [n n]=size(A);31 w=floor(sqrt(n));32 h=floor(n/w);33 x=[];34 y=[];35for i=1:h %使产⽣的随机点有其范围,使显⽰分布的更⼴36for j=1:w37 x=[x 10*rand(1)+(j-1)*10];38 y=[y 10*rand(1)+(i-1)*10];39 end40 end41 ed=n-h*w;42for i=1:ed43 x=[x 10*rand(1)+(i-1)*10];44 y=[y 10*rand(1)+h*10];45 end46 plot(x,y,'r*');4748 title('⽹络拓扑图');49for i=1:n50for j=i:n51if A(i,j)~=052 c=num2str(A(i,j)); %将A中的权值转化为字符型53 text((x(i)+x(j))/2,(y(i)+y(j))/2,c,'Fontsize',10); %显⽰边的权值54 line([x(i) x(j)],[y(i) y(j)]); %连线55 end56 text(x(i),y(i),num2str(i),'Fontsize',14,'color','r'); %显⽰点的序号57 hold on;58 end59 end60 end6162 end调⽤⽅法⾥⾯都写了,我就不多说了。
R语言中有一个根据实值矩阵绘制色块图的程序(用于绘制相关系数矩阵图),可以用丰富的颜色和形状形象的展示矩阵元素值的大小。
遗憾的是MATLAB中没有这样的函数,因此我就用MATLAB编写了一个matrixplot函数,下面给出示例和源码,与大家一起分享!**********************************************【例1】绘制网格线,网格中显示矩阵元素。
显示黑色文字:>> x = [1,-0.2,0.3,0.8,-0.5-0.2,1,0.6,-0.7,0.20.3,0.6,1,0.5,-0.30.8,-0.7,0.5,1,0.7-0.5,0.2,-0.3,0.7,1];>> XVarNames = {'xiezhh','heping','keda','tust','tianjin'};>>matrixplot(x,'FillStyle','nofill','XVarNames',XVarNames,'YVarNames',XVarNam es);效果图1:根据矩阵元素值自动设置文字颜色:>>matrixplot(x,'FillStyle','nofill','XVarNames',XVarNames,'YVarNames',XVarNam es,'TextColor','Auto','ColorBar','on');【例2】绘制实值矩阵各元素对应的色块,通过不同的“参数/参数值”控制色块的形状、大小、颜色等属性。
方形色块,充满方格,灰白色字体>>matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'TextColor',[0. 6,0.6,0.6],'ColorBar','on');效果图3:方形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体>>matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','o ff','FigSize','Auto','ColorBar','on');椭圆形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体>>matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','o ff','FigSize','Auto','ColorBar','on','FigShape','e');效果图5:圆形色块,根据矩阵元素值自动确定色块的大小和颜色,不显示字体,上三角形式显示>>matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','o ff','FigSize','Auto','ColorBar','on','FigShape','c','FigStyle','Triu');六边形色块,根据矩阵元素值自动确定色块的大小和颜色,显示字体,下三角形式显示>>matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','o n','FigSize','Auto','ColorBar','on','FigShape','h','FigStyle','Tril');效果图7:表盘形色块,根据矩阵元素值自动确定色块的颜色,不显示字体>>matrixplot(x,'XVarNames',XVarNames,'YVarNames',XVarNames,'DisplayOpt','o ff','FigSize','Full','ColorBar','on','FigShape','d');【例3】读取真彩图片,绘制伪红外图。
上海市地铁网络拓扑结构性质分析郑苏江【摘要】本文基于复杂网络理论,将上海市现运行的16条地铁线路在Space-L方法下建立模型,通过Ucinet软件初步绘制了地铁网络的拓扑结构图.根据站点邻接矩阵,运用Matlab计算得出:绝大多数站点的度值为2,站点的度分布基本与泊松分布相似;超过97%的站点聚类系数为0,所有站点的平均聚类系数极小,平均路径长度值为15.12,不具有小世界网络的特性;在双对数坐标下的站点累计度分布基本符合幂率分布,具有无标度网络的特性.【期刊名称】《智能计算机与应用》【年(卷),期】2019(009)004【总页数】4页(P205-208)【关键词】复杂网络;Space-L;上海市地铁网【作者】郑苏江【作者单位】上海工程技术大学管理学院,上海201620【正文语种】中文【中图分类】TP393.020 引言自20世纪末以来,伴随网络科学的飞速发展,尤其是在复杂网络的“小世界特性”以及“无标度特性”方面,世界范围内的专家学者开始对网络科学产生了浓厚的研究热情。
随着研究范围的层层深入,很多专家学者也逐渐将研究兴趣指向了城市交通网络的复杂网络特性之中。
Jiang[1]对比分析了不同城市的公路分布情况以及城市公路网络的小世界网络特性;Sienkiewicz[2]实证研究了22个城市的交通网络拓扑特性,研究结果表明那些城市的网络度分布不是服从幂律分布就是服从指数分布;Latora[3]以美国波士顿地铁为例,初步研究了该网络的小世界网络特性,并首次提出了一种网络构造法则,定义了网络效率等于2个地铁站(节点)之间距离的倒数,同时根据网络效率对其有效性和容错性作出衡量。
在国内,郭露露[4]等对北京市地铁网络使用 Space L 方法构建拓扑网络模型,针对连通OD对和出行效率2个因素评估了该地铁网络的脆弱性,并对今后北京市地铁运营时防护措施的制定给予相关建议;李进[5]研究了国内多个大型城市的地铁网络拓扑特性,在总结这些城市的地铁网络共性的同时,与北京市地铁网络的鲁棒性进行对比研究;高天智[6]等以国内10个典型城市作为研究样本,基于复杂网络理论对比分析了其网络拓扑特性,对微观及宏观特性表征指标进行了重点研究并总结出国内地铁网络的相关特征;孙军艳等[7]对西安市的公交网络、地铁网络及二者综合构成的复杂网络以Space-L的方式建立模型,对比分析了3类网络的统计特征及网络拓扑特性。
利用m a t l a b绘制矩阵色块图R语言中有一个根据实值矩阵绘制色块图的程序(用于绘制相关系数矩阵图),可以用丰富的颜色和形状形象的展示矩阵元素值的大小。
遗憾的是MATLAB中没有这样的函数,因此我就用MATLAB编写了一个matrixplot 函数,下面给出示例和源码,与大家一起分享!**********************************************【例1】绘制网格线,网格中显示矩阵元素。
显示黑色文字:>> x = [1,-0.2,0.3,0.8,-0.5-0.2,1,0.6,-0.7,0.20.3,0.6,1,0.5,-0.30.8,-0.7,0.5,1,0.7-0.5,0.2,-0.3,0.7,1];>> XVarNames = {'xiezhh','heping','keda','tust','tianjin'};>>matrixplot(x,'FillStyle','nofill','XVarNames',XVarNames,'YVarNames', XVarNames);效果图1:根据矩阵元素值自动设置文字颜色:>>matrixplot(x,'FillStyle','nofill','XVarNames',XVarNames,'YVarNames', XVarNames,'TextColor','Auto','ColorBar','on');效果图2:【例2】绘制实值矩阵各元素对应的色块,通过不同的“参数/参数值”控制色块的形状、大小、颜色等属性。
Matlab数据可视化(4):一维数据绘图II五. 结点连接图(node link plot)(源代码:NodeLinks.m)有时,我们需要绘制出不同结点之间的连通关系,即结点连接图。
以下以绘制美国128座城市之间的连通关系为例,介绍两种结点连接图的画法。
1) 定义每座城市与距它最近的城市连通,与其余视为不连通,然后根据连通性,利用gplot命令,直观的绘出结点连接图。
(图9)[plain]view plaincopy1.%% #12.%% 定义数据3.[XYCoord] = xlsread('inter_city_distances.xlsx','Sheet3');4.[intercitydist citynames] = xlsread('inter_city_distances.xlsx','Distances');5.6.% 避免将自身判定为最近的城市7.howManyCities = 128;8.for i =1:howManyCities;intercitydist(i,i)=Inf;end9.10.%% 定义临接矩阵11.% n阶方阵,1表示相连,0表示不相连; 这是我们规定城市只与它最近的城市相连12.adjacency = zeros(howManyCities,howManyCities);13.for i = 1:howManyCities14.alls = find(intercitydist(i,:)==min(intercitydist(i,:)));15.for j = 1:length(alls)16.adjacency(i,alls(j)) = 1;17.adjacency(alls(j),i) = 1;18.end19.clear alls20.end21.figure('units','normalized','position',[ 0.2813 0.2676 0.3536 0.3889]);22.plot(XYCoord(1:howManyCities,1),XYCoord(1:howMan yCities,2),'ro');hold on;23.title('距离最近的城市彼此相连');24.gplot(adjacency,XYCoord);25.xlabel('南北');26.ylabel('东西');27.set(gcf,'Color',[1 1 1],'paperpositionmode','auto');图 92) 定义距离小于100英里的城市为相连,以更紧致的方式绘出连接情况。
matlab实现dijkstra算法Matlab实现Dijkstra算法第一段:什么是Dijkstra算法,为什么它重要?Dijkstra算法是一种用于解决最短路径问题的经典算法。
它由荷兰计算机科学家Edsger Dijkstra在1956年提出,被广泛应用于网络路由、地图导航和图论等领域。
该算法的核心思想是在给定的带权图中找到从起点到终点的最短路径,通过迭代的方式逐步推进,直到找到最短路径或处理完所有节点。
Dijkstra算法被广泛认为是一种高效、可靠的解决方案,具有良好的理论基础和实际应用性。
第二段:如何在Matlab中实现Dijkstra算法?在Matlab中实现Dijkstra算法,可以分为以下几个步骤:1. 创建带权图:我们需要将问题转化为带权图的形式。
在Matlab中,可以使用邻接矩阵来表示图的连接关系,其中每个边的权重存储在矩阵中的对应位置。
2. 初始化距离和路径:将起点到每个节点的距离初始化为无穷大,并为每个节点设置一个空路径。
将起点的距离设置为0,表示起点到自身的距离为0。
3. 遍历节点:循环遍历所有节点,找到距离起点最近的节点,并标记为已访问。
更新与该节点相邻节点的距离和路径信息。
如果经过当前节点到达某个相邻节点的距离更短,则更新该节点的距离和路径。
4. 重复步骤3,直到所有节点都被遍历为止。
这样,我们就能得到从起点到其他节点的最短路径信息。
第三段:个人观点和理解Dijkstra算法是解决最短路径问题的经典算法之一,它具有广泛的应用价值。
在日常生活中,我们经常需要找到最佳的路径规划,例如快递员送货时选择最短路径、地铁或公交车乘客选择最快到达目的地的路线等。
对于这些问题,Dijkstra算法可以提供一个可靠、高效的解决方案。
在使用Matlab实现Dijkstra算法时,我们可以利用Matlab强大的矩阵运算能力和易用的函数库来简化算法的实现过程。
Matlab还提供了丰富的可视化工具,可以帮助我们直观地展示算法执行过程和结果。
MATLAB矩阵运算与绘图实践一、MATLAB矩阵运算的基本概念与操作MATLAB是一种强大的数学软件工具,可以用于矩阵运算和绘图实践。
在MATLAB中,矩阵是一种基本的数据类型,具有简洁而强大的数据处理功能。
1.1 矩阵的定义和表示矩阵是一个二维的数组,由行和列组成。
在MATLAB中,可以使用方括号进行矩阵的定义和表示。
例如,A = [1 2 3; 4 5 6]定义了一个2行3列的矩阵A。
1.2 矩阵的运算MATLAB提供了一系列的矩阵运算函数,包括加法、减法、乘法、转置等。
例如,可以使用A+B进行矩阵的加法运算,A-B 进行矩阵的减法运算,A*B进行矩阵的乘法运算。
1.3 矩阵的索引与切片在MATLAB中,可以使用索引和切片操作来访问矩阵的特定元素或子矩阵。
例如,可以使用A(1,2)来访问矩阵A的第1行第2列的元素,使用A(1,:)来访问矩阵A的第1行的所有元素。
1.4 矩阵的运算速度优化MATLAB中的矩阵运算通常使用向量化操作,可以显著提高运算速度。
向量化操作是指将循环结构转换为矩阵运算表达式的操作。
例如,可以使用A.*B进行矩阵的逐元素相乘运算,而不是使用循环结构逐个相乘。
二、MATLAB矩阵运算的高级应用2.1 矩阵的特征值和特征向量在MATLAB中,可以使用eig函数计算矩阵的特征值和特征向量。
特征值和特征向量是矩阵的重要属性,可以用于矩阵的分类和分析。
2.2 矩阵的奇异值分解奇异值分解(SVD)是一种常用的矩阵分解方法,在MATLAB中可以使用svd函数进行奇异值分解。
SVD可以将一个矩阵分解为三个矩阵的乘积,可以用于矩阵的降维和数据压缩。
2.3 矩阵的LU分解LU分解是一种常用的矩阵分解方法,可以将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积,在MATLAB中可以使用lu函数进行LU分解。
LU分解可以用于矩阵的求解和矩阵方程的求解。
三、MATLAB绘图实践的基本技巧与命令3.1 绘图函数的选择在MATLAB中,有多种绘图函数可以用于实现不同类型的图形。
matlab floyd算法
一、算法思想
Floyd算法是一种用于解决最短路径问题的算法,它可以找出任意两点之间的最短路径。
它由西班牙数学家Robert Floyd在1960年提出,是一种动态规划的应用,其可以求出任意两点之间的最短路径问题,由此可以证明,Floyd算法具备时间复杂度为O(n^3)的性质。
二、算法步骤
1、初始化:根据邻接矩阵表示图,初始化Floyd算法的距离矩阵。
2、迭代:使用Floyd算法的迭代式更新距离矩阵。
3、最短路径:最后获得的距离矩阵就是最短路径矩阵,可以求出任意两点之间的最短距离。
三、MATLAB实现
1、首先我们需要输入一个无向图的邻接矩阵,形如:
A=[0 1 inf 1;
1 0 1 inf;
inf 1 0 2;
1 inf
2 0];
2、利用matlab实现floyd算法,代码如下:
function dist = Floyd(A)
%A是图的邻接矩阵
n=size(A,1);
dist=A;
for i=1:n
for j=1:n
for k=1:n
if dist(j,k)>dist(j,i)+dist(i,k)
dist(j,k)=dist(j,i)+dist(i,k);
end
end
end
end
end
3、运行如下:
dist = Floyd(A)
dist =
0 1 3 1
1 0 1 2
3 1 0 2
1 2 2 0
即得到任意两点之间的最短路径,起点到终点最短路径长度为dist(i,j)。
matlab 根据邻接矩阵作图
Matlab中根据邻接矩阵做图
function tu_plot(rel,control) %由邻接矩阵画图
%输入为邻接矩阵,必须为方阵;
%第二个输入为控制量,0表示无向图,1表示有向图。
默认值为0
r_size=size(rel);
if nargin<2
control=0;
end
if r_size(1)~=r_size(2)
disp('Wrong Input! The input must be a square matrix!');
return;
end
len=r_size(1);
rho=10;%限制图尺寸的大小
r=2/1.05^len;%点的半径
theta=0:(2*pi/len):2*pi*(1-1/len);
[pointx,pointy]=pol2cart(theta',rho); theta=0:pi/36:2*pi;
[tempx,tempy]=pol2cart(theta',r); point=[pointx,pointy];
hold on
for i=1:len
temp=[tempx,tempy]+[point(i,1)*ones(length(tempx),1),point(i,2)*ones (le
ngth(tempx),1)];
plot(temp(:,1),temp(:,2),'r');
text(point(i,1)-0.3,point(i,2),num2str(i));
%画点
end
for i=1:len
for j=1:len
if rel(i,j)
link_plot(point(i,:),point(j,:),r,control);
%连接有关系的点
end
end
end
set(gca,'XLim',[-rho-r,rho+r],'YLim',[-rho-r,rho+r]); axis off
%%
function link_plot(point1,point2,r,control)
%连接两点
temp=point2-point1;
if (~temp(1))&&(~temp(2))
return;
%不画子回路;
end
theta=cart2pol(temp(1),temp(2));
[point1_x,point1_y]=pol2cart(theta,r);
point_1=[point1_x,point1_y]+point1;
[point2_x,point2_y]=pol2cart(theta+(2*(theta<pi)-1)*pi,r);
point_2=[point2_x,point2_y]+point2;
if control
arrow(point_1,point_2); else
plot([point_1(1),point_2(1)],[point_1(2),point_2(2)]);
end
%%
function arrow(start,stop,l) %start,stop分别为起点和终点
%l为箭头的线长度,默认为主线长的1/10
t=0.1;
ang=15/180*pi;
temp=stop(1)-start(1)+j*(stop(2)-start(2));
L=abs(temp);P=angle(temp);
if nargin<3
l=t*L;
end
p1=P-ang;p2=P+ang;
a=[stop(1)-l*cos(p1) stop(2)-l*sin(p1)]; b=[stop(1)-l*cos(p2) stop(2)-l*sin(p2)]; hold on
plot([start(1) stop(1)],[start(2) stop(2)]); plot([a(1)
stop(1)],[a(2) stop(2)]); plot([b(1) stop(1)],[b(2) stop(2)]); end
效果图如下:
邻接矩阵为
0 1 0 0 0 0
0 0 0 0 0 1
1 0 0 0 0 1
0 0 1 1 0 1
0 1 0 0 0 1
1 0 0 0 1 0 的有向图:
小程序,小兴趣。
欢迎加入编程爱好者群(69321895)一起成长。