潮流计算方法.pdf
-由于本人参加我们电气学院的电气小课堂, 主讲的是计算机算法计算潮流这章, 所以潜心玩了一个星期,下面整理给大家分享下。本人一个星期以来的汗水, 弄清楚了计算机算法计算潮流的基础, 如果有什么不懂的可以发信息到:zenghao616qq.接下来开始弄潮流的优化问题,吼吼!电力系统的潮流计算的计算机算法:以MATLAB 为环境这里理论不做过多介绍,推荐一本专门讲解电力系统分析的计算机算法的书籍 -电力系统分析的计算机算法邱晓燕、*天琪编著。这里以这本书上的例题【2-1】说明计算机算法计算的过程,分别是牛顿拉弗逊算法的直角坐标和极坐标算法、P-Q 分解算法。主要是简单的网络的潮流计算, 其实简单网络计算和大型网络计算并无本质区别,代码里面只需要修改循环迭代的 N 即可,这里旨在弄清计算机算法计算潮流的本质。代码均有详细的注释.其中简单的高斯赛德尔迭代法是以我们的电稳教材为例子讲, 其实都差不多, 只要把导纳矩阵 Y 给你,节点的编号和分类给你,就可以进行计算了,不必要找到原始的电气接线图。理论不多说,直接上代码:简单的高斯赛德尔迭代法:这里我们只是迭代算出各个节点的电压值,支路功率并没有计算。S_ij=P_ij+Q_ij=V_i(V_i*-V_j*) * y_ij*可以计算出各个线路的功率在显示最终电压幅角的时候注意在 MATLAB 里面默认的是弧度的形式,需要转化成角度显示。clear;clc;%电稳书Page 102 例题3-5%计算网络的潮流分布-高斯-赛德尔算法%其中节点1是平衡节点%节点2、3是PV节点,其余是PQ节点% 如果节点有对地导纳支路%需将对地导纳支路算到自导纳里面%-%输入原始数据,每条支路的导纳数值,包括自导和互导纳;y=zeros(5,5);y(1,2)=1/(0.0194+0.0592*1i);y(1,5)=1/(0.054+0.223*1i);y(2,3)=1/(0.04699+0.198*1i);y(2,4)=1/(0.0581+0.1763*1i);%由于电路网络的互易性,导纳矩阵为对称的矩阵for i=1:1:5for j=1:1:5y(j,i)=y(i,j);endend%节点导纳矩阵的形成.z.-Y=zeros(5,5);%求互导纳for i=1:1:5for j=1:1:5if i=jY(i,j)=-y(i,j);endendend%求自导纳for i=1:1:5%这句话是说将y矩阵的第i行的所有元素相加,得到自导纳的值Y(i,i)=sum(y(i,:);end%上面求得的自导纳不包含该节点的对地导纳数值,需要加上Y(2,2)=Y(2,2)+0.067*1i;Y(3,3)=Y(3,3)+0.022*1i;Y(4,4)=Y(4,4)+0.0187*1i;Y(5,5)=Y(5,5)+0.0246*1i;%导纳矩阵的实部和虚部G = real(Y);B = imag(Y);Qc2=0;Qc3=0;%原始节点功率%这里电源功率为正,负荷功率为负S(1)=0;S(2)=-0.217-0.121*1i+Qc2*1i;S(3)=-0.749-0.19*1i+Qc3*1i;S(4)=-0.658+0.039*1i;S(5)=-0.076-0.016*1i;%节点功率的PQP = real(S);Q = imag(S);%下面是两个PV节点的无功初始值Q(2) = 0;Q(3) = 0;U=ones(5,1);%1列5行的1矩阵%节点电压初始值U(1)=1.06;U(2)=1.045;U(3)=1.01;U_reg=U;Sum_YU0=0;%中间变量Sum_YU1=0;%中间变量for cont=1:1:6%这里的cont是迭代次数for i=2:1:5.z.-for j=1:1:iif i=jSum_YU0 = Sum_YU0 + Y(i,j)*U_reg(j);endendfor j=i+1:1:5Sum_YU1 = Sum_YU1 + Y(i,j)*U(j);endU(i)=( (P(i)-Q(i)*1i ) / conj(U(i) - Sum_YU0 - Sum_YU1 ) / Y(i,i);U_reg(i)=U(i);%PV节点计算%下面是把求出的U2、U3只保留其相位,幅值不变if i=2angle_U2 = angle(U(2);U(2)=1.045*cos(angle_U2)+1.045*sin(angle_U2)*1i;Q(2)=imag( U(2)*( conj(Sum_YU0) + conj(Sum_YU1) + conj(Y(2,2)*U(2) ) );endif i=3angle_U3 = angle(U(3);U(3)=1.01*cos(angle_U3)+1.01*sin(angle_U3)*1i;Q(3)=imag( U(3)*( conj(Sum_YU0) + conj(Sum_YU1) + conj(Y(3,3)*U(3) ) );end% 下面做越界检查%if Q(4)Q_Ma*%Q(4) = Q_Ma*;%end%if Q(4) 1e-6),.z.-cont=cont+1;%for cont=1:1:3%下面开始计算delta_P/delta_Q/delta_Ufor i=2:1:5for j=1:1:5Sum_GB1=Sum_GB1 + ( G(i,j)*e(j) - B(i,j)*f(j) );Sum_GB2=Sum_GB2 + ( G(i,j)*f(j) + B(i,j)*e(j) );enddelta_P(i)=P(i)-e(i)*Sum_GB1-f(i)*Sum_GB2;if i=2 & i=3%不为节点2,3则计算无功delta_Q(i)=Q(i)-f(i)*Sum_GB1+e(i)*Sum_GB2;endif i=2 | i=3%这里计算delta_U的值,始终为零delta_U(i)=U(i)2-( e(i)2 + f(i)2 );endSum_GB1=0;Sum_GB2=0;end%_%下面计算雅克比矩阵J=zeros(8,8);for ii=2:1:5i=ii-1;for j=1:1:5Sum_GB1=Sum_GB1 + ( G(ii,j)*e(j) - B(ii,j)*f(j) );Sum_GB2=Sum_GB2 + ( G(ii,j)*f(j) + B(ii,j)*e(j) );endfor jj=2:1:5j=jj-1;if ii=2 & ii=3%PQ节点if ii=jjJ(2*i-1,2*i-1)=-Sum_GB1-G(ii,ii)*e(ii)-B(ii,ii)*f(ii);J(2*i-1,2*i)=-Sum_GB2+B(ii,ii)*e(ii)-G(ii,ii)*f(ii);J(2*i,2*i-1)=Sum_GB2+B(ii,ii)*e(ii)-G(ii,ii)*f(ii);J(2*i,2*i)=-Sum_GB1+G(ii,ii)*e(ii)+B(ii,ii)*f(ii);elseJ(2*i-1,2*j-1)=-(G(ii,jj)*e(ii)+B(ii,jj)*f(ii);J(2*i-1,2*j)=B(ii,jj)*e(ii)-G(ii,jj)*f(ii);J(2*i,2*j-1)=B(ii,jj)*e(ii)-G(ii,jj)*f(ii);J(2*i,2*j)=(G(ii,jj)*e(ii)+B(ii,jj)*f(ii);endelse%PV节点if ii=jjJ(2*i-1,2*i-1)=-Sum_GB1-G(ii,ii)*e(ii)-B(ii,ii)*f(ii);J(2*i-1,2*i)=-Sum_GB2+B(ii,ii)*e(ii)-G(ii,ii)*f(ii);.z.-J(2*i,2*i-1)=-2*e(ii);J(2*i,2*i)=-2*f(ii);elseJ(2*i-1,2*j-1)=-(G(ii,jj)*e(ii)+B(ii,jj)*f(ii);J(2*i-1,2*j)=B(ii,jj)*e(ii)-G(ii,jj)*f(ii);J(2*i,2*j-1)=0;J(2*i,2*j)=0;endendendSum_GB1=0;Sum_GB2=0;end%在求解修正方程之前建议把delta_P和delta_Q,delta_U全部放在一个矩阵delta_PQV=delta_P(2);delta_U(2);delta_P(3);delta_U(3);delta_P(4);delta_Q(4);delta_P(5);delta_Q(5);%下面求解修正方程;注意矩阵运算时候的左除和右除的区别delta_ef=-Jdelta_PQV;%下面修正各个节点的电压for i=2:1:5e(i)=e(i)+delta_ef(2*(i-1)-1);f(i)=f(i)+delta_ef(2*(i-1);end%到这里第一轮迭代完成end%电压幅值和相角U=e+f*1i;angle_U=angle(U)*180/pi;%节点注入无功,流入为正,流出为负Sum_YU=0;for i=2:1:3for j=1:1:5Sum_YU = Sum_YU + Y(i,j)*U(j);endQ(i)=imag( U(i)*conj( Sum_YU ) );Sum_YU=0;endQc2=Q(2)+0.121-1.0452 * 0.067;Qc3=Q(3)+0.19-1.012 * 0.022;U=abs(U);disp(Iteration times : num2str(cont);%显示最终的迭代次数牛顿算法求解潮流 (极坐标):clear;clc;%牛顿算法求解潮流 (极坐标).z.-%计算网络的潮流分布%其中节点5是平衡节点%节点1、2、3是PQ节点,节点4是PV节点% 如果节点有对地导纳支路%需将对地导纳支路算到自导纳里面%-%输入原始数据,每条支路的导纳数值,包括自导和互导纳;Y=0.8381-3.7899*1i,-0.4044+1.6203*1i,0,0,-0.4337+2.2586*1i;.-0.4044+1.6203*1i,0.7769-3.3970*1i,-0.3726+1.8557*1i,0,0;.0,-0.3726+1.8557*1i,1.1428-7.0210*1i,-0.5224+4.1792*1i,-0.2739+1.2670*1i;.0,0,-0.5224+4.1792*1i,0.5499-4.3591*1i,0;.-0.4337+2.2586*1i,0,-0.2739+1.2670*1i,0,0.7077-3.4437*1i;%导纳矩阵的实部和虚部G = real(Y);B = imag(Y);%给点电压初始值U = 1,1,1,1,1.05;angle_U=0,0,0,0,0;%for i=1:1:5%U(i)=U_abs(i)*cos(angle_U(i)+U_abs(i)*sin(angle_U(i)*1i;%end%原始节点功率%这里电源功率为正,负荷功率为负%下面给点PQPV节点功率值S=-0.22-0.14*1i,-0.18-0.09*1i,-0.27-0.13*1i,0.35,0;%节点功率的PQP = real(S);Q = imag(S);%下面是PV节点的无功初始值Q(4) = 0;delta_P=zeros(1,5);delta_Q=zeros(1,5);%delta_angleU=zeros(1,4);%delta_absU=zeros(1,4);delta_PQ=ones(8,1);Sum_GB1=0;Sum_GB2=0;cont=0;%最外层循环,cont代表迭代的次数,这里可以用约束条件来代替%for cont=1:1:4while ma*(delta_PQ)1e-6,%下面计算delta_P/delta_Q/delta_Ucont=cont+1;for i=1:1:4for j=1:1:5.z.-Sum_GB1=Sum_GB1+U(j)*(G(i,j)*cos(angle_U(i)-angle_U(j)B(i,j)*sin(angle_U(i)-angle_U(j) );Sum_GB2=Sum_GB2+U(j)*(G(i,j)*sin(angle_U(i)-angle_U(j)B(i,j)*cos(angle_U(i)-angle_U(j) );enddelta_P(i)=P(i)-U(i)*Sum_GB1;if i=4%不为节点四则计算无功delta_Q(i)=Q(i)-U(i)*Sum_GB2;endSum_GB1=0;Sum_GB2=0;end%_%下面计算雅克比矩阵J=zeros(7,7);for ii=1:1:4for jj=1:1:4if ii = 4%PQ节点if ii=jjJ(2*ii-1,2*ii-1)=U(ii)2*B(ii,ii)+Q(ii);J(2*ii-1,2*ii)=-U(ii)2*G(ii,ii)-P(ii);J(2*ii,2*ii-1)=U(ii)2*G(ii,ii)-P(ii);J(2*ii,2*ii)=U(ii)2*B(ii,ii)-Q(ii);elseJ(2*ii-1,2*jj-1)=-U(ii)*U(jj)*(G(ii,jj)*sin(angle_U(ii)-angle_U(jj)B(ii,jj)*cos(angle_U(ii)-angle_U(jj) );J(2*ii-1,2*jj)=-U(ii)*U(jj)*(G(ii,jj)*cos(angle_U(ii)-angle_U(jj)B(ii,jj)*sin(angle_U(ii)-angle_U(jj) );J(2*ii,2*jj-1)=U(ii)*U(jj)*(G(ii,jj)*cos(angle_U(ii)-angle_U(jj)B(ii,jj)*sin(angle_U(ii)-angle_U(jj) );J(2*ii,2*jj)=-U(ii)*U(jj)*(G(ii,jj)*sin(angle_U(ii)-angle_U(jj)B(ii,jj)*cos(angle_U(ii)-angle_U(jj) );endelse%PV节点if ii=jjJ(2*ii-1,2*ii-1)=U(ii)2*B(ii,ii)+Q(ii);J(2*ii-1,2*ii)=-U(ii)2*G(ii,ii)-P(ii);elseJ(2*ii-1,2*jj-1)=-U(ii)*U(jj)*(G(ii,jj)*sin(angle_U(ii)-angle_U(jj)B(ii,jj)*cos(angle_U(ii)-angle_U(jj) );J(2*ii-1,2*jj)=-U(ii)*U(jj)*(G(ii,jj)*cos(angle_U(ii)-angle_U(jj)B(ii,jj)*sin(angle_U(ii)-angle_U(jj) );endendend.z.+-+-+-end%在求解修正方程之前建议把delta_ef和delta_ef全部放在一个矩阵delta_PQ=delta_P(1);delta_Q(1);delta_P(2);delta_Q(2);delta_P(3);delta_Q(3);delta_P(4);%下面求解修正方程;注意矩阵运算时候的左除和右除的区别J=J(1:7,1:7);delta_ef=-Jdelta_PQ;%下面修正各个节点的电压for i=1:1:4if i=4U(i)=U(i)+delta_ef(2*i)*U(i);endangle_U(i)=angle_U(i)+delta_ef(2*i-1);end%到这里第一轮迭代完成end%下面显示出满足条件后的迭代的次数disp(Iteration times : num2str(cont);%下面计算平衡节点5的功率PQfor j=1:1:5Sum_GB1=Sum_GB1+U(j)*(G(5,j)*cos(angle_U(5)-angle_U(j)B(5,j)*sin(angle_U(5)-angle_U(j) );Sum_GB2=Sum_GB2+U(j)*(G(5,j)*sin(angle_U(5)-angle_U(j)B(5,j)*cos(angle_U(5)-angle_U(j) );endP(5)=U(5)*Sum_GB1;Q(5)=U(5)*Sum_GB2;%下面将相角用角度表示for i=1:1:5angle_U(i)=angle_U(i)*180/pi;End计算计算法P-Q算法计算潮流:这个算法是由牛顿算法的极坐标形式简化而来。clear;clc;%牛顿算法求解潮流%计算网络的潮流分布%其中节点5是平衡节点%节点1、2、3是PQ节点,节点4是PV节点% 如果节点有对地导纳支路%需将对地导纳支路算到自导纳里面%-%输入原始数据,每条支路的导纳数值,包括自导和互导纳;Y=0.8381-3.7899*1i,-0.4044+1.6203*1i,0,0,-0.4337+2.2586*1i;.-0.4044+1.6203*1i,0.7769-3.3970*1i,-0.3726+1.8557*1i,0,0;.0,-0.3726+1.8557*1i,1.1428-7.0210*1i,-0.5224+4.1792*1i,-0.2739+1.2670*1i;.z.+-0,0,-0.5224+4.1792*1i,0.5499-4.3591*1i,0;.-0.4337+2.2586*1i,0,-0.2739+1.2670*1i,0,0.7077-3.4437*1i;%导纳矩阵的实部和虚部G = real(Y);B = imag(Y);%给点电压初始值U = 1,1,1,1,1.05;angle_U=0,0,0,0,0;%原始节点功率%这里电源功率为正,负荷功率为负%下面给点PQPV节点功率值S=-0.22-0.14*1i,-0.18-0.09*1i,-0.27-0.13*1i,0.35,0;%节点功率的PQP = real(S);Q = imag(S);%下面是PV节点的无功初始值Q(4) = 0;%下面计算出无功和有功迭代的系数矩阵B_P=B(1:4,1:4); %有功迭代系数矩阵 n-1 即除开平衡节点以外的所有节点B_Q=B(1:3,1:3); %无功迭代系数矩阵 m个 即PQ节点的个数%下面是相关变量的定义delta_P=ones(1,5);delta_Q=ones(1,5);delta_PQ=ones(8,1);delta_angle=ones(4,1);Sum_GB1=0;Sum_GB2=0;cont=0;%最外层循环,cont代表迭代的次数,这里可以用约束条件来代替%for cont=1:1:5while ma*(delta_angle) 1e-6,%下面计算delta_P/delta_Q/delta_Ucont=cont+1;for i=1:1:4for j=1:1:5Sum_GB1=Sum_GB1+U(j)*(G(i,j)*cos(angle_U(i)-angle_U(j)B(i,j)*sin(angle_U(i)-angle_U(j) );Sum_GB2=Sum_GB2+U(j)*(G(i,j)*sin(angle_U(i)-angle_U(j)B(i,j)*cos(angle_U(i)-angle_U(j) );enddelta_P(i)=P(i)-U(i)*Sum_GB1;if i=4%不为PV节点四则计算无功delta_Q(i)=Q(i)-U(i)*Sum_GB2;endSum_GB1=0;Sum_GB2=0;.z.+-end%_%下面计算delta_P(i)/U(i) delta_Q(i)/U(i)delta_QV=zeros(3,1);delta_PV=zeros(4,1);for i=1:1:4if i=4delta_QV(i)=delta_Q(i)/U(i);enddelta_PV(i)=delta_P(i)/U(i);end%_%下面计算delta_angle和delta_U%delta_U=zeros(3,1);%这里只要PQ节点的%下面求解修正方程;注意矩阵运算时候的左除和右除的区别delta_U=-B_Qdelta_QV;delta_angleU=-B_Pdelta_PV;for i=1:1:4delta_angle(i)=delta_angleU(i)/U(i);end%下面修正各个节点的电压for i=1:1:4if i=4U(i)=U(i)+delta_U(i);endangle_U(i)=angle_U(i)+delta_angle(i);end%到这里第一轮迭代完成end%下面显示出满足条件后的迭代的次数disp(Iteration times : num2str(cont);%下面计算平衡节点5的功率PQfor j=1:1:5Sum_GB1=Sum_GB1+U(j)*(G(5,j)*cos(angle_U(5)-angle_U(j)B(5,j)*sin(angle_U(5)-angle_U(j) );Sum_GB2=Sum_GB2+U(j)*(G(5,j)*sin(angle_U(5)-angle_U(j)B(5,j)*cos(angle_U(5)-angle_U(j) );endP(5)=U(5)*Sum_GB1;Q(5)=U(5)*Sum_GB2;%下面将相角用角度表示for i=1:1:5angle_U(i)=angle_U(i)*180/pi;end下面对上面几种算法进行比较:.z.+-1、高斯算法简单,对于PV节点的计算很特别,每次迭代后需要仅仅保留它的电压幅角,因为PV节点的U是给定的。迭代速度不快。2、牛顿算法突出的优点是收敛速度快,若初值选择较好,算法将具有平方收敛特性,一般迭代4-5次便可以得到精确的解,而且迭代次数与所计算的网络规模基本无关。牛顿法也具有良好的收敛可靠性,对于呈病态的系统,牛顿法也能可靠地收敛。3、牛顿法的缺点就是每次迭代占用的内存量较大,且数值在迭代过程中不断变化。而且牛顿法迭代开始需要一个可靠的初始值确定, 不然无法收敛。 所以早期的计算潮流都是已高斯算法求出较精确的初始值,然后用牛顿法迭代求解。4、由极坐标形式的牛顿法演化而来,P-Q分解法改进了牛顿法在内存占用的不足,而且计算速度快。也成为快速解耦法。5、需要指出的是P-Q分解法是建立在一定的简化基础上的,不满足简化基础的网络会影响它的收敛性,这里主要是高压电网的*R这一个条件。对于以后的潮流优化问题,个人推荐用P-Q算法的好,简单,而且速度快,内存占用少。.z.