为提高电网模型中导纳矩阵的求解速度,通常的做法是对电网模型中的各个节点进行重新编号。对提高后续网络计算具有重要的意义。
常用的节点优化编号的方法有:静态优化法、半动态优化法和动态优化法。
三种方法原理介绍:
(1)静态优化法:导纳矩阵的行号就是网络的节点号 , 其每行的非零元素就是相应节点所连接的支路数(非对地支路),因此按照连接支路最少的节点顺序编号 ,就是静态优化法 。编号前, 统计网络各节点连接支路数,支路少的优先编号 ,若支路相同 ,则顺序编号。静态优化法的主要特点是优化快 , 编程简单 , 但优化效果差。
(2)半动态优化法:该方法的基本思想是找到连接支路最少的节点进行编号,然后消去该节点, 每消去一个节点 ,尚未编号节点的支路连接数就会发生变化, 然后从未编号节点中查找连接支路最少的节点进行编号。如此反复 ,直到消去所有节点 。半动态优化法考虑了各节点出线数目的变动情况, 注入元素减少 ,具有优化效果好 ,编程简单 ,优化快等优点, 但与动态优化法相比元素仍然过多 。
(3)动态优化法:动态优化法分为两步 ,第一步是将网络的所有节点轮流进行一次消去运算 ,统计各节点消去后各自增加的新支路数, 将增加支路数最少的节点编号为 1, 然后消去该节点;第二步是将尚未编号的每个节点依次进行一次消去运算 ,统计各节点消去后各自增加的支路数, 将增加支路数最少的节点编号为2,随后消去该节点。依此类推,对尚未编号的节点全部按照此操作,即完成节点编号优化。从理论上说 ,动态法的优化效果最好, 但优化速度慢 ,运算量大 。
这里采用半动态法进行节点优化编号,具体过程如下:
function line=nodeoptimization(LN,n,slackbus)
%LN is parameters of branch;n is the number of bus;slackbus is slack bus;
%mn is the bus which has the least branch;code is serial number before
%optimization;line is serial number after optimization;num is number of
%branches of each bus.
deletematrix=zeros(n);
code=1:n;
num=zeros(1,n);
for i=1:length(LN(:,1)) %生成支路关联矩阵deletematrix 矩阵num记录每个节点的度
deletematrix(LN(i,1),LN(i,2))=1;
num(LN(i,1))=num(LN(i,1))+1;
deletematrix(LN(i,2),LN(i,1))=1;
num(LN(i,2))=num(LN(i,2))+1;
end
line=zeros(1,n);
for i=1:n-1 %节点优化编号:半动态优化法。 %半动态优化法:找到连接支路最少的节点进行编号,然后消去该节点,每消去
[~,mn]=min(num); %mn为节点度最小的节点编号 %一个节点 ,尚未编号节点的支路连接数就会发生变化,然后
for j=1:length(num) %从未编号节点中查找连接支路最少的节点进行编号
if deletematrix(mn,j)~=0
if j
Github代码下载:FancyNum