《潮流计算matlab-牛顿拉夫逊法法》由会员分享,可在线阅读,更多相关《潮流计算matlab-牛顿拉夫逊法法(21页珍藏版)》请在金锄头文库上搜索。
1、用matlab潮流计算(牛顿拉夫逊法)%主程序:dfile,pathname=uigetfile(ieee14.m,Select Data File);if pathname=0 error(you must select a valid data file)else lfile=length(dfile); % strip off .m eval(dfile(1:lfile-2); %打开数据文件endglobal n;global m;nb,mb=size(bus); %节点重新编号nl,ml=size(line); nSW=0; % 平衡节点数目 nPV=0; % PV节点数目 nPQ=
2、0; % PQ节点数目 for i=1:nb, % nb为总节点数 type=bus(i,6); if type=3, nSW=nSW+1; % 统计平衡节点数目 SW(nSW,:)=bus(i,:); elseif type=2, nPV=nPV+1; % 统计PV节点数目 PV(nPV,:)=bus(i,:); else nPQ=nPQ+1; % 统计PQ节点数目 PQ(nPQ,:)=bus(i,:); end end; bus=PQ;PV;SW; newbus=1:nb; f=bus(:,1); nodenum=newbus bus(:,1); bus(:,1)=newbus; for
3、i=1:nl for j=1:2 for k=1:nb if line(i,j)=nodenum(k,2) line(i,j)=nodenum(k,1); break end end end endY=y(bus,line); %形成节点导纳矩阵K=0; %迭代次数初值Kmax=10; %最大迭代次数eps1=1.0e-10;eps2=1.0e-10;m=nPQ;n=nb;Um=eye(m,m);myf=fopen(output1.dat,w);for K=1:Kmax for i=1:m for j=1:m if i=j Um(i,j)=bus(i,2); end end end b=dPQ
4、(Y,bus); C=jac(bus,Y); dX=Cb; dx=dX; nx,mx=size(dx); for i=1:n-1 %计算相角 bus(i,3)=bus(i,3)-dX(i,1); end B=dx(nx,n:mx)*Um; %计算电压差 bus(1:m,2)=bus(1:m,2)-B; %计算电压值 dx(nx,n:mx)=B; fprintf(myf,-第%d次迭代时雅可比矩阵-,K) fprintf(myf, n); for i=1:(n+m-1) for j=1:(n+m-1) fprintf(myf,%8.6f, C(i,j); fprintf(myf, ); end
5、fprintf(myf, n); end fprintf(myf,-第%d次迭代时dPQ的误差-,K) fprintf(myf, n); for i=1:(n+m-1) fprintf(myf,%8.6e, b(1,i); fprintf(myf, n); end fprintf(myf, n); fprintf(myf,-第%d次迭代时dx(误差)-,K) fprintf(myf, n); for i=1:(n+m-1) fprintf(myf,%8.6e, dX(i,1); fprintf(myf, n); end fprintf(myf, n); fprintf(myf,第%d次迭代后节
6、点电压(仅PQ节点),K) fprintf(myf, n); for i=1:m fprintf(myf,%8.6f, bus(i,2); fprintf(myf, n); end fprintf(myf, n); fprintf(myf,第%d次迭代后相角(角度),K) fprintf(myf, n); for i=1:n fprintf(myf,%8.6f, bus(i,3)*180/pi); fprintf(myf, n); end fprintf(myf, n); if (max(abs(dx)eps1)&(max(abs(b)bus(l,1) r=bus(t,:);bus(t,:)=
7、bus(l,:);bus(l,:)=r; end endendfor i=1:nl for j=1:2 for k=1:nb if line(i,j)=nodenum(k,1) line(i,j)=nodenum(k,2); break end end endend fclose(myf);Pf=loss(bus,line); %计算支路潮流及损耗 %将节点导纳矩阵、节点潮流计算结果写入文件output2 myf=fopen(output2.dat,w); fprintf(myf, -节点导纳矩阵-n); for k=1:n for j=1:n fprintf(myf,%8.6f, real(
8、Y(k,j); fprintf(myf, +i*); fprintf(myf,%8.6f, imag(Y(k,j); fprintf(myf, ); end fprintf(myf, n); end fprintf(myf, -牛顿拉夫逊法潮流计算结果-n); fprintf(myf, -节点计算结果-n); fprintf(myf, - 节点 节点电压 节点相角 注入有功功率(P) 注入无功功率(Q) 类型-n); for l=1:nb for j=1:mb if j=1|j=6 fprintf(myf, %8.1f , bus(l,j); elseif j=3 fprintf(myf, %8.6f , bus(l,j)*180/pi); else fprintf(myf, %8.6f , bus(l,j); end end fprintf(myf, n); end fprintf(myf, -支路计算结果-n); fprintf(myf, - 节点(I) 节点(J) 线路功率S(I,J) 线路功率S(J,I) 线路损耗dS(I,J)-n); for k=1:nl for j=1:5 if j=2 fprintf(myf,%8.1f , Pf(k,j); fprintf(myf, ); else fprintf(myf,%8.6f, real(Pf(k,j