牛顿拉夫逊法潮流计算matlab程序
基于MATLAB牛顿拉夫逊法进行潮流计算
基于MATLAB牛顿拉夫逊法进行潮流计算【技术文档】
1.牛顿拉夫逊法在电力系统中的应用
由于电力系统存在着复杂的网络结构,要求高精度的计算,其复杂性导致一般的解析方法难以满足处理要求。
因此,经典的数值算法,如牛顿拉夫逊法(NLF)在计算中得到了广泛的应用。
牛顿拉夫逊法是一种以牛顿法为基础,利用拉夫逊步长更新的数值迭代方法。
电力系统除了需要求解静态ギス,还要求解动态ギス;这种动态ギス的求解并不是牛顿拉夫逊法的特征之一,因此,要使用牛顿拉夫逊法来求解电力系统的动态ギス,必须采用额外的技术,这种技术被称为牛顿拉夫逊法的“持续状态”,使用该方法可以求解电力系统中各类动态ギス的解。
2.MATLAB牛顿拉夫逊法应用:潮流计算
第一步,定义电力系统相关变量,包括母线及其网络拓扑结构、电源和功率元件等。
第二步,根据定义的变量建立平衡方程。
第三步,确定牛顿迭代次数以及拉夫逊步长准则。
基于MATLAB的潮流计算源程序代码(优.选)
%*************************电力系统直角坐标系下的牛顿拉夫逊法潮流计算**********clearclcload E:\data\IEEE014_Node.txtNode=IEEE014_Node;weishu=size(Node);nnum=weishu(1,1); %节点总数load E:\data\IEEE014_Branch.txtbranch=IEEE014_Branch;bwei=size(branch);bnum=bwei(1,1); %支路总数Y=(zeros(nnum));Sj=100;%********************************节点导纳矩阵*******************************for m=1:bnum;s=branch(m,1); %首节点e=branch(m,2); %末节点R=branch(m,3); %支路电阻X=branch(m,4); %支路电抗B=branch(m,5); %支路对地电纳k=branch(m,6);if k==0 %无变压器支路情形Y(s,e)=-1/(R+j*X); %互导纳Y(e,s)=Y(s,e);endif k~=0 %有变压器支路情形Y(s,e)=-(1/((R+j*X)*k));Y(e,s)=Y(s,e);Y(s,s)=-(1-k)/((R+j*X)*k^2);Y(e,e)=-(k-1)/((R+j*X)*k); %对地导纳endY(s,s)=Y(s,s)-j*B/2;Y(e,e)=Y(e,e)-j*B/2; %自导纳的计算情形endfor t=1:nnum;Y(t,t)=-sum(Y(t,:))+Node(t,12)+j*Node(t,13);%求支路自导纳endG=real(Y); %电导B=imag(Y); %电纳%******************节点分类************************************* *pq=0; pv=0; blancenode=0;pqnode=zeros(1,nnum);pvnode=zeros(1,nnum);for m=1:nnum;if Node(m,2)==3blancenode=m; %平衡节点编号else if Node(m,2)==0pq=pq+1;pqnode(1,pq)=m; %PQ 节点编号else if Node(m,2)==2pv=pv+1;pvnode(1,pv)=m; %PV 节点编号endendendend%*****************************设置电压初值********************************** Uoriginal=zeros(1,nnum); %对各节点电压矩阵初始化for n=1:nnumUoriginal(1,n)=Node(n,9); %对各点电压赋初值if Node(n,9)==0;Uoriginal(1,n)=1; %该节点为非PV节点时,将电压值赋为1endendPresion=input('请输入误差精度要求:Presion=');disp('该电力系统节点数:');disp(nnum);xiumax=0.1;counter=0;while xiumax>Presion%****************************计算不平衡量***********************************e=real(Uoriginal); %取初始电压的实部f=imag(Uoriginal); %取初始电压的虚部deta=zeros(2*pq+2*pv,1); %构造储存功率变化量的列矩阵n=1;for m=1:pq;Pi=0;Qi=0;for t=1:nnum;Pi=Pi+e(1,pqnode(1,m))*(G(pqnode(1,m),t)*e (1,t)-B(pqnode(1,m),t)*f(1,t))+f(1,pqnode(1,m ))*(G(pqnode(1,m),t)*f(1,t)+B(pqnode(1,m),t) *e(1,t));%计算该PQ节点的负荷有功Qi=Qi+f(1,pqnode(1,m))*(G(pqnode(1,m),t)*e (1,t)-B(pqnode(1,m),t)*f(1,t))-e(1,pqnode(1,m ))*(G(pqnode(1,m),t)*f(1,t)+B(pqnode(1,m),t) *e(1,t));%计算该PQ节点的负荷无功endS1(1,pqnode(1,m))=Pi+j*Qi;P=(Node(pqnode(1,m),7)-Node(pqnode(1,m), 5))/Sj-Pi;%计算该PQ节点的实际有功功率deta(n,1)=P;%在该列向量中储存有功功率n=n+1;Q=(Node(pqnode(1,m),8)-Node(pqnode(1,m),6))/Sj-Qi;%计算该PQ节点的实际无功功率deta(n,1)=Q;%在该列向量中储存无功功率n=n+1;endfor m=1:pv;Pv=0; Qv=0;for t=1:nnum;Pv=Pv+e(1,pvnode(1,m))*(G(pvnode(1,m),t)* e(1,t)-B(pvnode(1,m),t)*f(1,t))+f(1,pvnode(1, m))*(G(pvnode(1,m),t)*f(1,t)+B(pvnode(1,m), t)*e(1,t));%计算该PV节点的负荷有功Ui=e(1,pvnode(1,m))^2+f(1,pvnode(1,m))^2; %计算该节点的负荷电压值Qv=Qv+f(1,pqnode(1,m))*(G(pqnode(1,m),t)* e(1,t)-B(pqnode(1,m),t)*f(1,t))-e(1,pqnode(1, m))*(G(pqnode(1,m),t)*f(1,t)+B(pqnode(1,m), t)*e(1,t));endS1(1,pvnode(1,m))=Pv+j*Qv;P=(Node(pvnode(1,m),7)-Node(pvnode(1,m), 5))/Sj-Pv; %计算该节点的实际有功功率deta(n,1)=P; %储存该有功功率n=n+1;U=Node(pvnode(1,m),3)^2-Ui; %计算电压变化量deta(n,1)=U; %储存该电压变化量n=n+1;enddeta;cerate=zeros(pq+pv,1);for k=1:pqcerate(k,1)=pqnode(1,k);endfor v=1:pvcerate(pq+v,1)=pvnode(1,v);end%******************************雅克比矩阵****************************** Jacob=ones(2*nnum-2);L=0;J=0;H=0;N=0; R=0;S=0;n=1;k=1;form=1:pq; %m表示雅克比矩阵中pq节点的行数for u=1:pq+pv; %u 表示雅克比矩阵中pq节点的列数t=cerate(u,1); %t为中间变量,用来标记雅克比矩阵中指定元素的个数if pqnode(1,m)~=t %非对角元素的情况H=G(pqnode(1,m),t)*f(1,pqnode(1,m))-B(pqn ode(1,m),t)*e(1,pqnode(1,m));N=G(pqnode(1,m),t)*e(1,pqnode(1,m))+B(pq node(1,m),t)*f(1,pqnode(1,m));L=H;J=-N;elseifpqnode(1,m)==t %对角线元素时的情况I=0;for g=1:nnumI=Y(t,g)*Uoriginal(1,g)+I; %计算节点的注入电流endaii=real(I);bii=imag(I);H=-B(t,t)*e(1,pqnode(1,m))+G(t,t)*f(1,pqnode (1,m))+bii;N=G(t,t)*e(1,pqnode(1,m))+B(t,t)*f(1,pqnode (1,m))+aii;L=-B(t,t)*e(1,pqnode(1,m))+G(t,t)*f(1,pqnode (1,m))-bii; J=-G(t,t)*e(1,pqnode(1,m))-B(t,t)*f(1,pqnode( 1,m))+aii;endendJacob(n,k)=H;k=k+1;Jacob(n,k)=N;k=k-1;n=n+1;Jacob(n,k)=J;k=k+1;Jacob(n,k)=L;n=n-1; k=k+1; %按照雅克比矩阵的排列规则排列pq节点的雅克比元素endk=1; n=2*m+1; %将光标定位于下一个待排列PQ节点元素的第一个位置endn=2*pq+1; k=1; %定位于PV节点的第一个位置处for m=1:pv;for u=1:pq+pv;t=cerate(u,1); %t为中间变量,用来标记雅克比矩阵中指定元素的位置if pvnode(1,m)~=t %非对角线元素情况H=G(pvnode(1,m),t)*f(1,pvnode(1,m))-B(pvno de(1,m),t)*e(1,pvnode(1,m));N=G(pvnode(1,m),t)*e(1,pvnode(1,m))+B(pvn ode(1,m),t)*f(1,pvnode(1,m));R=0; S=0;endifpvnode(1,m)==t %对角线元素情况I=0;for g=1:nnumI=Y(t,g)*Uoriginal(1,g)+I; %计算PV节点的注入电流endaii=real(I);bii=imag(I);H=-B(t,t)*e(1,pvnode(1,m))+G(t,t)*f(1,pvnode (1,m))+bii;N=G(t,t)*e(1,pvnode(1,m))+B(t,t)*f(1,pvnode( 1,m))+aii;R=2*f(1,pvnode(1,m));S=2*e(1,pvnode(1,m));endJacob(n,k)=H; k=k+1;Jacob(n,k)=N; k=k-1;n=n+1;Jacob(n,k)=R; k=k+1;Jacob(n,k)=S;n=n-1;k=k+1; %按照雅克比矩阵的排列规则排列PV节点的雅克比元素endk=1;n=n+2; %定位于下一个待排列PV节点的雅克比元素第一个位置end%*************************电压变化量化的计算与存储************************************ Detau=inv(Jacob)*deta; %构建电压的变化量的列向量f=zeros(1,nnum); %给电压实部赋初值0e=zeros(1,nnum); %给电压虚部赋初值0for p=1:(pq+pv);f(1,cerate(p,1))=j*Detau(2*p-1,1);%将电压变量的奇数行赋值给fe(1,cerate(p,1))=Detau(2*p,1); %将电压变量的偶数行赋值给eendt=e+f;xiumax=abs(Detau(1,1)); %将电压变化量的第一个元素赋值给最大允许误差for n=2:2*nnum-2;if abs(Detau(n,1))>xiumaxxiumax=abs(Detau(n,1)); %找出最大的电压误差endendUoriginal=Uoriginal+t; %迭代修正后的电压值counter=1+counter; %统计迭代次数enddisp('迭代次数counter:');disp(counter);%**************************平衡节点功率及显示**********************************m=blancenode;t=0;for n=1:nnum;t=t+(G(m,n)-j*B(m,n))*(real(Uoriginal(1,n))-j*i mag(Uoriginal(1,n)));endS1(1,m)=Uoriginal(1,m)*t;%**************************直角坐标下各节点电压及显示****************************U=zeros(1,nnum);for n=1:nnumUi(n,1)=Node(n,1);U(1,n)=real(Uoriginal(1,n))+i*imag(Uoriginal(1 ,n)); %将电压值由极坐标转化为直角坐标形式Ui(n,2)=U(1,n);Ui(n,3)=S1(1,n);enddisp('各节点电压直角坐标形式及节点注入功率:');disp(' 节点号节点电压值节点注入功率');disp(Ui);disp('修正电压的最大误差:')disp(xiumax);%**************************功率损耗************************************* **for m=1:bnum %支路功率及损耗startnode=branch(m,1);endnode=branch(m,2); %终止节点y=sum(Y,2);Sij=Uoriginal(1,startnode)*((conj(Uoriginal(1,s tartnode))*conj(y(startnode,1)))+(conj(Uorigi nal(1,startnode))-conj(Uoriginal(1,endnode))) *conj(-Y(startnode,endnode)));Sji=Uoriginal(1,endnode)*((conj(Uoriginal(1,e ndnode))*conj(y(endnode,1)))+(conj(Uoriginal (1,endnode))-conj(Uoriginal(1,startnode)))*co nj(-Y(endnode,startnode)));S(m,1)=startnode; %始节点S(m,2)=endnode; %末节点S(m,3)=Sij; %始节点流入的功率S(m,4)=Sji; %末节点流入的功率S(m,5)=Sij+Sji; %线路损耗enddisp('支路功率及损耗:');disp('节点号(I) 节点号(J) 支路功率(I-J)支路功率(J-I)线路损耗(delta_S)')disp(S); 最新文件---------------- 仅供参考--------------------已改成word文本--------------------- 方便更改。
matlab3节点牛顿拉夫逊潮流计算
1. Matlab3节点牛顿拉夫逊潮流计算简介Matlab是一种高度灵活的编程语言和数学工具,被广泛应用于科学计算和工程领域。
3节点牛顿拉夫逊潮流计算是一种电力系统分析方法,用于计算电力系统中各节点的电压和相角。
在本文中,我们将介绍如何使用Matlab进行3节点牛顿拉夫逊潮流计算,以及该方法的原理和应用。
2. 3节点牛顿拉夫逊潮流计算原理3节点牛顿拉夫逊潮流计算是一种基于潮流方程的迭代算法。
它通过不断迭代求解节点电压和相角,以达到系统在给定负荷下的稳态。
其核心原理是利用牛顿拉夫逊法迭代求解潮流方程,即功率平衡方程和节点电压方程,直至收敛得到结果。
3. Matlab在3节点牛顿拉夫逊潮流计算中的应用Matlab提供了丰富的数学工具和函数库,使其成为进行电力系统分析的理想工具。
在3节点牛顿拉夫逊潮流计算中,我们可以利用Matlab编写相应的算法和程序,对实际电力系统进行分析和计算。
通过Matlab的矩阵运算和迭代算法,可以高效地求解潮流方程,得到系统各节点的电压和相角。
4. 3节点牛顿拉夫逊潮流计算的应用3节点牛顿拉夫逊潮流计算在电力系统规划、运行和故障分析中具有重要的应用价值。
通过计算系统各节点的电压和相角,可以评估系统的电压稳定性和潮流分布,指导电力系统的规划和调度。
在系统发生故障时,可以利用3节点牛顿拉夫逊潮流计算分析系统的稳定性和可靠性,为故障处理提供依据。
5. 结语3节点牛顿拉夫逊潮流计算是一种重要的电力系统分析方法,Matlab作为一种强大的数学工具,为其提供了理想的支持和实现。
通过Matlab进行3节点牛顿拉夫逊潮流计算,可以高效地进行电力系统分析和计算,为电力系统的规划和运行提供科学依据。
希望本文可以帮助读者更加深入地了解3节点牛顿拉夫逊潮流计算及其在Matlab 中的应用。
6. Matlab3节点牛顿拉夫逊潮流计算的优势利用Matlab进行3节点牛顿拉夫逊潮流计算具有许多优势。
Matlab提供了丰富的数学函数和工具,能够快速高效地进行矩阵运算、迭代求解等操作,极大地简化了算法的实现。
csdn电力系统牛顿拉夫逊法潮流计算matlab
电力系统牛顿拉夫逊法潮流计算在实际应用中具有重要意义。
本文将结合CSND评台上的相关资料,从理论和实践两个角度对该方法进行介绍和分析。
文章首先解释了牛顿拉夫逊法的原理和基本概念,其次介绍了潮流计算在电力系统中的作用和意义。
文章分析了目前牛顿拉夫逊法在潮流计算中的应用情况,并详细探讨了该方法在MATLAB软件中的实现过程。
本文总结了牛顿拉夫逊法在电力系统潮流计算中的优缺点,并对未来的发展趋势进行了展望。
一、牛顿拉夫逊法原理和基本概念1.1 牛顿拉夫逊法的基本原理牛顿拉夫逊法(Newton-Raphson method)是一种用于解决非线性方程组的数值方法。
其基本思想是通过不断迭代,逐步逼近方程组的解。
具体而言,牛顿拉夫逊法首先利用当前点的切线来估计方程组的根,然后通过迭代计算逐步逼近真实的解。
该方法在数学和工程领域中得到了广泛的应用,尤其在电力系统潮流计算中发挥着重要作用。
1.2 牛顿拉夫逊法的基本步骤牛顿拉夫逊法的基本步骤可以总结为以下几点:(1)选择初始点:首先需要选择一个合适的初始点作为迭代的起始点;(2)计算雅可比矩阵:根据当前点的数值,计算出雅可比矩阵,该矩阵用于估计方程组的根;(3)更新迭代点:利用雅可比矩阵和当前点的值,计算出新的迭代点;(4)判断收敛性:判断新的迭代点是否满足收敛条件,如果满足则停止迭代,否则返回第(2)步继续计算。
以上就是牛顿拉夫逊法的基本步骤,通过不断迭代,最终可以得到方程组的解。
二、潮流计算在电力系统中的作用和意义2.1 潮流计算的概念潮流计算是电力系统中一种重要的分析方法,其主要目的是确定系统中各个节点的电压幅值和相角。
通过潮流计算可以得知系统中各元件的功率、电压、电流等信息,为系统的安全稳定运行提供重要数据支撑。
2.2 潮流计算的意义潮流计算在电力系统中具有重要的意义,主要体现在以下几个方面:(1)系统规划:在电力系统的规划设计阶段,潮流计算可以帮助工程师确定系统中各个节点的电压和功率分布,为系统的合理规划提供依据。
电力系统潮流计算牛顿拉夫迅法与PQ分解法通用MATLAB计算程序
此程序经40余同学使用检验,无误。
这是一个电气狗熬两个礼拜图书馆的成果,根据华中科技大学《电力系统分析》中原理编写,可用牛顿-拉夫逊和PQ分解法计算给定标幺值条件的潮流。
本人水平有限,仅供参考,欢迎一起找Bug。
2018/07/06 说明:由于本人变压器建模与PSASP不同,本人使用模型如下图,参数输入时请按该模型计算。
2018/06/18 主程序更新:增加补偿电容参数主程序% file name:chaoliu_lj.m% auther: 山东科技大学罗江% function:使用牛顿-拉夫逊法、PQ分解法计算潮流% updata:2018/6/18 13:22 增加补偿电容参数%节点类型标号%PQ节点 1%PV节点 2%slack节点 3%能计算给定标幺值网络,有且仅有一个平衡节点的潮流%注意:母线标号顺序要求:PQ节点-PV节点-平衡节点%若某元件不存在,其导纳为0,阻抗为infclear %清除工作空间变量clc %清屏%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%数据输入(标幺值)SB=100; %基准容量,单位MVA%母线基准电压Bus=[115 10.5 115 115];%交流线参数:I侧母线J侧母线阻抗1/2接地导纳Line=[4 1 0.06125+0.09527i 0;4 3 0.08469+0.12703i 0;1 3 0.13989+0.15501i 0];%变压器参数:I侧母线J侧母线阻抗变比%变压器阻抗归算到I侧Trans=[2 3 0.0137+0.2881i 0.9504];%加接地电容器补偿: 母线导纳Cap=[2 0.5i];%发电机参数:母线节点类型P V/U θGen=[4 3 1 0];%负荷参数:母线节点类型P Q%按参考方向,发电机发出功率(正值),负荷消耗功率(负值)Load=[1 1 -0.18 -0.06;2 1 -0.32 -0.12];mode=1; %1-极坐标下牛拉法,2-PQ分解法Tmax=50; %最大迭代次数limit=1.0e-4; %要求精度%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%变压器π型等效阻抗参数Zt=zeros(size(Trans,1),3);Zt(:,1)=Trans(:,3)./Trans(:,4);Zt(:,2)=Trans(:,3)./(1-Trans(:,4));Zt(:,3)=Trans(:,3)./(Trans(:,4).^2-Trans(:,4));Trans_pi=[Trans(:,1:2) Zt(:,1) 1./Zt(:,2) 1./Zt(:,3)];n=numel(Bus); %总节点数m=n-1; %PQ节点数for i=1:size(Gen,1)%数组行数if Gen(i,2)==2 %除去PV节点就是PQ节点m=m-1;endendfor i=1:size(Load,1)if Load(i,2)==2m=m-1;endend%PQ节点包含浮游节点,其PQ=0%提取P,Q,U向量P=zeros(1,n); %P,Q为原始数据,Pi,Qi为计算结果Q=zeros(1,n);U=ones(1,n); %电压初始值由此确定cita=zeros(1,n); %此处未知节点皆设为1.0∠0 %注意:此处角度单位为度,提取后再转换成弧度,后面计算使用弧度for i=1:size(Gen,1)if Gen(i,2)==1 %PQ节点P(Gen(i,1))=Gen(i,3);Q(Gen(i,1))=Gen(i,4);endif Gen(i,2)==2 %PV节点P(Gen(i,1))=Gen(i,3);U(Gen(i,1))=Gen(i,4);endif Gen(i,2)==3 %slack节点U(Gen(i,1))=Gen(i,3);cita(Gen(i,1))=Gen(i,4);endendfor i=1:size(Load,1)if Load(i,2)==1 %PQ节点P(Load(i,1))=Load(i,3);Q(Load(i,1))=Load(i,4);endif Load(i,2)==2 %PV节点P(Load(i,1))=Load(i,3);U(Load(i,1))=Load(i,4);endif Load(i,2)==3 %slack节点U(Load(i,1))=Load(i,3);cita(Load(i,1))=Load(i,4);endenddisp('初始条件:')disp('各节点有功:')disp(P);disp('各节点无功:')disp(Q);disp('各节点电压幅值:')disp(U);cita=(deg2rad(cita)); %角度转换成弧度disp('各节点电压相角(度):')disp(rad2deg(cita)); %显示依然使用角度%节点导纳矩阵的计算Y=zeros(n); %新建节点导纳矩阵y=zeros(n); %网络中的真实导纳%计算y(i,j)for i=1:size(Line,1) %与交流线联结的真实导纳ii=Line(i,1); jj=Line(i,2);y(ii,jj)=1/Line(i,3);y(jj,ii)=y(ii,jj);endfor i=1:size(Trans_pi,1) %与变压器联结的真实导纳ii=Trans_pi(i,1); jj=Trans_pi(i,2);y(ii,jj)=1/Trans_pi(i,3);y(jj,ii)=y(ii,jj);end%计算y(i,i)for i=1:size(Line,1) %与交流线联结的对地导纳ii=Line(i,1); jj=Line(i,2);y(ii,ii)=y(ii,ii)+Line(i,4);y(jj,jj)=y(jj,jj)+Line(i,4);endfor i=1:size(Trans_pi,1) %与变压器联结的对地导纳ii=Trans_pi(i,1); jj=Trans_pi(i,2);y(ii,ii)=y(ii,ii)+Trans_pi(i,4);y(jj,jj)=y(jj,jj)+Trans_pi(i,5);end%算上补偿电容for i=1:size(Cap,1)ii=Cap(i,1);y(ii,ii)=y(ii,ii)+Cap(i,2);end%由y计算Yysum=sum(y,1); %每一行求和for i=1:nfor j=1:nif i==jY(i,j)=ysum(i);elseY(i,j)=-y(i,j);endendenddisp('节点导纳矩阵:');disp(Y);G=real(Y); %电导矩阵B=imag(Y); %电纳矩阵%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%以上为基础数据整理%接下来是牛拉法的大循环%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%计算功率不平衡量[dP,dQ,Pi,Qi]=Unbalanced( n,m,P,Q,U,G,B,cita );disp('有功不平衡量:');disp(dP);disp('无功不平衡量:');disp(dQ);for i=1:Tmaxfprintf('第%d次迭代\n',i);%雅可比矩阵的计算if(mode==1)J=Jacobi( n,m,U,cita,B,G,Pi,Qi );disp('雅可比矩阵');disp(J);end%求解节点电压修正量if(mode==1)[dU,dcita]=Correct( n,m,U,dP,dQ,J );else[dU,dcita]=PQ_LJ( n,m,dP,dQ,U,B );enddisp('电压、相角修正量:');disp(dU);disp(rad2deg(dcita));%修正节点电压U=U+dU;cita=cita+dcita;disp('节点电压幅值:');disp(U);disp('节点电压相角:');disp(rad2deg(cita));%计算功率不平衡量[dP,dQ,Pi,Qi]=Unbalanced( n,m,P,Q,U,G,B,cita );disp('有功不平衡量:');disp(dP);disp('无功不平衡量:');disp(dQ);if (max(abs(dP))<limit && max(abs(dQ))<limit )break;end%ifend%for%迭代结束,判断收敛if (max(abs(dP))<limit && max(abs(dQ))<limit )disp('计算收敛');elsedisp('计算不收敛或未达到要求精度');end%打印功率fprintf('迭代总次数:%d\n', i);disp('节点电压幅值:');disp(U);disp('节点电压相角:');disp(rad2deg(cita));disp('有功计算结果:');disp(Pi);disp('无功计算结果:');disp(Qi);子程序一% filename:Unbalanced.m% author: 山东科技大学罗江% function: 计算功率不平衡量function [ dP,dQ,Pi,Qi ] = Unbalanced( n,m,P,Q,U,G,B,cita )%计算ΔPi有功的不平衡量for i=1:nfor j=1:nPn(j)=U(i)*U(j)*(G(i,j)*cos(cita(i)-cita(j))+B(i,j)*sin(cita(i)-cita(j)));endPi(i)=sum(Pn);enddP=P(1:n-1)-Pi(1:n-1); %dP有n-1个%计算ΔQi无功的不平衡量for i=1:nfor j=1:nQn(j)=U(i)*U(j)*(G(i,j)*sin(cita(i)-cita(j))-B(i,j)*cos(cita(i)-cita(j)));endQi(i)=sum(Qn);enddQ=Q(1:m)-Qi(1:m); %dQ有m个end%func子程序二% filename:Jacobi.m% author:山东科技大学罗江% function: 计算雅可比矩阵function [ J ] = Jacobi( n,m,U,cita,B,G,Pi,Qi )%雅可比矩阵的计算%分块H N K L%i!=j时for i=1:n-1for j=1:n-1H(i,j)=-U(i)*U(j)*(G(i,j)*sin(cita(i)-cita(j))-B(i,j)*cos(cita(i)-cita(j)));endendfor i=1:n-1for j=1:mN(i,j)=-U(i)*U(j)*(G(i,j)*cos(cita(i)-cita(j))+B(i,j)*sin(cita(i)-cita(j)));endendfor i=1:mfor j=1:n-1K(i,j)=U(i)*U(j)*(G(i,j)*cos(cita(i)-cita(j))+B(i,j)*sin(cita(i)-cita(j)));endendfor i=1:mfor j=1:mL(i,j)=-U(i)*U(j)*(G(i,j)*sin(cita(i)-cita(j))-B(i,j)*cos(cita(i)-cita(j)));endend%i==j时for i=1:n-1H(i,i)=U(i).^2*B(i,i)+Qi(i);endfor i=1:mN(i,i)=-U(i).^2*G(i,i)-Pi(i);endfor i=1:mK(i,i)=U(i).^2*G(i,i)-Pi(i);endfor i=1:mL(i,i)=U(i).^2*B(i,i)-Qi(i);end%合成雅可比矩阵J=[H N;K L];end子程序三% filename:Correct.m% author:山东科技大学罗江% function:修正节点电压function [ dU,dcita ] = Correct( n,m,U,dP,dQ,J )%求解节点电压修正量for i=1:mUd2(i,i)=U(i);enddPQ=[dP dQ]';dUcita=(-inv(J)*dPQ)';dcita=dUcita(1:n-1);dcita=[dcita 0];dU=(Ud2*dUcita(n:n+m-1)')';dU=[dU zeros(1,n-m)];end子程序四% filename:PQ_LJ.m% author:山东科技大学罗江% function:使用PQ分解法计算电压修正量function [ dU,dcita ] = PQ_LJ( n,m,dP,dQ,U,B )dP_U=dP./U(1:n-1);dQ_U=dQ./U(1:m);dUdcita=(-inv(B(1:n-1,1:n-1))*dP_U')';dcita=dUdcita./U(1:n-1);dU=(-inv(B(1:m,1:m))*dQ_U')';dU=[dU zeros(1,n-m)];dcita=[dcita 0];%补零end (使用时此括号删去。
牛顿—拉夫逊法潮流计算MATLAB程序
牛顿一拉夫逊法潮流计算程序By Yuluo%牛顿--拉夫逊法进行潮流计算n=i nput(' 请输入节点数:n=');n1=i nput('请输入支路数:n仁');isb=i nput(' 请输入平衡母线节点号:isb=');pr=i nput('请输入误差精度:pr=');B1=input('请输入由支路参数形成的矩阵:B1=');B2=input('请输入各节点参数形成的矩阵:B2=');X=input('请输入由节点参数形成的矩阵:X=');Y=zeros( n);e=zeros(1, n);f=zeros(1, n);V=seros(1, n);O=zeros(1, n);S1=zeros( n1); for i=1: nif X(i,2)~=0;p=X(i,1);丫(p,p)=1./X(i,2);endendfor i=1: n1if B1(i,6)==0p=B1(i,1);q=B1(i,2);else p=B1(i,2);q=B1(i,1);end丫(p,q)=Y(p,q)-1./(B1(i,3)*B1(i,5);Y(p,q)=Y(p,q);Y(p,q)=Y(q,q)+1./(B1(i,3)*B1(i,5F2)+B1(i,4)./2;丫(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4)./2;end % 求导纳矩阵G=real(Y);B=imag(Y);for i=1: ne(i)=real(B2(i,3));f(i)=imag(B2(i,3));V(i)=B2(i,4);endfor i=1: nS(i)=B2(i,1)-B2(i,2);B(i,i)=B(i,i)+B2(i,5);endP=rea(S);Q=imag(S);ICT1=0;IT2=1;NO=2* n;N=NO+1;a=0;while IT2~=0IT2=0;a=a+1;for i=1: n;C(i)=0;D(i)=0;for j1=1: nC(i)=C(i)+G(i,j1)*e(j1)-B(i,j1)*f(j1);D(i)=D(i)+G(i,j1)*f(j1)+B(i,j1)*e(j1);endP仁C(i)*e(i)+f(i)*D(i);Q仁f(i)*C(i)-D(i)*e(i); % 求'P,Q'V2=e(i)A2+f(i)A2;if B2(i,6)~=3DP=P(i)-P1;DQ=Q(i)-Q1;for j1=1: nif j1~=isb&j1~=iX1=-G(i,j1)*e(i)-B(i,j1)*f(i);X2=B(i,j1)*e(i)-G(i,j1)*f(i);X3=X2;X4=-X1;p=2*i-1;q=2*j1-1;J(p,q)=X3;J(p,N)=DQ;m=p+1;J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X4;J(m,q)=X2; end end else DP=P(i)-P1;DV=V(i)~2-V2;for j1=1: nif j1~=isb&j1~=iX1=-G(i,j1)*e(i)-B(i,j1)*f(i);X2=B(i,j1)*e(i)-G(i,j1)*f(i);X5=0;X6=0;p=2*i-1;q=2*j1-1;J(p,q)=X5;J(p,N)=DV;m=p+1;J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X6;J(m,q)=X2;elseif j1==i&j1~=isbX仁-C(i)-G(i,i)*e(i)-B(i,i)*f(i);X2=-D(i)+B(i,i)*e(i)-G(i,i)*f(i);X5=-2*e(i);X6=-2*f(i);p=2*i-1;q=2*j1-1;J(p,q)=X5;J(p,N)=DV;m=p+1;J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X6;J(m,q)=X2; end end end endend % 求雅可比矩阵for k=3:N0k1=k+1;N 1=N;for k2=k1:N1J(k,k2)=J(k,k2)./J(k,k);endJ( k,k)=1;k4=k-1;for k3=3:k4for k2=k1:N1J(k3,k2)=J(k3,k2)-J(k3,k)*J (k, k2);endJ(k3,k)=0;endendfor k3=k1:N0for k2=k1:N1J(k3,k2)=J(k3,k2)-J(k3,k)*J (k, k2);endJ(k3,k)=0;endendendfor k=3:2:N0-1L=(k+1)./2;e(L)=e(L)-J (k,N);k1=k+1;f(L)=f(L)-J(k1,N);endfor k=3:N0DET=abs (J(k, N));if DET>=prIT2=IT2+1endendICT2(a)=IT2ICT1=ICT1+1;for k=1: ndy(k)=sqrt(e(k)A2+f(k)A2);endfor i=1: nDy(k)=sqrt(e(k)A2+f(kF2);endfor i=1: nDy(ICT1,i)=dy(i);endend % 用高斯消去法解“ w=-J*V”disp('迭代次数');disp(ICTI);disp('没有达到精度要求的个数');disp(ICT2);for k=1: nV(k)=sqrt(e(k)A2+f(k)A2);O(k)=ata n(f(k)./e(k))*180./pi;endE=e+f*j;disp('各节点的实际电压标么值E为(节点号从小到大的排列):’);disp(E);disp('各节点的电压大小V为(节点号从小到大的排列):’);disp(V);disp('各节点的电压相角0为(节点号从小到大的排列):’);disp(O);for p=1: nC(p)=0;for q=1: nC(p)=C(p)+conj(丫(p,q))*conj(E(q));endS(p)=E(p)*C(p);enddisp('各节点的功率S为(节点号从小到大排列):’);disp(S);disp('各条支路的首端功率Si为(顺序同您输入B1时一样):‘);for i=1: n1if B1 ( i,6)==0p=B1(i,1);q=B1(i,2);else p=B1(i,2);q=B1(i,1);endSi(p,q)=E(p)*(conj(E(p))*conj(B1(i,4)./2)+(conj(E(p)*B1(i,5))-conj(E(q)))*con j(1./(B1(i,3)*B1(i,5))));disp(Si(p.q));enddisp('各条支路的末端功率Sj为(顺序同您的输入B1时一样):‘);for i=1: n1if B1(i,6)==0p=B1(i,1);q=B1(i,2);else p=B1(i,2);q=B1(i,1);endSj(q,p)=E(q)*(conj(E(q))*conj(B1(i,4)./2)+(xonj(E(q)./B1(i,5))-conj(E(p)))*xo nj(1./(B1(i,3)*B1(i,5))));disp(Sj(q,p));enddisp('各条支路的功率损耗DS为(顺序同您输入B1时一样):';for i=1: n1if B1(i,6)==0p=B1(i,1);q=B1(i,2);else p=B1(i,2);q=B1(i,1);endDS(i)=Si(p,q)+Sj(q,p);disp(DS(i));endfor i=1:ICT1Cs(i)=i;enddisp('以下是每次迭代后各节点的电压值(如图所示) ‘);plot(Cs,Dy),xlabel('迭代次数'),ylabel('电压'),title(' 电压迭代次数曲线');。
matlab牛顿法电力系统潮流计算
标题:Matlab牛顿法在电力系统潮流计算中的应用一、概述电力系统潮流计算是电力系统分析与设计中的重要问题,它主要用于分析电力系统中各节点的电压、相角以及功率等参数。
其中,牛顿法是一种常用的潮流计算方法,在Matlab环境下的应用也十分广泛。
本文将对Matlab牛顿法在电力系统潮流计算中的应用进行深入探讨。
二、Matlab牛顿法的原理1. 牛顿法概述牛顿法是一种用于求解非线性方程组的数值方法,其迭代形式为: \[\mathbf{x}^{\left(k+1\right)}=\mathbf{x}^{\left(k\right)}-\mathbf{J}^{-1}\mathbf{f}\left(\mathbf{x}^{\left(k\right)}\right)\]其中,\(\mathbf{x}^{\left(k\right)}\)为第\(k\)次迭代的解向量,\(\mathbf{J}\)为\(\mathbf{f}\)的雅可比矩阵。
牛顿法是一种快速收敛的迭代方法,通常在电力系统潮流计算中具有较好的效果。
2. Matlab中的牛顿法实现在Matlab中,牛顿法可以通过编写相应的函数实现。
需要定义目标函数\(\mathbf{f}\)及其雅可比矩阵\(\mathbf{J}\)。
通过编写迭代过程,利用牛顿法进行求解。
三、电力系统潮流计算1. 潮流计算的概念电力系统潮流计算是指在给定负荷、线路参数和节点电压等条件下,求解系统中各节点的电压、相角以及功率等参数的过程。
潮流计算的目的是为了评估电力系统的稳定性和运行情况,对电网的规划与运行具有重要意义。
2. 潮流计算的数学模型电力系统潮流计算可以描述为一个非线性方程组求解的过程。
其数学模型可以表示为:\[\mathbf{f}\left(\mathbf{V},\boldsymbol{\theta}\right)=\mathbf{ 0}\]其中,\(\mathbf{V}\)为节点电压复数向量,\(\boldsymbol{\theta}\)为节点相角向量,\(\mathbf{f}\)为潮流方程。
牛顿拉夫逊潮流计算[整理版]
牛顿拉夫逊潮流计算 [整理版 ]float G[N][N],B[N][N]; // struct // 阻抗参数int nl; // 左节点int nr; // 右节点牛顿拉夫逊潮流计算// 整个程序为 :// 牛拉法解潮流程序#include<stdio.h>#include<math.h>#define N 4 // 节点数#define n_PQ 2 //PQ 节点数#define n_PV 1 //PV 节点数#define n_br 5 // 串联支路数void main() void disp_matrix(float *disp_p,int disp_m,int disp_n); // 矩阵显示函 float Us[2*N]={1.0,0,1.0,0,1.05,0,1.05,0}; // 电压初值 float Ps[N]={0,-0.5,0.2}; // 有功初值float Qs[N]={0,-0.3}; // 无功初值各几点电导电纳}ydata[n_br]={ {1,2,0,0.1880,-0.6815,0.6040},{1,3,0.1302,0.2479,0.0129,0.0129},{1,4,0.1736,0.3306,0.0172,0.0172},{3,4,0.2603,0.4959,0.0259,0.0259},{2,2,0,0.05,0,0} };float Z2; //ZA2=RA2+XA2 各串 联阻抗值的平方存储电压修正值float mid1[N],mid2[N],dS[2*(N-1)]; //mid1对角线元素的中间值 ,dS 存储 PQUi 勺不平衡量float Jacob[2*(N-1)][2*(N-1)],inv_J[2*(N-1)][2*(N-1)];// 雅克比行列式float dPQU=1.0; //PQU 不平衡量最大值int kk=0; // 迭代次数int i,j,k;float t;float R; // 串联电阻值 float X; // 串联电抗值 float Bl; // 左节点并联电导 float Br; // 右节点并联电纳float e[N],f[N],dfe[2*(N-1)]; //e,f存储电压的 x 轴分量和 y 轴分量 ,dfe、mid2 存储计算雅克比行列式// 形成导纳矩阵 for(i=0;i<N;i++) for(j=0;j<N;j++)G[i][j]=0;B[i][j]=0;for(i=0;i<n_br;i++) if(ydata[i].nl!=ydata[i].nr)Z2=(ydata[i].R)*(ydata[i].R)+(ydata[i].X)*(ydata[i].X); // 串联阻抗等效导纳值// 非对角元素G[ydata[i].nl-1][ydata[i].nr-1]=(-ydata[i].R)/Z2;B[ydata[i].nl-1][ydata[i].nr-1]=ydata[i].X/Z2;G[ydata[i].nr-1][ydata[i].nl-1]=(-ydata[i].R)/Z2;B[ydata[i].nr-1][ydata[i].nl-1]=ydata[i].X/Z2;// 对角元素 float Pij[n_br]; //存储线路 i->j 的有功 float Qij[n_br]; //存储线路 i->j 的无功 float Pji[n_br]; //存储线路 j->i 的有功 float Qji[n_br]; //存储线路 j->i 的无功 float dPij[n_br]; //存储线路 i->j 的有功损耗 float dQij[n_br]; //存储线路 i->j 的无功损耗 存储线路潮流计算时的中间float AA,BB,CC,DD; //G[ydata[i].nl-1][ydata[i].nl-1]+=ydata[i].R/Z2; G[ydata[i].nr-1][ydata[i].nr-1]+=ydata[i].R/Z2; B[ydata[i].nl-1][ydata[i].nl-1]+=(-ydata[i].X/Z2); B[ydata[i].nr-1][ydata[i].nr-1]+=(-ydata[i].X/Z2); // 并联导纳等效导纳值B[ydata[i].nl-1][ydata[i].nl-1]+=ydata[i].Bl;B[ydata[i].nr-1][ydata[i].nr-1]+=ydata[i].Br; elseG[ydata[i].nl-1][ydata[i].nr-1]+=ydata[i].R;B[ydata[i].nl-1][ydata[i].nr-1]+=ydata[i].X;printf("G=\n");disp_matrix(*G,N,N);printf("B=\n");disp_matrix(*B,N,N);// 分离e,ffor(i=0;i<N;i++) e[i]=Us[2*i];f[i]=Us[2*i+1];// 主程序while(dPQU>0.00001)// 计算功率不平衡量for(i=0;i<N-1;i++) mid1[i]=0;mid2[i]=0;for(j=0;j<N;j++) mid1[i]=mid1[i]+G[i][j]*e[j]-B[i][j]*f[j]; mid2[i]=mid2[i]+G[i][j]*f[j]+B[i][j]*e[j];dS[2*i]=Ps[i]-(e[i]*mid1[i]+f[i]*mid2[i]);if(i<n_PQ) dS[2*i+1]=Qs[i]-(f[i]*mid1[i]-e[i]*mid2[i]); else dS[2*i+1]=Us[2*i]*Us[2*i]-(e[i]*e[i]+f[i]*f[i]); dPQU=0;for(i=0;i<2*(N-1);i++) if(dS[i]<0&&dPQU<-dS[i]) dPQU=-dS[i];else if(dS[i]>0&&dPQU<dS[i]) dPQU=dS[i];if(dPQU>0.00001) kk++;// 形成雅克比行列式for(i=0;i<2*(N-1);i++) for(j=0;j<2*(N-1);j++)Jacob[i][j]=0;for(j=0;j<N-1;j++)// 求H,N for(i=0;i<N-1;i++) if(i!=j)Jacob[2*i][2*j]=B[i][j]*e[i]-G[i][j]*f[i];Jacob[2*i][2*j+1]=-G[i][j]*e[i]-B[i][j]*f[i];elseJacob[2*i][2*i]=B[i][i]*e[i]-G[i][i]*f[i]-mid2[i]; Jacob[2*i][2*i+1]=-G[i][j]*e[i]-B[i][j]*f[i]-mid1[i];// 求J,L for(i=0;i<n_PQ;i++) if(i!=j)Jacob[2*i+1][2*j]=G[i][j]*e[i]+B[i][j]*f[i];Jacob[2*i+1][2*j+1]=B[i][j]*e[i]-G[i][j]*f[i];elseJacob[2*i+1][2*i]=G[i][j]*e[i]+B[i][j]*f[i]-mid1[i]; Jacob[2*i+1][2*i+1]=B[i][j]*e[i]-G[i][j]*f[i]+mid2[i];}// 求R,S for(i=n_PQ;i<N-1;i++) if(i==j)Jacob[2*i+1][2*i]=-2*f[i];Jacob[2*i+1][2*i+1]=-2*e[i];// 雅克比行列式求逆// 初始化inv_J[N][N] for(i=0;i<2*(N-1);i++)for(j=0;j<2*(N-1);j++) if(i!=j) inv_J[i][j]=0;else inv_J[i][j]=1;// 将原矩阵化简为对角阵for(i=0;i<2*(N-1);i++)for(j=0;j<2*(N-1);j++) if(i!=j) t=Jacob[j][i]/Jacob[i][i]; for(k=0;k<2*(N-1);k++)Jacob[j][k]-=Jacob[i][k]*t;inv_J[j][k]-=inv_J[i][k]*t;// 原矩阵各对角元素化为1,画出逆矩阵for(i=0;i<2*(N-1);i++) if(Jacob[i][i]!=1) t=Jacob[i][i]; for(j=0;j<2*(N-1);j++) inv_J[i][j]=inv_J[i][j]/t;// 求电压修正值for(i=0;i<2*(N-1);i++) dfe[i]=0;for(j=0;j<2*(N-1);j++) dfe[i]-=inv_J[i][j]*dS[j];for(i=0;i<N-1;i++) e[i]+=dfe[2*i+1];f[i]+=dfe[2*i];else break;// 循环结束// 求平衡节点功率mid1[N-1]=0;mid2[N-1]=0;目〒o 〒N j++) midpN 厶Hmid2运厶+G 运厶=rf 曰+B 运厶PS2 厶 HeLN 二「mid 二N 厶+nN 二 :Qs 运厶吕 N 二「mid 二 N 二〒 〔二 fo 「(nnlpQ 天 N 丄 i ++)Qs 日吕『mid 二〒e 耳mid2wpl1nff(=kkH&2rr 』kkx prinm.pH) f o 「(i H O =A N =++)Pl1mf(=%9.4r 「ps=2 prinmvIQH) fo 「(no 天 N =++) pl1mf(=%9.4r 「QS=2 prinmvIeH) fo 「(no 天 N =++) Pl1mf(=%9.4r 「e=2 prinmvIfH) f o 「(i H O =A N =++)printf("%9.4f",f[i]);printf("\n");// 求线路上的潮流// 计算S[i][j]for(i=0;i<n_br;i++)if(ydata[i].nl!=ydata[i].nr)Z2=(ydata[i].R)*(ydata[i].R)+(ydata[i].X)*(ydata[i].X);AA=-f[ydata[i].nl-1]*ydata[i].Bl+(e[ydata[i].nl-1]-e[ydata[i].nr- 1])*ydata[i].R/Z2+(f[ydata[i].nl-1]-f[ydata[i].nr-1])*ydata[i].X/Z2;BB=-e[ydata[i].nl-1]*ydata[i].Bl-(f[ydata[i].nl-1]-f[ydata[i].nr- 1])*ydata[i].R/Z2+(e[ydata[i].nl-1]-e[ydata[i].nr-1])*ydata[i].X/Z2;Pij[i]=e[ydata[i].nl-1]*AA-f[ydata[i].nl-1]*BB;Qij[i]=e[ydata[i].nl-1]*BB+f[ydata[i].nl-1]*AA;printf("S[%d][%d]=%9.4f+j%9.4f\n",ydata[i].nl,ydata[i].nr,Pij[i] ,Qij [i]);dPij[i]=Pij[i]+Pji[i];dQij[i]=Qij[i]+Qji[i];printf("\n");// 计算S[j][i]for(i=0;i<n_br;i++)if(ydata[i].nl!=ydata[i].nr)Z2=(ydata[i].R)*(ydata[i].R)+(ydata[i].X)*(ydata[i].X);CC=-f[ydata[i].nr-1]*ydata[i].Br+(e[ydata[i].nr-1]-e[ydata[i].nl- 1])*ydata[i].R/Z2+(f[ydata[i].nr-1]-f[ydata[i].nl-1])*ydata[i].X/Z2;DD=-e[ydata[i].nr-1]*ydata[i].Br-(f[ydata[i].nr-1]-f[ydata[i].nl- 1])*ydata[i].R/Z2+(e[ydata[i].nr-1]-e[ydata[i].nl-1])*ydata[i].X/Z2;Pji[i]=e[ydata[i].nr-1]*CC-f[ydata[i].nr-1]*DD;Qji[i]=e[ydata[i].nr-1]*DD+f[ydata[i].nr-1]*CC;printf("S[%d][%d]=%9.4f+j%9.4f\n",ydata[i].nr,ydata[i].nl,Pji[i] ,Qji [i]);printf("\n");// 计算dS[i][j]for(i=0;i<n_br;i++)if(ydata[i].nl!=ydata[i].nr)dPij[i]=Pij[i]+Pji[i];dQij[i]=Qij[i]+Qji[i];printf("dS[%d][%d]=%9.4f+j%9.4f\n",ydata[i].nl,ydata[i].nr, dPij[i],dQij[i]);printf("\n");}// 主程序结束// 矩阵显示函数void disp_matrix(float *disp_p,int disp_m,int disp_n)int i,j;for(i=0;i<disp_m;i++)for(j=0;j<disp_n;j++)printf("%9.4f",*(disp_p+i*disp_m+j));printf("\n");printf("\n");}。
Matlab及C语言在潮流计算运用
一,潮流计算算法原理:牛顿—拉夫逊法的基本原理 牛顿-拉夫逊法是一种求解非线性方程的数值解法,由于便于编写程序用计算机求解,应用较广。
下面以一元非线性代数方程的求解为例,来说明牛顿-拉夫逊法的基本思想。
设欲求解的非线性代数方程为 f(x)=o设方程的真实解为x*,则必有f(x*)=0。
用牛顿-拉夫逊法求方程真实解x*的步骤如下:首先选取余割合适的初始估值x°作为方程f(x)=0的解,若恰巧有f(x°)=0,则方程的真实解即为x*= x°若f(x°)≠0,则做下一步。
取x¹=x°+Δx°为第一次的修正估值,则 f(x¹)=f(x°+Δx°) 其中Δx°为初始估值的增量,即Δx°=x¹-x°。
设函数f(x)具有任意阶导数,即可将上式在x°的邻域展开为泰勒级数,即:f(x¹)=f(x°+Δx°)=f(x°)+f'(x°)Δx°+[f''(x°)(Δx°)2]/2+… 若所取的|Δx°|足够小,则含(Δx°)²的项及其余的一切高阶项均可略去,并使其等于零,即:f(x¹)≈f(x°)+f'(x°)Δx°=0 故得 Δx°=-f(x°)/f'(x°) 从而 x¹= x°-f(x°)/f'(x°)可见,只要f'(x°)≠0,即可根据上式求出第一次的修正估值x¹,若恰巧有f(x¹)=0,则方程的真实解即为x*=x¹。
若f(x¹)≠0,则用上述方法由x¹再确定第二次的修正估值x²。
基于MATLAB的牛顿拉夫逊迭代法计算潮流(附加短路计算)
这个程序可以适用于三机九节点系统(参数见主程序),本来是想编一个通用各种结构的程序的,但是因为鄙人比较懒,老师留作业时候又没说要通用,就没改完。
惭愧啊。
不过大同小异啦。
有兴趣的慢慢改吧。
使用方法:按后文中给出的代码建立.m文件放在一个文件夹里面。
先运行Powerflow_main.m计算算例系统的潮流;然后运行ShortcircuitCalc.m计算算例系统三相短路电流;程序说明详见各.m文件注释部分,写的已经很详细了,慢慢看吧。
Powerflow_main.m文件代码如下:clear%牛顿拉夫逊迭代法计算潮流format short %规定参数数据显示精度%节点参数矩阵%第一列为节点编号%第二列表示有功注入P%第三列表示无功注入Q%第四列表示电压幅值U%第五列表示电压角度θ%第六列表示发电机x′%第七列表示发电机E′%第八列表示节点类型(2表示平衡节点,1表示PV节点,0表示PQ节点)Node_p=[ 1, 0, 0, 1.04 , 0, 0.3, 1.137, 2;2, 1.63, 0, 1.025, 0, 0.3, 1.211, 1;3, 0.85, 0, 1.025, 0, 0.3, 1.047, 1;4, 0, 0, 1.0, 0, 0, 0, 0;5, -1.25, -0.5, 1.0, 0, 0, 0, 0;6, -0.9, -0.3, 1.0, 0, 0, 0, 0;7, 0, 0, 1.0, 0, 0, 0, 0;8, -1, -0.35, 1.0, 0, 0, 0, 0;9, 0, 0, 1.0, 0, 0, 0, 0];count_s=0;countPV=0;for k=1:size(Node_p,1)if Node_p(k,8)==1countPV=countPV+1;else if Node_p(k,8)==2count_s=count_s+1;end;end;end;countPV;count_s;countPQ=size(Node_p,1)-1-countPV;%显示节点参数disp('节点参数如下:')disp(Node_p)%支路参数%第一列为首节点,第二列为末节点,第三列表示R,第四列表示X,第五列表示B/2 %第六列表示支路类型(1为变比为1的变压器元件;2为输电线元件;0为接地支路)Branch_p =[ 1, 4, 0 , 0.0576, 0 , 1;2, 7, 0 , 0.0625, 0 , 1;3, 9, 0 , 0.0586, 0 , 1;4, 5, 0.01 , 0.085 , 0.088 , 2;4, 6, 0.017 , 0.092 , 0.079 , 2;5, 7, 0.032 , 0.161 , 0.153 , 2;6, 9, 0.039 , 0.17 , 0.179 , 2;7, 8, 0.0085, 0.072 , 0.0745, 2;8, 9, 0.0119, 0.1008, 0.1045, 2];%显示支路参数disp('支路参数如下:')disp(Branch_p)%设置节点初值U=Node_p(:,4);e_ang=Node_p(:,5);P=Node_p(:,2);Q=Node_p(:,3);save data.matformat long%计算结果数据显示精度%显示节点导纳矩阵admi();disp('节点导纳矩阵Y');sparseYKmax=10; %设置最大迭代次数kaccuracy=10^-7;%设置迭代精度k=0;%迭代次数初始化为零for k1=1:Kmax[dP,dQ,y]=getY(U,e_ang);if max(abs(y))<accuracybreak;end;J=jacob(U,e_ang,dP,dQ);x=-inv(J)*y;de_ang=[0;x(1:8)];dU=x(9:14);u1=U(2:9)*dU.';u=diag(u1);U(4:9)=U(4:9)+u;e_ang=e_ang+de_ang;k=k+1;end;e_ang=e_ang/pi*180;save result.matdisp('迭代次数:')kdisp('4号节点至9号节点电压幅值如下:') disp(U(4:9))disp('2号节点至9号节点电压相角如下:') disp(e_ang(2:9))admi.m文件代码如下:%节点导纳矩阵的形成format long %规定数据格式NI=size(Branch_p,1);k_t=1;Y=zeros(NI);for m1=1:NI;I=Branch_p(m1,1);J=Branch_p(m1,2);R=Branch_p(m1,3);X=Branch_p(m1,4);b=Branch_p(m1,5);Style=Branch_p(m1,6);if Style==1 %判断为变压器元件Y(I,I)=Y(I,I)+1/(R+1j*X);Y(J,J)=Y(J,J)+1/(R+1j*X)/k_t/k_t;Y(I,J)=Y(I,J)-1/(R+1j*X)/k_t;Y(J,I)=Y(J,I)-1/(R+1j*X)/k_t;else if Style==0 %判断为母线接地支路元件Y(I,J)=Y(I,J)+1/(R+1j*X);else %判断为输电线元件Y(I,I)=Y(I,I)+1j*b+1/(R+1j*X);Y(J,J)=Y(J,J)+1j*b+1/(R+1j*X);Y(I,J)=Y(I,J)-1/(R+1j*X);Y(J,I)=Y(J,I)-1/(R+1j*X);end;end;end;Y;G=real(Y);B=imag(Y);sparseY=sparse(Y);save data.mat;getY.m文件代码如下:(线性方程组常写作AX=Y形式,故此处命名为get_Y)%计算ΔP和ΔQ的函数function [dP,dQ,y]=getY(U,e_ang)load data P Q G B Node_p countPV count_s;dP=zeros(size(Node_p,1),1); sum1=zeros(size(Node_p,1),1);for i=1:size(Node_p,1)for j=1:size(Node_p,1)sum1(i)=sum1(i)+U(j)*(G(i,j)*cos(e_ang(i)-e_ang(j))+B(i,j)*sin(e_ang(i)-e_ang(j)));end;dP(i)=P(i)-U(i)*sum1(i);end;dQ=zeros(size(Node_p,1),1);sum2=zeros(size(Node_p,1),1);for i=1:size(Node_p,1)for j=1:size(Node_p,1)sum2(i)=sum2(i)+U(j)*(G(i,j)*sin(e_ang(i)-e_ang(j))-B(i,j)*cos(e_ang(i)-e_ang(j)));end;dQ(i)=Q(i)-U(i)*sum2(i);end;y=[dP((count_s+1):9);dQ((countPV+count_s+1):9)]; %拼接ΔP和ΔQ构成方程-J*x=y的向量yjacob.m文件的代码如下:%形成雅克比矩阵的函数function J=jacob(U,e_ang,dP,dQ)load data B G Q P Node_p countPV count_s;size_Y=size(Node_p,1);%H矩阵H1=zeros(size_Y);for i=1:size_Yfor j=1:size_Yif j==i;H1(i,j)= U(i)*U(i)*B(i,j)+Q(i)-dQ(i);elseH1(i,j)=-U(i)*U(j)*(G(i,j)*sin(e_ang(i)-e_ang(j))-B(i,j)*cos(e_ang(i)-e_ang(j)));end;endendH=H1(2:size_Y,2:size_Y);%N矩阵N1=zeros(size_Y);for i=1:size_Yfor j=1:size_Yif j==i;N1(i,j)= -U(i)*U(i)*G(i,j)-(P(i)-dP(i));elseN1(i,j)=-U(i)*U(j)*(G(i,j)*cos(e_ang(i)-e_ang(j))+B(i,j)*sin(e_ang(i)-e_ang(j)));end;end;end;N=N1(2:size_Y,(countPV+count_s+1):size_Y);%M矩阵M1=zeros(size_Y);for i=1:size_Yfor j=1:size_Yif j==i;M1(i,j)=U(i)*U(i)*G(i,j)-(P(j)-dP(j));elseM1(i,j)=U(i)*U(j)*(G(i,j)*cos(e_ang(i)-e_ang(j))+B(i,j)*sin(e_ang(i)-e_ang(j)));end;end;end;M=M1((countPV+count_s+1):size_Y,2:size_Y);%L矩阵L1=zeros(size_Y);for i=1:size_Yfor j=1:size_Yif j==i;L1(i,j)= U(i)*U(i)*B(i,j)-(Q(i)-dQ(i));elseL1(i,j)= -U(i)*U(j)*(G(i,j)*sin(e_ang(i)-e_ang(j))-B(i,j)*cos(e_ang(i)-e_ang(j)));end;endendL=L1((countPV+count_s+1):size_Y,(countPV+count_s+1):size_Y);J=[H N;M L];%拼接构成雅克比矩阵ShortcircuitCalc.m文件的代码如下:clear%三相短路计算format long;%对YN进行修正,形成包括发电机内阻抗和负荷阻抗的节点导纳矩阵re_admi();Z=inv(rY);%计算节点阻抗矩阵disp('4节点发生金属短路')f=4;%短路点为4节点%输出节点阻抗矩阵的短路点所在列disp('节点阻抗矩阵的短路点所在列Z(:,f)=');Z(:,f)%短路电流If计算load result U e_ang;e_angf=e_ang(f);Uf=U(f)*(cos(e_angf/180*pi)+1j*sin(e_angf/180*pi));Zff=Z(f,f);zf=0;If=Uf/(Zff+zf);i_angf=angle(If)*180/pi;If=abs(If);%短路电流计算结果显示disp('短路电流幅值:')Ifdisp('短路电流相角(单位为°)')i_angf%短路时各节点电压计算U_k=U;for x1=1:size(Node_p,1)U_k(x1)=U(x1)*(cos(e_ang(x1)*pi/180)+1j*sin(e_ang(x1)*pi/180))-Z(x1,f)*If*(cos(i_angf*pi/180)+ 1j*sin(i_angf*pi/180));end;%Uk为短路时各节点电压幅值Uk=abs(U_k);%uk_ang为短路时各节点电压相角(单位为°)uk_ang=angle(U_k)*180/pi;%输出短路时各节点电压disp('短路时1-9节点电压:')disp('幅值:')Ukdisp('相角:(单位为°)')uk_ang%计算短路时各支路电流%输出矩阵初始化%第一列为首节点i%第二列为末节点j%第三列为Ii幅值%第四列为Ii相角(单位为°)%第五列为Ij幅值%第六列为Ij相角(单位为°)Ik=[1 4 1 0 1 0;2 7 1 0 1 0;3 9 1 0 1 0;4 5 1 0 1 0;4 6 1 0 1 0;5 7 1 0 1 0;6 9 1 0 1 0;7 8 1 0 1 0;8 9 1 0 1 0];load data Branch_p k_t;%其中变压器变比为k_tNI=size(Branch_p,1);for m1=1:NI;I=Branch_p(m1,1);J=Branch_p(m1,2);R=Branch_p(m1,3);X=Branch_p(m1,4);b=Branch_p(m1,5);Style=Branch_p(m1,6);if Style~=1 %判断为非变压器支路Ik(m1,3)=(U_k(I)-U_k(J))/(R+1j*X)+U_k(I)*1j*b;Ik(m1,4)=angle(Ik(m1,3))*180/pi;Ik(m1,3)=abs(Ik(m1,3));Ik(m1,5)=(U_k(J)-U_k(I))/(R+1j*X)+U_k(J)*1j*b;Ik(m1,6)=angle(Ik(m1,5))*180/pi;Ik(m1,5)=abs(Ik(m1,5));else %否则为变压器支路Ik(m1,3)=(U_k(I)-U_k(J))/(R+1j*X)/k_t;Ik(m1,4)=angle(Ik(m1,3))*180/pi;Ik(m1,3)=abs(Ik(m1,3));Ik(m1,5)=(U_k(J)-U_k(I))/(R+1j*X)/k_t;Ik(m1,6)=angle(Ik(m1,5))*180/pi;Ik(m1,5)=abs(Ik(m1,5));endend%输出短路时各节点电流disp('第一列为首节点i')disp('第二列为末节点j')disp('第三列为Ii幅值')disp('第四列为Ii相角(单位为°)')disp('第五列为Ij幅值')disp('第六列为Ij相角(单位为°)')format shortIksave result_k%形成包括发电机内阻抗、负荷阻抗的节点导纳矩阵format long %规定数据显示精度load data P Q Y Node_p ;load result U;rY=Y;for n1=1:size(Node_p,1)Xd=Node_p(n1,6);Ed=Node_p(n1,7);style=Node_p(n1,8);if style~=0 %判断是否为发电机节点rY(n1,n1)=rY(n1,n1)+1/(1j*Xd);%YN中与发电机节点对应的对角线元素增加发电机导纳else %其他节点(包含负荷节点)rY(n1,n1)=rY(n1,n1)+(-P(n1)+1j*Q(n1))/(U(n1)*U(n1));%与负荷节点对应的对角线元素增加负荷导纳%对于非负荷节点Y矩阵元素不做修改但仍满足上式end;end;rY;。
直角坐标牛顿-拉夫逊法潮流计算matlab程序(仅供参考)
%该程序仅针对《电力系统分析下》何仰赞P61的4节点算例。
%节点电压用直角坐标表示时的牛顿-拉夫逊法潮流计算(matlab程序,可能有小错误,仅供学习之用,如果想要通用的程序,可自己动手改或再到pudn、csdn等网站搜索更好的)%南昌大学电力061李圣涛2009年5月编写,2012年5月上传clc%清空command windowsclear all%清空workspace%为了提高可移植性、可读性、通用性,设置以下变量N=4;%独立节点数NPQ=2;%PQ节点数NPV=1;%PV节点数K=0;%迭代次数%请输入最大迭代次数Kmax。
可从0开始,以观察第Kmax次迭代的结果Kmax=input('\n\n请输入最大迭代次数后回车(可从零开始) Kmax=\n');small=10^(-5);%ε不能太小%i为节点标号,其中1号……NPQ号为PQ节点,(NPQ+1)%号……(N-1)号为PV节点,N号节点为平衡节点%节点导纳矩阵Y的实部G=[1.042093-0.5882350-0.453858;-0.5882351.0690050-0.480769;0000;-0.453858-0.48076900.934627 ];%节点导纳矩阵Y的虚部B=[ -8.2428762.3529413.6666671.891074;2.352941-4.72737702.403846;3.6666670-3.33333330;1.8910742.4038460-4.261590 ];%Y矩阵Y=complex(G,B);%给定PQ节点的Pnode、Qnode,PV节点的Pnode、Vnode。
(Vnode为节点电压的幅值)Pnode=[ -0.3-0.550.5];%PQ、PV节点的初值PQnode=[-0.18-0.130];%PQ节点的初值QVnode=[ 001.10];%PV节点的初值V%迭代初值e=[ 1.01.01.11.05];f=[ 0000];%利用for循环来实现多次迭代。
matlabnewton-raphson method
matlabnewton-raphson method如何使用MATLAB 实现牛顿-拉夫逊方法引言:牛顿-拉夫逊方法是一种用于求解非线性方程的数值方法,在科学计算和工程领域具有广泛的应用。
在MATLAB 中,我们可以利用其强大的数值计算能力轻松实现这一方法。
本文将一步一步介绍如何使用MATLAB 实现牛顿-拉夫逊方法,帮助读者更好地理解和运用该方法。
第一步:问题建模和方程确定在使用牛顿-拉夫逊方法之前,我们首先需要建立一个数学模型并确定需要求解的方程。
我们假设我们试图解决的方程为F(x) = 0,其中x是需要求解的变量。
为了使用牛顿-拉夫逊方法,我们需要确定该方程的导数F'(x)。
在MATLAB 中,我们可以通过定义一个函数来表示方程F(x)和其导数F'(x)。
下面是一个简单的示例:MATLABfunction [F, dF] = equation(x)F = x^2 - 2; 示例方程为x^2 - 2 = 0dF = 2*x; 方程的导数为2*xend在这个示例中,我们定义了一个名为equation的函数,该函数接收一个变量x作为输入,并返回方程F(x)和其导数F'(x)的值。
请注意,这只是一个示例,实际问题中的方程和导数可能更加复杂。
第二步:实现牛顿-拉夫逊迭代算法在确定了方程和导数之后,我们可以开始实现牛顿-拉夫逊迭代算法。
该算法的基本思想是从一个初始猜测值x0开始,通过不断迭代来逼近方程的根。
迭代的过程可以通过以下公式表示:x(i+1) = x(i) - F(x(i)) / F'(x(i))在MATLAB 中,我们可以使用一个循环来实现这个迭代过程。
下面是一个使用牛顿-拉夫逊方法求解方程的示例:MATLABfunction x = newtonRaphson(x0, maxIter, epsilon)x = x0;for iter = 1:maxIter[F, dF] = equation(x);if abs(F) < epsilonbreak;endx = x - F / dF;endend在这个示例中,我们定义了一个名为newtonRaphson的函数,该函数接收一个初始猜测值x0、最大迭代次数maxIter和收敛条件epsilon作为输入,并返回牛顿-拉夫逊方法计算得到的根x。
(完整版)潮流计算的MATLAB源程序
%简单潮流计算的牛顿拉夫逊程序,相关的原始数据数据数据输入格式如下:%B1是支路参数矩阵,第一列和第二列是节点编号。
节点编号由小到大编写%对于含有变压器的支路,第一列为低压侧节点编号,第二列为高压侧节点%编号,将变压器的串联阻抗置于低压侧处理。
%第三列为支路的串列阻抗参数。
%第四列为支路的对地导纳参数。
%第五列为含变压器支路的变压器的变比%第六列为变压器是否含有变压器的参数,其中“1"为含有变压器,%“0”为不含有变压器。
%B2为节点参数矩阵,其中第一列为节点注入发电功率参数;第二列为节点负荷功率参数;第三列为节点电压参数;第六列为节点类型参数,其中“1”为平衡节点,“2”为PQ节点,“3”为PV节点参数。
%X为节点号和对地参数矩阵.其中第一列为节点编号,第二列为节点对地%参数。
n=input(’请输入节点数:n=');n1=input(’请输入支路数:n1=');isb=input(’请输入平衡节点号:isb=');pr=input('请输入误差精度:pr=');B1=input(’请输入支路参数:B1=’);B2=input(’请输入节点参数:B2=’);X=input('节点号和对地参数:X=');Y=zeros(n);Times=1; %置迭代次数为初始值%创建节点导纳矩阵for i=1:n1if B1(i,6)==0 %不含变压器的支路p=B1(i,1);q=B1(i,2);Y(p,q)=Y(p,q)-1/B1(i,3);Y(q,p)=Y(p,q);Y(p,p)=Y(p,p)+1/B1(i,3)+0。
5*B1(i,4);Y(q,q)=Y(q,q)+1/B1(i,3)+0。
5*B1(i,4);else %含有变压器的支路p=B1(i,1);q=B1(i,2);Y(p,q)=Y(p,q)—1/(B1(i,3)*B1(i,5));Y(q,p)=Y(p,q);Y(p,p)=Y(p,p)+1/B1(i,3);Y(q,q)=Y(q,q)+1/(B1(i,5)^2*B1(i,3));endendYOrgS=zeros(2*n—2,1);DetaS=zeros(2*n—2,1); %将OrgS、DetaS初始化%创建OrgS,用于存储初始功率参数h=0;j=0;for i=1:n %对PQ节点的处理if i~=isb&B2(i,6)==2h=h+1;for j=1:nOrgS(2*h-1,1)=OrgS(2*h—1,1)+real(B2(i,3))*(real(Y (i,j))*real(B2(j,3))-imag(Y(i,j))*imag(B2(j,3)))+imag(B2(i,3))*(real(Y(i,j))*imag(B2(j,3))+imag(Y(i,j))*real(B2(j,3)));OrgS(2*h,1)=OrgS(2*h,1)+imag(B2(i,3))*(real(Y(i,j))*real(B2(j,3))—imag(Y(i,j))*imag(B2(j,3)))-real(B2(i,3))*(real(Y(i,j))*imag(B2(j,3))+imag(Y(i,j))*real(B2(j,3)));endendendfor i=1:n %对PV节点的处理,注意这时不可再将h初始化为0 if i~=isb&B2(i,6)==3h=h+1;for j=1:nOrgS(2*h—1,1)=OrgS(2*h—1,1)+real(B2(i,3))*(real(Y(i,j))*real(B2(j,3))-imag(Y(i,j))*imag(B2(j,3)))+imag(B2(i,3))*(real(Y(i,j))*imag(B2(j,3))+imag(Y(i,j))*real(B2(j,3)));OrgS(2*h,1)=OrgS(2*h,1)+imag(B2(i,3))*(real(Y(i,j))*real(B2(j,3))-imag(Y(i,j))*imag(B2(j,3)))—real(B2(i,3))*(real(Y(i,j))*imag(B2(j,3))+imag(Y(i,j))*real(B2(j,3)));endendendOrgS%创建PVU 用于存储PV节点的初始电压PVU=zeros(n-h—1,1);t=0;for i=1:nif B2(i,6)==3t=t+1;PVU(t,1)=B2(i,3);endendPVU%创建DetaS,用于存储有功功率、无功功率和电压幅值的不平衡量h=0;for i=1:n %对PQ节点的处理if i~=isb&B2(i,6)==2h=h+1;DetaS(2*h—1,1)=real(B2(i,2))-OrgS(2*h—1,1);DetaS(2*h,1)=imag(B2(i,2))—OrgS(2*h,1);endendt=0;for i=1:n %对PV节点的处理,注意这时不可再将h初始化为0 if i~=isb&B2(i,6)==3h=h+1;t=t+1;DetaS(2*h-1,1)=real(B2(i,2))-OrgS(2*h-1,1);DetaS(2*h,1)=real(PVU(t,1))^2+imag(PVU(t,1))^2-real(B2(i,3))^2—imag(B2(i,3))^2;endendDetaS%创建I,用于存储节点电流参数i=zeros(n—1,1);h=0;for i=1:nif i~=isbh=h+1;I(h,1)=(OrgS(2*h—1,1)-OrgS(2*h,1)*sqrt(-1))/conj(B2(i,3));endendI%创建Jacbi(雅可比矩阵)Jacbi=zeros(2*n—2);h=0;k=0;for i=1:n %对PQ节点的处理if B2(i,6)==2h=h+1;for j=1:nif j~=isbk=k+1;if i==j %对角元素的处理Jacbi(2*h-1,2*k—1)=—imag(Y(i,j))*real(B2(i,3))+real(Y(i,j))*imag(B2(i,3))+imag(I(h,1));Jacbi(2*h-1,2*k)=real(Y(i,j))*real(B2(i,3))+imag(Y(i,j))*imag(B2(i,3))+real(I(h,1));Jacbi(2*h,2*k-1)=-Jacbi(2*h-1,2*k)+2*real (I(h,1));Jacbi(2*h,2*k)=Jacbi(2*h-1,2*k-1)—2*imag (I(h,1));else %非对角元素的处理Jacbi(2*h—1,2*k-1)=—imag(Y(i,j))*real(B2(i,3))+real(Y(i,j))*imag(B2(i,3));Jacbi(2*h—1,2*k)=real(Y(i,j))*real(B2(i,3))+imag(Y(i,j))*imag(B2(i,3));Jacbi(2*h,2*k-1)=—Jacbi(2*h—1,2*k);Jacbi(2*h,2*k)=Jacbi(2*h—1,2*k—1);endif k==(n-1) %将用于内循环的指针置于初始值,以确保雅可比矩阵换行k=0;endendendendendk=0;for i=1:n %对PV节点的处理if B2(i,6)==3h=h+1;for j=1:nif j~=isbk=k+1;if i==j %对角元素的处理Jacbi(2*h—1,2*k-1)=—imag(Y(i,j))*real(B2(i,3))+real(Y(i,j))*imag(B2(i,3))+imag(I(h,1));Jacbi(2*h—1,2*k)=real(Y(i,j))*real(B2(i,3))+imag(Y(i,j))*imag(B2(i,3))+real(I(h,1));Jacbi(2*h,2*k-1)=2*imag(B2(i,3));Jacbi(2*h,2*k)=2*real(B2(i,3));else %非对角元素的处理Jacbi(2*h-1,2*k—1)=-imag(Y(i,j))*real(B2(i,3))+real(Y(i,j))*imag(B2(i,3));Jacbi(2*h—1,2*k)=real(Y(i,j))*real(B2(i,3))+imag(Y(i,j))*imag(B2(i,3));Jacbi(2*h,2*k—1)=0;Jacbi(2*h,2*k)=0;endif k==(n-1) %将用于内循环的指针置于初始值,以确保雅可比矩阵换行k=0;endendendendendJacbi%求解修正方程,获取节点电压的不平衡量DetaU=zeros(2*n—2,1);DetaU=inv(Jacbi)*DetaS;DetaU%修正节点电压j=0;for i=1:n %对PQ节点处理if B2(i,6)==2j=j+1;B2(i,3)=B2(i,3)+DetaU(2*j,1)+DetaU(2*j—1,1)*sqrt(—1);endendfor i=1:n %对PV节点的处理if B2(i,6)==3j=j+1;B2(i,3)=B2(i,3)+DetaU(2*j,1)+DetaU(2*j-1,1)*sqrt(-1);endendB2%开始循环**********************************************************************while abs(max(DetaU))>prOrgS=zeros(2*n-2,1); %初始功率参数在迭代过程中是不累加的,所以在这里必须将其初始化为零矩阵h=0;j=0;for i=1:nif i~=isb&B2(i,6)==2h=h+1;for j=1:nOrgS(2*h—1,1)=OrgS(2*h-1,1)+real(B2(i,3))*(real(Y(i,j))*real(B2(j,3))—imag(Y(i,j))*imag(B2(j,3)))+imag(B2(i,3))*(real(Y(i,j))*imag(B2(j,3))+imag(Y(i,j))*real(B2(j,3)));OrgS(2*h,1)=OrgS(2*h,1)+imag(B2(i,3))*(real(Y(i,j))*real(B2(j,3))—imag(Y(i,j))*imag(B2(j,3)))-real(B2(i,3))*(real(Y(i,j))*imag(B2(j,3))+imag(Y(i,j))*real(B2(j,3)));endendendfor i=1:nif i~=isb&B2(i,6)==3h=h+1;for j=1:nOrgS(2*h-1,1)=OrgS(2*h-1,1)+real(B2(i,3))*(real(Y(i,j))*real(B2(j,3))-imag(Y(i,j))*imag(B2(j,3)))+imag(B2(i,3))*(real(Y(i,j))*imag(B2(j,3))+imag(Y(i,j))*real(B2(j,3)));OrgS(2*h,1)=OrgS(2*h,1)+imag(B2(i,3))*(real(Y(i,j))*real (B2(j,3))-imag(Y(i,j))*imag(B2(j,3)))—real(B2(i,3))*(real(Y(i,j))*imag(B2(j,3))+imag(Y(i,j))*real(B2(j,3)));endendendOrgS%创建DetaSh=0;for i=1:nif i~=isb&B2(i,6)==2h=h+1;DetaS(2*h-1,1)=real(B2(i,2))—OrgS(2*h—1,1);DetaS(2*h,1)=imag(B2(i,2))—OrgS(2*h,1);endendt=0;for i=1:nif i~=isb&B2(i,6)==3h=h+1;t=t+1;DetaS(2*h—1,1)=real(B2(i,2))—OrgS(2*h—1,1);DetaS(2*h,1)=real(PVU(t,1))^2+imag(PVU(t,1))^2-real(B2(i,3))^2-imag(B2(i,3))^2;endendDetaS%创建Ii=zeros(n-1,1);h=0;for i=1:nif i~=isbh=h+1;I(h,1)=(OrgS(2*h—1,1)-OrgS(2*h,1)*sqrt(—1))/conj(B2(i,3));endendI%创建JacbiJacbi=zeros(2*n—2);h=0;k=0;for i=1:nif B2(i,6)==2h=h+1;for j=1:nif j~=isbk=k+1;if i==jJacbi(2*h—1,2*k—1)=-imag(Y(i,j))*real(B2(i,3))+real(Y(i,j))*imag(B2(i,3))+imag(I(h,1));Jacbi(2*h-1,2*k)=real(Y(i,j))*real(B2(i,3))+imag(Y(i,j))*imag(B2(i,3))+real(I(h,1));Jacbi(2*h,2*k—1)=-Jacbi(2*h-1,2*k)+2*real(I(h,1));Jacbi(2*h,2*k)=Jacbi(2*h-1,2*k—1)—2*imag(I(h,1));elseJacbi(2*h—1,2*k—1)=-imag(Y(i,j))*real(B2(i,3))+real(Y(i,j))*imag(B2(i,3));Jacbi(2*h—1,2*k)=real(Y(i,j))*real (B2(i,3))+imag(Y(i,j))*imag(B2(i,3));Jacbi(2*h,2*k—1)=-Jacbi(2*h-1,2*k);Jacbi(2*h,2*k)=Jacbi(2*h—1,2*k-1);endif k==(n-1)k=0;endendendendendk=0;for i=1:nif B2(i,6)==3h=h+1;for j=1:nif j~=isbk=k+1;if i==jJacbi(2*h—1,2*k-1)=—imag(Y(i,j))*real(B2(i,3))+real(Y(i,j))*imag(B2(i,3))+imag(I(h,1));Jacbi(2*h-1,2*k)=real(Y(i,j))*real(B2(i,3))+imag(Y(i,j))*imag(B2(i,3))+real(I(h,1));Jacbi(2*h,2*k-1)=2*imag(B2(i,3));Jacbi(2*h,2*k)=2*real(B2(i,3));elseJacbi(2*h-1,2*k—1)=-imag(Y(i,j))*real (B2(i,3))+real(Y(i,j))*imag(B2(i,3));Jacbi(2*h-1,2*k)=real(Y(i,j))*real(B2(i,3))+imag(Y(i,j))*imag(B2(i,3));Jacbi(2*h,2*k-1)=0;Jacbi(2*h,2*k)=0;endif k==(n—1)k=0;endendendendendJacbiDetaU=zeros(2*n-2,1);DetaU=inv(Jacbi)*DetaS;DetaU%修正节点电压j=0;for i=1:nif B2(i,6)==2j=j+1;B2(i,3)=B2(i,3)+DetaU(2*j,1)+DetaU(2*j—1,1)*sqrt(-1);endendfor i=1:nif B2(i,6)==3j=j+1;B2(i,3)=B2(i,3)+DetaU(2*j,1)+DetaU(2*j-1,1)*sqrt(—1);endendB2Times=Times+1; %迭代次数加1endTimes一个原始数据的例子节点数 5支路数 5平衡节点编号 5精度pr 0。
牛顿-拉夫逊法潮流计算matlab程序
end
fprintf(myf,'n线路计算结果:n节点I 节点J 线路功率S(I,J) 线路功率S(J,I) 线路损耗dS(I,J)n');
[bus,line] = ReNum_(bus,line,nodenum); % 对节点恢复编号的子程序
YtYm = YtYm_(line); % 计算线路的等效Yt和Ym的子程序,以计算线路潮流
bus_res = bus_res_(bus); % 计算节点数据结果的子程序
J = Jac_(bus,Y,nPQ); % 计算雅克比矩阵的子程序
UD = zeros(nPQ,nPQ);
for i = 1:nPQ
UD(i,i) = bus(i,2); % 生成电压对角矩阵
fclose(myf); % 在当前目录下生成“Result.m”文件,写入节点导纳矩阵
format long
EPS = 1.0e-10; % 设定误差精度
for t = 1:100 % 开始迭代计算,设定最大迭代次数为100,以便不收敛情况下及时跳出
[dP,dQ] = dPQ_(Y,bus,nPQ,nPV); % 计算功率偏差dP和dQ的子程序
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));
牛顿—拉夫逊法潮流计算MATLAB程序
牛顿—拉夫逊法潮流计算程序By Yuluo%牛顿--拉夫逊法进行潮流计算n=input('请输入节点数:n=');n1=input('请输入支路数:n1=');isb=input('请输入平衡母线节点号:isb=');pr=input('请输入误差精度:pr=');B1=input('请输入由支路参数形成的矩阵:B1=');B2=input('请输入各节点参数形成的矩阵:B2=');X=input('请输入由节点参数形成的矩阵:X=');Y=zeros(n);e=zeros(1,n);f=zeros(1,n);V=seros(1,n);O=zeros(1,n);S1=zeros(n1);for i=1:nif X(i,2)~=0;p=X(i,1);Y(p,p)=1./X(i,2);endendfor i=1:n1if B1(i,6)==0p=B1(i,1);q=B1(i,2);else p=B1(i,2);q=B1(i,1);endY(p,q)=Y(p,q)-1./(B1(i,3)*B1(i,5);Y(p,q)=Y(p,q);Y(p,q)=Y(q,q)+1./(B1(i,3)*B1(i,5)^2)+B1(i,4)./2;Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4)./2;end %求导纳矩阵G=real(Y);B=imag(Y);for i=1:ne(i)=real(B2(i,3));f(i)=imag(B2(i,3));V(i)=B2(i,4);endfor i=1:nS(i)=B2(i,1)-B2(i,2);B(i,i)=B(i,i)+B2(i,5);endP=rea(S);Q=imag(S);ICT1=0;IT2=1;NO=2*n;N=NO+1;a=0;while IT2~=0IT2=0;a=a+1;for i=1:n;if i~=isbC(i)=0;D(i)=0;for j1=1:nC(i)=C(i)+G(i,j1)*e(j1)-B(i,j1)*f(j1);D(i)=D(i)+G(i,j1)*f(j1)+B(i,j1)*e(j1);endP1=C(i)*e(i)+f(i)*D(i);Q1=f(i)*C(i)-D(i)*e(i); %求'P,Q'V2=e(i)^2+f(i)^2;if B2(i,6)~=3DP=P(i)-P1;DQ=Q(i)-Q1;for j1=1:nif j1~=isb&j1~=iX1=-G(i,j1)*e(i)-B(i,j1)*f(i);X2=B(i,j1)*e(i)-G(i,j1)*f(i);X3=X2;X4=-X1;p=2*i-1;q=2*j1-1;J(p,q)=X3;J(p,N)=DQ;m=p+1;J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X4;J(m,q)=X2; endendelseDP=P(i)-P1;DV=V(i)~2-V2;for j1=1:nif j1~=isb&j1~=iX1=-G(i,j1)*e(i)-B(i,j1)*f(i);X2=B(i,j1)*e(i)-G(i,j1)*f(i);X5=0;X6=0;p=2*i-1;q=2*j1-1;J(p,q)=X5;J(p,N)=DV;m=p+1;J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X6;J(m,q)=X2; elseif j1==i&j1~=isbX1=-C(i)-G(i,i)*e(i)-B(i,i)*f(i);X2=-D(i)+B(i,i)*e(i)-G(i,i)*f(i);X5=-2*e(i);X6=-2*f(i);p=2*i-1;q=2*j1-1;J(p,q)=X5;J(p,N)=DV;m=p+1;J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X6;J(m,q)=X2;endendendendend %求雅可比矩阵for k=3:N0k1=k+1;N1=N;for k2=k1:N1J(k,k2)=J(k,k2)./J(k,k);endJ(k,k)=1;if k~=3k4=k-1;for k3=3:k4for k2=k1:N1J(k3,k2)=J(k3,k2)-J(k3,k)*J(k,k2); endJ(k3,k)=0;endendfor k3=k1:N0for k2=k1:N1J(k3,k2)=J(k3,k2)-J(k3,k)*J(k,k2); endJ(k3,k)=0;endendendfor k=3:2:N0-1L=(k+1)./2;e(L)=e(L)-J(k,N);k1=k+1;f(L)=f(L)-J(k1,N);endfor k=3:N0DET=abs(J(k,N));if DET>=prIT2=IT2+1endendICT2(a)=IT2ICT1=ICT1+1;for k=1:ndy(k)=sqrt(e(k)^2+f(k)^2);endfor i=1:nDy(k)=sqrt(e(k)^2+f(k)^2);endfor i=1:nDy(ICT1,i)=dy(i);endend %用高斯消去法解“w=-J*V”disp('迭代次数');disp(ICT1);disp('没有达到精度要求的个数');disp(ICT2);for k=1:nV(k)=sqrt(e(k)^2+f(k)^2);O(k)=atan(f(k)./e(k))*180./pi;endE=e+f*j;disp('各节点的实际电压标么值E为(节点号从小到大的排列):');disp(E);disp('各节点的电压大小V为(节点号从小到大的排列):');disp(V);disp('各节点的电压相角O为(节点号从小到大的排列):');disp(O);for p=1:nC(p)=0;for q=1:nC(p)=C(p)+conj(Y(p,q))*conj(E(q));endS(p)=E(p)*C(p);enddisp('各节点的功率S为(节点号从小到大排列):‘);disp(S);disp('各条支路的首端功率Si为(顺序同您输入B1时一样):‘);for i=1:n1if B1(i,6)==0p=B1(i,1);q=B1(i,2);else p=B1(i,2);q=B1(i,1);endSi(p,q)=E(p)*(conj(E(p))*conj(B1(i,4)./2)+(conj(E(p)*B1(i,5))-conj(E(q)))*con j(1./(B1(i,3)*B1(i,5))));disp(Si(p.q));enddisp('各条支路的末端功率Sj为(顺序同您的输入B1时一样):‘);for i=1:n1if B1(i,6)==0p=B1(i,1);q=B1(i,2);else p=B1(i,2);q=B1(i,1);endSj(q,p)=E(q)*(conj(E(q))*conj(B1(i,4)./2)+(xonj(E(q)./B1(i,5))-conj(E(p)))*xo nj(1./(B1(i,3)*B1(i,5))));disp(Sj(q,p));enddisp('各条支路的功率损耗DS为(顺序同您输入B1时一样):’);for i=1:n1if B1(i,6)==0p=B1(i,1);q=B1(i,2);else p=B1(i,2);q=B1(i,1);endDS(i)=Si(p,q)+Sj(q,p);disp(DS(i));endfor i=1:ICT1Cs(i)=i;enddisp('以下是每次迭代后各节点的电压值(如图所示)‘);plot(Cs,Dy),xlabel('迭代次数’),ylabel('电压'),title('电压迭代次数曲线');。
MATLAB牛顿拉夫逊法算潮流分析
MATLAB牛顿拉夫逊法算潮流分析潮流分析是电力系统中的一项重要任务,主要用于计算电网中各个节点的电压和线路中的电流分布。
这些数据对于电力系统的运行和规划具有重要意义。
牛顿拉夫逊法(Newton-Raphson method)是一种常用的求解潮流分析问题的数值算法。
牛顿拉夫逊法基于非线性潮流方程,通过迭代计算来逼近电力系统中节点电压和线路电流的值。
它采用了泰勒级数展开和牛顿迭代的思想,通过不断更新估计值来找到方程的根。
在潮流分析中,我们需要求解的主要是节点电压和线路电流。
对于节点电压,我们可以通过潮流方程来描述。
假设电网中有N个节点,那么每个节点的电压都可以表示为V=,V,e^(jθ),其中,V,表示幅值,θ表示相角。
根据潮流方程,节点电压之间的复数表示为:I=Y*V其中,I是节点电流,Y是节点导纳矩阵,V是节点电压。
将节点电压和电流的复数表示代入潮流方程中,我们可以得到以下非线性方程组:f(V)=Y*V-I=0这个方程组的求解就是潮流分析的目标。
由于方程组是非线性的,无法直接求解,因此我们需要借助数值方法,如牛顿拉夫逊法。
牛顿拉夫逊法的基本思想是通过迭代寻找方程组f(V)的根。
假设当前的电压估计值为V0,我们需要找到一个新的电压估计值V1,使得f(V1)=0。
牛顿拉夫逊法通过泰勒级数展开,将f(V1)在V0附近展开,然后求得方程的近似解。
具体来说,牛顿拉夫逊法的迭代步骤如下:1.初始化电压估计值V0为一个合理的初始值。
2.计算方程f(V)在V0处的雅可比矩阵J和残差向量r,其中雅可比矩阵J是方程f(V)对于未知数V的偏导数矩阵。
3.解线性方程组J*ΔV=-r,求得修正量ΔV。
4.更新电压估计值V1=V0+ΔV。
5.如果方程的近似解达到了要求的精度,终止迭代;否则,返回第2步。
牛顿拉夫逊法的关键是求解线性方程组J*ΔV=-r,其中J是雅可比矩阵,r是残差向量。
可以采用直接法或迭代法来求解线性方程组,具体方法可以根据实际情况选择。
牛顿拉夫逊法潮流计算matlab程序
牛顿拉夫逊法潮流计算matlab 程序%电力系统的潮流计算,以下程序参考文献《电力系统毕业设计》中国水利电力出版社%(该文献用极坐标下的牛顿——拉夫逊方法实现,在此为了与课本一致做了修改)%为了计算方便将原来的下标做以下修改: S2 S3 S4 S5 U2 U3 U4 U5 改为S1 S2 S3 S4 U1 U2 %U3 U4 ,即原题的平衡点1就变为现在的平衡点5%1.形成节点导纳矩阵,yb55=6.250-18.750j;yb51=-5.000+15.000j;yb52= -1.250+3.750j;yb53=0.000-0.000j;yb54=0.000-0.0 00j;yb15=-5.000+15.000j;yb11=10.834-32.500j;yb12 =-1.667+5.000j;yb13=-1.667+5.000j;yb14=-2.500 +7.500j;yb25=-1.250+3.750j;yb21=-1.667+5.000j;yb22=12.917-38.750j;yb23=-10.000+30.000j;yb24=0.000 -0.000j;yb35=0.000-0.000j;yb31=-1.667+5.000j;yb32=-1 0.000+30.000j;yb33=12.917-38.750j;yb34=-1.250 +3.750j;yb45=0.000-0.000j;yb41=-2.500+7.500j;yb42=0.0 00-0.000j;yb43=-1.250+3.750j;yb44=3.750-11.25 0j;YB=[yb11 yb12 yb13 yb14 yb15; yb21 yb22 yb23 yb24 yb25 ;yb31 yb32 yb33 yb34 yb35; yb41 yb42 yb43 yb44 yb45 ;yb51 yb52 yb53 yb54 yb55];%计算各节点功率的不平衡量设U=E+jF ;Y=G+Bj;E(1)=1.00;E(2)=1.00;E(3)=1.00;E(4)=1.00;F(1)=0;F(2)=0;F(3)=0;F(4)=0;G=real(YB);B=imag(YB);%设S=P+Bj;S(1)=0.20+0.20i;S(2)=-0.45-0.15i;S(3)=-0.40-0.05 i;S(4)=-0.60-0.10i;P=real(S);Q=imag(S);k=0;precision=1;N1=4;while precision > 0.00000001E(5)=1.06;F(5)=0;for m=1:N1for n=1:N1+1%计算Pi,Qi,设Pi=Pt;Qi=QtPt(n)=(E(m)*(G(m,n)*E(n)-B(m,n)*F(n))+F(m)* (G(m,n)*F(n)+B(m,n)*E(n)));Qt(n)=(F(m)*(G(m,n)*E(n)-B(m,n)*F(n))-E(m)* (G(m,n)*F(n)+B(m,n)*E(n)));end%设P,Q的改变量为dP,dQdP(m)=P(m)-sum(Pt);dQ(m)=Q(m)-sum(Qt);endfor m=1:N1for n=1:N1+1%计算Hij Nij Jij LijH(m,n)=-B(m,n)*E(m)+G(m,n)*F(m); N(m,n)=G(m,n)*E(m)+B(m,n)*F(m); J(m,n)=-B(m,n)*F(m)-G(m,n)*E(m);L(m,n)=G(m,n)*F(m)-B(m,n)*E(m);endendfor m=1:N1for n=1:N1+1Bi(n)=G(m,n)*F(n)+B(m,n)*E(n);Ai(n)=G(m,n)*E(n)-B(m,n)*F(n);end%计算Hii,Nii,Jii,Lii,由公式4-44b 左侧公式实现,sum(Ai),sum(Bi)用于实现公式中的sigerma从j到n的求和;H(m,m)=sum(Bi)-(B(m,m)*E(m)+G(m,m)*F(m) )+2*G(m,m)*F(m);N(m,m)=sum(Ai)-(G(m,m)*E(m)-B(m,m)*F(m)) +2*G(m,m)*E(m);J(m,m)=-2*B(m,m)*F(m)+sum(Ai)-(G(m,m)*E( m)-B(m,m)*F(m));L(m,m)=-2*B(m,m)*E(m)-(sum(Bi)-(B(m,m)*E( m)+G(m,m)*F(m)));end%设雅可比矩阵为JJ,以下语句用来实现雅可比矩阵中对角线上元素H N J L 的排列for m=1:N1JJ(2*m-1,2*m-1)=H(m,m);JJ(2*m-1,2*m)=N(m,m);JJ(2*m,2*m-1)=J(m,m);JJ(2*m,2*m)=L(m,m);end%以下语句用于实现雅可比矩阵非对角线上元素的排列for m=1:N1for n=1:N1if m==nelseH(m,n)=-B(m,n)*E(m)+G(m,n)*F(m);N(m,n)=G(m,n)*E(m)+B(m,n)*F(m);J(m,n)=-B(m,n)*F(m)-G(m,n)*E(m);L(m,n)=G(m,n)*F(m)-B(m,n)*E(m);JJ(2*m-1,2*n-1)=H(m,n);JJ(2*m-1,2*n)=N(m,n);JJ(2*m,2*n-1)=J(m,n);JJ(2*m,2*n)=L(m,n);endendend%设由P,Q的改变量组成的8×1矩阵为PQ,由E,F的改变量组成的8×1矩阵为dU for m=1:N1PQ(2*m-1)=dP(m);PQ(2*m)=dQ(m);enddU=inv(JJ)*PQ';precision=max(abs(dU));for n=1:N1F(n)=F(n)+dU(2*n-1);E(n)=E(n)+dU(2*n);endfor n=1:N1+1U(n)=E(n)+(F(n))*j;endk=k+1;k-1, dU=dU',PQ,Uend%计算S(5),也就是题目中的S1,即平衡节点功率for m=1:N1+1I(m)=YB(5,m)*U(m);endS(5)=U(5)*sum(conj(I))%设网络总损耗为Ss,计算输电效率efficiency for m=1:N1+1S0(m)=S(m); P(m)=real(S(m));endSs=sum(S0)efficiency=(abs(P(3)+P(4)+P(2)))/(P(5)+(P(1)))*1 00%计算线功率S(m,n),与课本中各元素的相对位置有所不同for m=1:N1+1for n=1:N1+1S(m,n)=U(m)*(conj(U(m))-conj(U(n)))*conj(-YB (m,n));endendS。
基于MATLAB的直角坐标下牛顿拉夫逊法潮流计算
基于MATLAB的直角坐标下牛顿拉夫逊法潮流计算基于MATLAB的直角坐标下牛顿-拉夫逊法潮流计算摘要潮流计算,指在给定电力系统网络拓扑、元件参数和发电、负荷参量条件下,计算有功功率、无功功率及电压在电力网中的分布。
潮流计算是根据给定的电网结构、参数和发电机、负荷等元件的运行条件,确定电力系统各部分稳态运行状态参数的计算。
通常给定的运行条件有系统中各电源和负荷点的功率、枢纽点电压、平衡点的电压和相位角。
待求的运行状态参量包括电网各母线节点的电压幅值和相角,以及各支路的功率分布、网络的功率损耗等。
它是基于配电网络特有的层次结构特性,论文提出了一种新颖的分层前推回代算法。
该算法将网络支路按层次进行分类,并分层并行计算各层次的支路功率损耗和电压损耗,因而可大幅度提高配电网潮流的计算速度。
论文在MATLAB环境下,利用其快速的复数矩阵运算功能,实现了文中所提的分层前推回代算法,并取得了非常明显的速度效益。
另外,论文还讨论发现,当变压器支路阻抗过小时,利用Π型模型会产生数值巨大的对地导纳,由此会导致潮流不收敛。
为此,论文根据理想变压器对功率和电压的变换原理,提出了一种有效的电压变换模型来处理变压器支路,从而改善了潮流算法的收敛特性。
关键词:电力系统;潮流分析;MATLABAbstractFlow calculation is an important analysis function of power system and is the necessary facility of fault analysis, relay protection setting and security analysis. In addition, the traditional design method is a structured program design method based on functional decomposition, the entire software engineering as a combination of objects, as the domain of a particular issue, the composition of the object will remain basically unchanged Therefore, this decomposition methodbased on object design software structure relatively stable, easy to maintain and expand. . Combine the characteristics of power systems, software running on the use of MATLAB language WINDOWS OS graphical flow calculation software. The main features of the system are simple and intuitive graphical interface and stable operation. Calculated accurately Calculations, the algorithm has done a number of improvements to enhance the computing speed, the various types of effective package makes the procedure has good modularity maintainability and reusability. The MATLAB language is used to calculate flow distribution of power system in this paper. The typical examples explain that the method has the characteristics of simple programming high calculation efficiency and matching people habit the calculation result can satisfy the engineering calculation needs and at the same time verify the usefulness of the method.Key words: Electric power system; flow calculation; MATLAB 第一章电力系统潮流计算概述1.1电力系统潮流概述潮流计算是电力系统分析中的一种最基本的计算,它的任务是在给定的接线方式和运行条件下,确定系统的运行状态,如各母线上的电压(幅值和相角)、网络中的功率分布及功率损耗等,是电力系统的稳态计算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%电力系统的潮流计算,以下程序参考文献《电力系统毕业设计》中国水利电力出版社%(该文献用极坐标下的牛顿——拉夫逊方法实现,在此为了与课本一致做了修改)
%为了计算方便将原来的下标做以下修改: S2 S3 S4 S5 U2 U3 U4 U5 改为S1 S2 S3 S4 U1 U2
%U3 U4 ,即原题的平衡点1就变为现在的平衡点5
%1.形成节点导纳矩阵,
yb55=6.250-18.750j;yb51=-5.000+15.000j;yb52=-1.250+3.750j;yb53=0.000-0.000j;yb54=0.000-0.000j;
yb15=-5.000+15.000j;yb11=10.834-32.500j;yb12=-1.667+5.000j;yb13=-1.667+5.000j;yb14=-2.5 00+7.500j;
yb25=-1.250+3.750j;yb21=-1.667+5.000j;yb22=12.917-38.750j;yb23=-10.000+30.000j;yb24=0.0 00-0.000j;
yb35=0.000-0.000j;yb31=-1.667+5.000j;yb32=-10.000+30.000j;yb33=12.917-38.750j;yb34=-1.2 50+3.750j;
yb45=0.000-0.000j;yb41=-2.500+7.500j;yb42=0.000-0.000j;yb43=-1.250+3.750j;yb44=3.750-11. 250j;
YB=[yb11 yb12 yb13 yb14 yb15; yb21 yb22 yb23 yb24 yb25 ;yb31 yb32 yb33 yb34 yb35; yb41 yb42 yb43 yb44 yb45 ;yb51 yb52 yb53 yb54 yb55];
%计算各节点功率的不平衡量设U=E+jF ;Y=G+Bj;
E(1)=1.00;E(2)=1.00;E(3)=1.00;E(4)=1.00;
F(1)=0;F(2)=0;F(3)=0;F(4)=0;
G=real(YB);B=imag(YB);
%设S=P+Bj;
S(1)=0.20+0.20i;S(2)=-0.45-0.15i;S(3)=-0.40-0.05i;S(4)=-0.60-0.10i;
P=real(S);Q=imag(S);
k=0;precision=1;
N1=4;
while precision > 0.00000001
E(5)=1.06;F(5)=0;
for m=1:N1
for n=1:N1+1
%计算Pi,Qi,设Pi=Pt;Qi=Qt
Pt(n)=(E(m)*(G(m,n)*E(n)-B(m,n)*F(n))+F(m)*(G(m,n)*F(n)+B(m,n)*E(n)));
Qt(n)=(F(m)*(G(m,n)*E(n)-B(m,n)*F(n))-E(m)*(G(m,n)*F(n)+B(m,n)*E(n)));
end
%设P,Q的改变量为dP,dQ
dP(m)=P(m)-sum(Pt);
dQ(m)=Q(m)-sum(Qt);
end
for m=1:N1
for n=1:N1+1
%计算Hij Nij Jij Lij
H(m,n)=-B(m,n)*E(m)+G(m,n)*F(m);
N(m,n)=G(m,n)*E(m)+B(m,n)*F(m);
J(m,n)=-B(m,n)*F(m)-G(m,n)*E(m);
L(m,n)=G(m,n)*F(m)-B(m,n)*E(m);
end
end
for m=1:N1
for n=1:N1+1
Bi(n)=G(m,n)*F(n)+B(m,n)*E(n);
Ai(n)=G(m,n)*E(n)-B(m,n)*F(n);
end
%计算Hii,Nii,Jii,Lii,由公式4-44b 左侧公式实现,sum(Ai),sum(Bi)用于实现公式中的sigerma从j到n的求和;
H(m,m)=sum(Bi)-(B(m,m)*E(m)+G(m,m)*F(m))+2*G(m,m)*F(m);
N(m,m)=sum(Ai)-(G(m,m)*E(m)-B(m,m)*F(m))+2*G(m,m)*E(m);
J(m,m)=-2*B(m,m)*F(m)+sum(Ai)-(G(m,m)*E(m)-B(m,m)*F(m));
L(m,m)=-2*B(m,m)*E(m)-(sum(Bi)-(B(m,m)*E(m)+G(m,m)*F(m)));
end
%设雅可比矩阵为JJ,以下语句用来实现雅可比矩阵中对角线上元素H N J L 的排列for m=1:N1
JJ(2*m-1,2*m-1)=H(m,m);
JJ(2*m-1,2*m)=N(m,m);
JJ(2*m,2*m-1)=J(m,m);
JJ(2*m,2*m)=L(m,m);
end
%以下语句用于实现雅可比矩阵非对角线上元素的排列
for m=1:N1
for n=1:N1
if m==n
else
H(m,n)=-B(m,n)*E(m)+G(m,n)*F(m);
N(m,n)=G(m,n)*E(m)+B(m,n)*F(m);
J(m,n)=-B(m,n)*F(m)-G(m,n)*E(m);
L(m,n)=G(m,n)*F(m)-B(m,n)*E(m);
JJ(2*m-1,2*n-1)=H(m,n);
JJ(2*m-1,2*n)=N(m,n);
JJ(2*m,2*n-1)=J(m,n);
JJ(2*m,2*n)=L(m,n);
end
end
end
%设由P,Q的改变量组成的8×1矩阵为PQ,由E,F的改变量组成的8×1矩阵为dU for m=1:N1
PQ(2*m-1)=dP(m); PQ(2*m)=dQ(m);
end
dU=inv(JJ)*PQ';
precision=max(abs(dU));
for n=1:N1
F(n)=F(n)+dU(2*n-1);
E(n)=E(n)+dU(2*n);
end
for n=1:N1+1
U(n)=E(n)+(F(n))*j;
end
k=k+1;
k-1, dU=dU',PQ,U
end
%计算S(5),也就是题目中的S1,即平衡节点功率
for m=1:N1+1
I(m)=YB(5,m)*U(m);
end
S(5)=U(5)*sum(conj(I))
%设网络总损耗为Ss,计算输电效率efficiency
for m=1:N1+1
S0(m)=S(m); P(m)=real(S(m));
end
Ss=sum(S0)
efficiency=(abs(P(3)+P(4)+P(2)))/(P(5)+(P(1)))*100
%计算线功率S(m,n),与课本中各元素的相对位置有所不同
for m=1:N1+1
for n=1:N1+1
S(m,n)=U(m)*(conj(U(m))-conj(U(n)))*conj(-YB(m,n));
end
end。