主程序 "PowerFlow_NR.m"
function [bus_res,S_res] = PowerFlow_NR_2 % 牛顿-拉夫逊法解潮流方程的主程序
%%%%%%%%%%%%%%%%%%%%% by
longdinhohe %%%%%%%%%%%%%%%%%%%%% http://blog.sina.com.cn/longdinhohe %%%%%%%%%
%%%%%%%%%%%%
[bus,line] = OpDF_; % 打开数据文件的子程序,返回 bus(节点数据)和 line(线路数据)
回主程序
[nb,mb]=size(bus);
[nl,ml]=size(line); % 计算 bus 和 line 矩阵的行数和列数
[bus,line,nPQ,nPV,nodenum] = Num_(bus,line); % 对节点重新排序的子程序
Y = y_(bus,line); % 计算节点导纳矩阵的子程序
myf = fopen('Result.m','w');
fprintf(myf,'--------------- by longdinhohe --------------- http://blog.sina.com.cn/longdinhohe ---------------');
fclose(myf); % 在当前目录下生成“Result.m”文件,写入节点导纳矩阵
format long
EPS = 1.0e-10; % 设定误差精度
for t = 1:100 % 开始迭代计算,设定最大迭代次数为 100,以便不收敛情况下及时跳出
[dP,dQ] = dPQ_(Y,bus,nPQ,nPV); % 计算功率偏差 dP 和 dQ 的子程序
J = Jac_(bus,Y,nPQ); % 计算雅克比矩阵的子程序
UD = zeros(nPQ,nPQ);
for i = 1:nPQ
UD(i,i) = bus(i,2); % 生成电压对角矩阵
end
dAngU = J \ [dP;dQ];
dAng = dAngU(1:nb-1,1); % 计算相角修正量
dU = UD*(dAngU(nb:nb+nPQ-1,1)); % 计算电压修正量
bus(1:nPQ,2) = bus(1:nPQ,2) - dU; % 修正电压
bus(1:nb-1,3) = bus(1:nb-1,3) - dAng; % 修正相角
if (max(abs(dU))<EPS)&(max(abs(dAng))<EPS)
break
end % 判断是否满足精度误差,如满足则跳出,否则返回继续迭代
end
bus = PQ_(bus,Y,nPQ,nPV); % 计算每个节点的有功和无功注入的子程序
[bus,line] = ReNum_(bus,line,nodenum); % 对节点恢复编号的子程序
YtYm = YtYm_(line); % 计算线路的等效 Yt 和 Ym 的子程序,以计算线路潮流
bus_res = bus_res_(bus); % 计算节点数据结果的子程序
S_res = S_res_(bus,line,YtYm); % 计算线路潮流的子程序
myf = fopen('Result.m','a');
fprintf(myf,'---------------牛顿-拉夫逊法潮流计算结果---------- 节点计算结果: 节点 节点电压 节
点相角(角度) 节点注入功率');
for i = 1:nb
fprintf(myf,'%2.0f ',bus_res(i,1));
fprintf(myf,'%10.6f ',bus_res(i,2));
fprintf(myf,'%10.6f ',bus_res(i,3));
fprintf(myf,'%10.6f + j %10.6f',real(bus_res(i,4)),imag(bus_res(i,4)));
end
fprintf(myf,' 线路计算结果: 节点 I 节点 J 线路功率 S(I,J) 线路功率 S(J,I) 线
路损耗 dS(I,J)');
for i = 1:nl
fprintf(myf,'%2.0f ',S_res(i,1));
fprintf(myf,'%2.0f ',S_res(i,2));
fprintf(myf,'%10.6f + j %10.6f ',real(S_res(i,3)),imag(S_res(i,3)));
fprintf(myf,'%10.6f + j %10.6f ',real(S_res(i,4)),imag(S_res(i,4)));
fprintf(myf,'%10.6f + j %10.6f',real(S_res(i,5)),imag(S_res(i,5)));
end
fclose(myf); % 迭代结束后继续在“Result.m”写入节点计算结果和线路计算结果 程序
结束