牛顿-拉夫逊法潮流计算matlab程序

用牛顿-拉夫逊算法计算带变压器的电力系统

主程序 "PowerFlow_NR.m"

function [bus_res,S_res] = PowerFlow_NR_2 % 牛顿-拉夫逊法解潮流方程的主程序

[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 --------------- www.wendangwang.com ---------------nn');
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,'---------------牛顿-拉夫逊法潮流计算结果----------nn 节点计算结果:n节点 节点电压 节点相角(角度) 节点注入功率n');
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.6fn',real(bus_res(i,4)),imag(bus_res(i,4)));
end
fprintf(myf,'n线路计算结果:n节点I 节点J 线路功

牛顿 拉夫逊法潮流计算matlab程序相关文档

最新文档

返回顶部