⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 power_system_1.m

📁 电力系统潮流计算程序
💻 M
字号:
%本程序的功能是用牛顿-拉夫逊法进行潮流计算
% n=input('请输入节点数:n=');
% zl=input('请输入支路数:zl=');
% n_Bal_Bus=input('请输入平衡母线节点号:n_Bal_Bus=');
% jd=input('请输入误差精度jd=');
% B1=input('请输入由支路参数形成的矩阵:B1=');
% B2=input('请输入各节点参数形成的矩阵:B2=');
n=4
zl=4
n_Bal_Bus=4
jd=0.00001
disp('B1=[首节点p  末节点q (p<q)  支路阻抗(R+jX)  对地容抗   变比1/k   高压侧标志(首端处于高压侧请输入1,否则输0)]');
B1=[1  2  0.10+0.40i  0.01528i  1     0;
    1  3    0+0.3i        0    1/1.1  0;  
    1  4  0.12+0.50i  0.01920i  1     0;
    2  4   0.08+0.40i  0.01413i 1     0]
disp('B2=[节点注入功率   节点电压初值   PV节点电压初值   节点分类号(1-PQ 2-PV 0-平衡)]');     
B2=[-0.30-0.18i   1.0     0          1;            %1号PQ节点
    -0.55-0.13i   1.0     0          1;            %2号PQ节点
      0.5         1.1    1.10        2;            %3号PV节点
      0          1.05      0         0;]           %4号平衡节点
     
Y=zeros(n);e=zeros(1,n);f=zeros(1,n);V=zeros(1,n);Phase=zeros(1,n);
%形成节点导纳矩阵
for i=1:zl
    if B1(i,6)~=0    %判断首端是否处于高压侧
       p=B1(i,1);q=B1(i,2);
    else 
       p=B1(i,2);q=B1(i,1);  
    end
    Y(p,q)=Y(p,q)-1./(B1(i,3)*B1(i,5));  %按书p71-74页
    Y(q,p)=Y(p,q);
    Y(q,q)=Y(q,q)+1./(B1(i,3)*B1(i,5)^2)+B1(i,4);
    Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4);
end %形成节点导纳矩阵          
disp('节点导纳矩阵Y为:');
disp(Y);
G=real(Y);B=imag(Y);   %Y=G+jB
for i=1:n
    e(i)=real(B2(i,2));
    f(i)=imag(B2(i,2));%V=e+jf
    V(i)=B2(i,3);
end
for i=1:n
S(i)=B2(i,1);   %S=P+jQ
end
P=real(S);Q=imag(S);
Ci=0;a=1;N0=2*n;N=N0-1;%开始求雅克比矩阵,Ci为迭代次数
while a~=0
    a=0;
    for i=1:n
        if i~=n_Bal_Bus
            C(i)=0;
            D(i)=0;
            for jl=1:n
                C(i)=C(i)+G(i,jl)*e(jl)-B(i,jl)*f(jl);
                D(i)=D(i)+G(i,jl)*f(jl)+B(i,jl)*e(jl);
            end
            P1=C(i)*e(i)+f(i)*D(i);
            Q1=f(i)*C(i)-D(i)*e(i);       %求Pi,Qi 
            V2=e(i)^2+f(i)^2;
            if B2(i,4)~=2                 %若节点是PQ或平衡节点
                DP=P(i)-P1;
                DQ=Q(i)-Q1;
                for jl=1:n     
                    if jl~=n_Bal_Bus&jl~=i       %节点不为平衡节点时非对角线元素
                        X1=-G(i,jl)*e(i)-B(i,jl)*f(i);
                        X2=B(i,jl)*e(i)-G(i,jl)*f(i);
                        X3=X2;
                        X4=-X1;
                        p=2*i-1;q=2*jl-1;J(p,q)=X1;J(p,N)=DP;m=p+1;
                        J(m,q)=X3;J(m,N)=DQ;q=q+1;J(p,q)=X2;J(m,q)=X4;
                      elseif jl==i&jl~=n_Bal_Bus  %节点不为平衡节点时对角线元素
                        X1=-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);
                        X3=D(i)+B(i,i)*e(i)-G(i,i)*f(i);
                        X4=-C(i)+G(i,i)*e(i)+B(i,i)*f(i);
                        p=2*i-1;q=2*jl-1;J(p,q)=X1;J(p,N)=DP;m=p+1;
                        J(m,q)=X3;J(m,N)=DQ;q=q+1;J(p,q)=X2;J(m,q)=X4;
                    end
                end
            else                      %若节点是PV节点
                DP=P(i)-P1;
                DV=V(i)^2-V2;
                for jl=1:n
                    if jl~=n_Bal_Bus&jl~=i
                       X1=-G(i,jl)*e(i)-B(i,jl)*f(i);
                       X2=B(i,jl)*e(i)-G(i,jl)*f(i);
                       X5=0;
                       X6=0;
                      p=2*i-1;q=2*jl-1;J(p,q)=X1;J(p,N)=DP;m=p+1;
                      J(m,q)=X5;J(m,N)=DV;q=q+1;J(p,q)=X2;J(m,q)=X6;
                    elseif jl==i&jl~=n_Bal_Bus
                        X1=-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*jl-1;J(p,q)=X1;J(p,N)=DP;m=p+1;
                       J(m,q)=X5;J(m,N)=DV;q=q+1;J(p,q)=X2;J(m,q)=X6;
                    end
                end
            end
        end
    end     %形成雅克比矩阵
    DJ=-J(:,[1:N0-2]);%修正方程系数矩阵DJ=-J,J矩阵的1-(N0-2)行
    DW=J([1:N0-2],N); %修正方程常数项矩阵DW,J矩阵的第N行
    if Ci==0
        disp('迭代前的J:');
        disp(-DJ);
    end
    F=DJ\DW;      %求解修正方程
    if Ci==0
        disp('第一次修正方程的解F:');
        disp(F);
    end
%计算节点电压
    for k=1:2:N0-3
        L=(k+1)./2;
        e(L)=e(L)+F(k);
        k1=k+1;
        f(L)=f(L)+F(k1);
    end %计算节点电压
    E=e+f*j;    %每次修正后节点电压的近似值
    for k=1:N0-2
        DET=abs(DW(k));
        if DET>=jd
            a=a+1;
        end     
    end         %判断是否达到精度要求
    Ci=Ci+1;
end             %迭代过程结束     
disp('迭代次数');
disp(Ci-1);     %显示迭代次数
for k=1:n
    V(k)=sqrt(e(k)^2+f(k)^2);
    Phase(k)=atan(f(k)./e(k))*180./pi;
end             %收敛后节点电压用极坐标表示的结果
E=e+f*j;
disp('各节点的实际电压标么值E为(节点号从小到大排列):');disp(E);
disp('各节点的电压大小V为(节点号从小到大排列):');disp(V);
disp('各节点的电压相角Phase(单位:度)为(节点号从小到大排列):');disp(Phase);
for p=1:n
    C(p)=0;
    for q=1:n
        C(p)=C(p)+conj(Y(p,q))*conj(E(q));
    end
    S(p)=E(p)*C(p);
end        %各节点的功率
disp('各节点的功率S为(节点号从小到大排列):');
disp(S);
disp('平衡节点功率为:');disp(S(n));
disp('各条支路的首端功率Si为(顺序同您输入B1时一样):');
for i=1:zl
    if B1(i,6)==0
        p=B1(i,1);q=B1(i,2);
    else q=B1(i,1);p=B1(i,2);
    end
    Si(p,q)=E(p)*((E(p))*conj(B1(i,4))+(conj(E(p)./B1(i,5))-conj(E(q)))*conj(1./(B1(i,3)*B1(i,5))));
    disp(Si(p,q));       %计算支路首端功率Si
end
disp('各条支路的末端功率Sj为(顺序同您输入B1时一样):')
for i=1:zl
    if B1(i,6)==0
        p=B1(i,1);q=B1(i,2);
    else q=B1(i,1);p=B1(i,2);
    end
    Sj(q,p)=E(q)*((E(q))*conj(B1(i,4))+(conj(E(q)*B1(i,5))-conj(E(p)))*conj(1./(B1(i,3)*B1(i,5))));
    disp(Sj(q,p));       
end                      %计算支路末端功率Sj
%潮流计算程序结束

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -