求助!!!如何用matlab求复杂的图的邻接矩阵???
我想仿真电力系统连锁故障的一个终止条件,也就是电网解列。电网解列的几何意义就是出现多于一个的连通块。在主程序中每断开一次支路(branch)就要判断一次连通性,如果连通块...
我想仿真电力系统连锁故障的一个终止条件,也就是电网解列。电网解列的几何意义就是出现多于一个的连通块。在主程序中每断开一次支路(branch)就要判断一次连通性,如果连通块多于一个则退出循环。
恳请各位大侠下载一个matpower工具包,保存到path中。
输入runpf(case118")指令就可以看到潮流矩阵,里面有branch data这样一个矩阵(118*13),其中前三列的数据是判断连通性需要的(分别为支路序号brnch#,起始节点FromBus,终止节点ToBus)。
谢谢啦~~~~
如下:
C=input('[0 1 0 0;1 0 0 0;0 0 0 1;0 0 1 0]');
n=size(C,1);
P=zeros(n,n);
k=1;
for k=1:n
C1=C^k;
P=P+C1;
end
S=n-rank(P);
P;
C;
if S==1;
disp('连通');
else
disp(['不连通,分支等于',num2str(S)]);
end
这个小程序是判断邻接矩阵的连通性的,运行结果有问题。
求大侠一并解答,我会再追加200财富值。 展开
恳请各位大侠下载一个matpower工具包,保存到path中。
输入runpf(case118")指令就可以看到潮流矩阵,里面有branch data这样一个矩阵(118*13),其中前三列的数据是判断连通性需要的(分别为支路序号brnch#,起始节点FromBus,终止节点ToBus)。
谢谢啦~~~~
如下:
C=input('[0 1 0 0;1 0 0 0;0 0 0 1;0 0 1 0]');
n=size(C,1);
P=zeros(n,n);
k=1;
for k=1:n
C1=C^k;
P=P+C1;
end
S=n-rank(P);
P;
C;
if S==1;
disp('连通');
else
disp(['不连通,分支等于',num2str(S)]);
end
这个小程序是判断邻接矩阵的连通性的,运行结果有问题。
求大侠一并解答,我会再追加200财富值。 展开
4个回答
展开全部
1、我下载的matpower版本是4.0,运行 runpf('case118'),但数据和你说的不一样,该矩阵是186x9的,内容如下:
==================================================================
| Branch Data |
==================================================================
Brnch From To From Bus Injection To Bus Injection Loss (I^2 * Z)
# Bus Bus P (MW) Q (MVAr) P (MW) Q (MVAr) P (MW) Q (MVAr)
----- ----- ----- -------- -------- -------- -------- -------- --------
1 1 2 -12.35 -13.04 12.45 11.01 0.098 0.32
2 1 3 -38.65 -17.06 38.90 16.88 0.250 0.82
3 4 5 -103.23 -26.79 103.43 27.49 0.201 0.91
(中间省略)
186 76 118 -6.85 -9.69 6.87 8.56 0.024 0.08
2、确认一下:你的要求是根据前3列数据求邻接矩阵吗?
提问的第一段关于“电网解列”的部分我看不太明白,如果只是要求邻接矩阵,那部分应该可以忽略。
==================================================================
| Branch Data |
==================================================================
Brnch From To From Bus Injection To Bus Injection Loss (I^2 * Z)
# Bus Bus P (MW) Q (MVAr) P (MW) Q (MVAr) P (MW) Q (MVAr)
----- ----- ----- -------- -------- -------- -------- -------- --------
1 1 2 -12.35 -13.04 12.45 11.01 0.098 0.32
2 1 3 -38.65 -17.06 38.90 16.88 0.250 0.82
3 4 5 -103.23 -26.79 103.43 27.49 0.201 0.91
(中间省略)
186 76 118 -6.85 -9.69 6.87 8.56 0.024 0.08
2、确认一下:你的要求是根据前3列数据求邻接矩阵吗?
提问的第一段关于“电网解列”的部分我看不太明白,如果只是要求邻接矩阵,那部分应该可以忽略。
追问
电网解列不用管什么意思,邻接矩阵怎么求呢?矩阵的行列是我看错了,branchdata确实是186*9。
另外,我这儿还有一个判断邻接矩阵连通性的小程序有点问题麻烦看一下~我会再追加财富值的。
追答
1、求邻接矩阵的代码:
[MVAbase, bus, gen, branch] = runpf('case118');
From=branch(:, 1);
To=branch(:, 2);
n=max([From; To]);
A=zeros(n,n);
for i=1:length(From),
A(From(i), To(i)) = 1;
A(To(i), From(i)) = 1;
end
上面是按照无向图理解的。如果理解为有向图,则删除for循环里面第2个赋值语句。
2、按照上面求出的邻接矩阵,可以检验一共有179条边,而不是186条。原因在于,branch data有一部分支路的from和to相同,例如第66、67,75、76。请核对一下数据(我不了解数据的含义,只是帮你根据前三列数据把邻接矩阵的代码写出来)。
3、关于判断连通性代码存在的问题
(1)第一句
C=input('[0 1 0 0;1 0 0 0;0 0 0 1;0 0 1 0]');
没必要用input,直接输入矩阵就可以(注意分号应该用半角符号):
C=[0 1 0 0; 1 0 0 0; 0 0 0 1; 0 0 1 0];
(2)关于连通性判断算法:
我不知道你的连通性判断算法是出处是哪里,但是据我看到的文献所描述的算法与你差别很大,例如:
贾进章等;基于邻接矩阵图的连通性判定准则[J];辽宁工程技术大学学报;2003.2
前面计算P矩阵大致相同(但是该文中的循环只到k=n-1),但是对于判断规则差别却很大,而且从实际算例看(对于matpower的这个例子),你的判断肯定是错的。我没有再仔细研究算法,只是提醒你注意。
4、如果觉得有帮助采纳了就行,没必要再追加财富值。如果存在疑问,可以继续追问。
展开全部
看一看在一些点。
例如,100点。
那你必须得到100 * 100矩阵。
然后看是否
如第五和第十点相关的任何两点之间的互连,您可以更改矩阵的10列和10列和第五列数据中的第五行。
祝你好运
本手册的生活相当沉重。
例如,100点。
那你必须得到100 * 100矩阵。
然后看是否
如第五和第十点相关的任何两点之间的互连,您可以更改矩阵的10列和10列和第五列数据中的第五行。
祝你好运
本手册的生活相当沉重。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看一看在一些点。
例如,100点。
那你必须得到100 * 100矩阵。
然后看是否
如第五和第十点相关的任何两点之间的互连,您可以更改矩阵的10列和10列和第五列数据中的第五行。
祝你好运
本手册的生活相当沉重。
例如,100点。
那你必须得到100 * 100矩阵。
然后看是否
如第五和第十点相关的任何两点之间的互连,您可以更改矩阵的10列和10列和第五列数据中的第五行。
祝你好运
本手册的生活相当沉重。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
[MVAbase, bus, gen, branch] = runpf('case118');
有了branch之后,直接创建稀疏矩阵
S = sparse(branch(:,1),branch(:,2),1); S = S+S';
有了branch之后,直接创建稀疏矩阵
S = sparse(branch(:,1),branch(:,2),1); S = S+S';
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询