基于牛顿拉夫逊法潮流计算的matlab实验报告定稿(编辑修改稿)内容摘要:

+ j + j + j 23 22 + j + j + j 24 23 + j + j + j 基于牛顿拉夫逊法潮流计算的 matlab 实验报告 26 25 + j + j + j 27 26 + j + j + j 28 26 + j + j + j 29 26 + j + j + j 29 28 + j + j + j 4 0 + j + j + j 5 0 + j + j + j 11 12 + j + j + j 13 12 + j + j + j 30 2 + j + j + j 31 6 + j + j + j 32 10 + j + j + j 34 20 + j + j + j 33 19 + j + j + j 35 22 + j + j + j 36 23 + j + j + j 37 25 + j + j + j 38 29 + j + j + j 20 19 + j + j + j 基于牛顿拉夫逊法潮流计算的 matlab 实验报告 结果分析:此程序的运行结果和试验程序给出的结果是一致的。 说明程序无误,但在精确度上有微小差异,这主要是和导纳矩阵的精确度以及显示精度有关。 心得:本程序分模块进行,先是排序,再是求导纳阵,然后求雅阁比,再进行迭代运算,程序本身很简洁明了,运行的时候只需要在 matlab 里输入 main 就行了,然后打开 BUS 和 line 所在的 .m文件,结果就会自动存在 result 文件中了,通过编写牛顿拉夫逊法 matlab 潮流计算程序复习了潮流计算的知识,也实现了计算机算法 附录: 实验源程序: Main函数: clear [dfile,pathname]=uigetfile(39。 *.m39。 ,39。 Select Data File39。 )。 if pathname == 0 error(39。 you must select a valid data file39。 ) else lfile =length(dfile)。 % strip off .m eval(dfile(1:lfile2))。 end [nb,mb]=size(bus)。 [nl,ml]=size(line)。 % 计算 bus和 line矩阵的行数和列数 [bus,line,nPQ,nPV,nodenum] = Num(bus,line)。 % 对节点重新排序的子程序 Y = y(bus,line) % 计算节点导纳矩阵的子程序 myf = fopen(39。 39。 ,39。 w39。 )。 fprintf(myf,39。 计算结果 39。 )。 fclose(myf)。 % 在当前目录下生成“ ”文件,写入节点导纳矩阵 format long EPS =。 % 设定误差精度 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 end dAngU = J\[dP。 dQ]。 dAng = dAngU(1:nb1,1)。 % 计算相角修正量 dU = UD*(dAngU(nb:nb+nPQ1,1))。 % 计算电压修正量 bus(1:nPQ,2) = bus(1:nPQ,2) dU。 % 修正电压 bus(1:nb1,3) = bus(1:nb1,3) dAng。 % 修正相角 if (max(abs(dU))EPS)amp。 (max(abs(dAng))EPS) 基于牛顿拉夫逊法潮流计算的 matlab 实验报告 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(39。 39。 ,39。 a39。 )。 fprintf(myf,39。 牛顿-拉夫逊法潮流计算结果 节点计算结果: n节点 节点电压 节点相角(角度) 节点注入功率 \n39。 )。 for i = 1:nb fprintf(myf,39。 % 39。 ,bus_res(i,1))。 fprintf(myf,39。 % 39。 ,bus_res(i,2))。 fprintf(myf,39。 % 39。 ,bus_res(i,3))。 fprintf(myf,39。 % + j %\n39。 ,real(bus_res(i,4)),imag(bus_res(i,4)))。 end fprintf(myf,39。 n线路计算结果: n节点 I 节点 J 线路功率 S(I,J) 线路功率 S(J,I) 线路损耗 dS(I,J)\n39。 )。 for i = 1:nl fprintf(myf,39。 % 39。 ,S_res(i,1))。 fprintf(myf,39。 % 39。 ,S_res(i,2))。 fprintf(myf,39。 % + j % 39。 ,real(S_res(i,3)),imag(S_res(i,3)))。 fprintf(myf,39。 % + j % 39。 ,real(S_res(i,4)),imag(S_res(i,4)))。 fprintf(myf,39。 % + j%\n39。 ,real(S_res(i,5)),imag(S_res(i,5)))。 end fclose(myf)。 % 迭代结束后继续在“ ”写入节点计算结果和线路计算结果 程序结束 作用为对节点重排序,并修改相应的线路数据 function [bus,line,nPQ,nPV,nodenum] = Num(bus,line) [nb,mb]=size(bus)。 [nl,ml]=size(line)。 nSW = 0。 % number of swing bus counter nPV = 0。 % number of PV bus counter nPQ = 0。 % number of PQ bus counter for i = 1:nb, % nb为总节点数 type= bus(i,6)。 if type == 3, nSW = nSW + 1。 % increment swing bus counter 基于牛顿拉夫逊法潮流计算的 matlab 实验报告 SW(nSW,:)=bus(i,:)。 elseif type == 2, nPV = nPV +1。 % increment PV bus counter PV(nPV,:)=bus(i,:)。 else nPQ = nPQ + 1。 % increment PQ bus counter PQ(nPQ,:)=bus(i,:)。 end end。 bus=[PQ。 PV。 SW]。 newbus=[1:nb]39。 nodenum=[newbus bus(:,1)]。 bus(:,1)=newbus。 for 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 end 作用为计算节点导纳矩阵 function Y = y(bus,line) [nb,mb]=size(bus)。 [nl,ml]=size(line)。 Y=zeros(nb,nb)。 for k=1:nl I=line(k,1)。 %读入线路参数 J=line(k,2)。 Zt=line(k,3)+j*line(k,4)。 Yt=1/Zt。 Ym=line(k,5)+j*line(k,6)。 K=line(k,7)。 if (K==0)amp。 (J~=0) %。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。