牛顿法(牛顿拉夫逊)配电网潮流计算matlab程序

牛顿法配电网潮流计算matlab程序
传统牛顿—拉夫逊算法,简称牛顿法,是将潮流计算方程组F(X)=0,进行泰勒展开。因泰勒展开有许多高阶项,而高阶项级数部分对计算结果影响很小,当忽略一阶以上部分时,可以简化对方程的求解计算。当忽略一阶以上部分后,牛顿法的求解过程实质是逐次线性化,这是反复形成、求解修正方程的过程[16]。其方程式如下:
在这里插入图片描述
(18)
在公式(18)中,和分别表示状态变量与其修正量组成的列向量;为方阵,一般叫作雅可比矩阵,第i行j列元素为 ,它的大小为第i个函数对第j个变量求偏导;k则表示阵元素都在处取;同时,F(X)是由n个函数组成的n维列向量;在极坐标下,节点电压可如下表示:
在这里插入图片描述
(19)
若和为已知大小的功率,与从节点电压求得的有功和无功功率之差,为功率的不平衡量,则节点功率不平衡量可用如下公式计算:
在这里插入图片描述
(20)
节点功率可用各节点电压模值与相位表示,如下公式所示:
在这里插入图片描述
(21)
式(21)中,为节点i和j的相位差。
由以公式(18)-(21)推得牛顿法下,其潮流计算方程可写为:
在这里插入图片描述
(22)
公式(22)中,雅可比矩阵的各元素为
在这里插入图片描述
(23)
(24)
(25)
(26)
在这里插入图片描述
(27)
(28)
(29)
(30)
其中,节点导纳矩阵的元素由Gij 、Bij表示。
随着国内外配电系统自动化水平不断提高,电力行业人员也开始更加深入地研究配电网系统。配电网潮流计算作为DMS(配电管理系统)的重要基础,受到广大行业界人士的关注。因此,配电网潮流计算,已然成为配电网分析的重要内容。配电网与输电网相比,两者有明显不同,前者一般采用网格结构,线路参数R/X的值较大,三相负荷不对称程度明显。这些特点使得在输电网中计算有效,如牛顿法,不再适用于配电网。为此,有学者提出了适用于配电网的潮流算法,主要包括基于回路方程的潮流算法、前推回推法和改进的牛顿-拉夫逊法[17](简称改进的牛拉法)。其中,基于回路方程的方法具有较强的网格处理能力和良好的收敛性,但该方法的节点数和分支数处理非常复杂。前推回推法是针对配电网的树状特性,可以避免潮流计算中的病态条件,同时速度更快。然而,由于其公式和算法与牛顿潮流算法不同,其在其它方面(如潮流优化)的应用将受到限制。
改进牛顿法通过对传统法进行一定的近似,将J阵写成UDUT 的形式。U仅由网络拓扑决定,是一个上三角矩阵;D是一个对角矩阵。在牛拉法中,需要对J阵因子分解与前代回代,改进法则只有前推回代的计算过程。它很好地改善了传统法以及前推回推法。经过算例计算结果证明,改进法可以避免J阵病态,且拥有前推回代法的收敛速度、精度,又由于它属于牛顿型算法,所以该算法已经得到了广泛的运用[18]。

下面附带电力系统分析牛顿法算例及matlab程序:
网络结构如下:系统结构图
系统参数如下:
在上图所示的简单电力系统中,系统中节点1、2为PQ节点,节点3为PV节点,节点4为平衡节点,已给定P1s+jQ1s=-0.30-j0.18 P2s+jQ2s=-0.55-j0.13 P3s=0.5 V3s=1.10 V4s=1.05∠0°
容许误差ε=10-5
节点导纳矩阵:
导纳矩阵
各节点电压:
节点 e f v ζ
1.0.984637 -0.008596 0.984675 -0.500172
2.0.958690 -0.108387 0.964798 -6.450306
3.1.092415 0.128955 1.100000 6.732347
4.1.050000 0.000000 1.050000 0.000000

各节点功率:
节点 P Q
1-0.300000 -0.180000
2–0.550000 -0.130000
3 0.500000 -0.551305
4 0.367883 0.264698

matlab程序如下:

// 牛顿法潮流计算matlab程序
clc;
Y=[1.042093-8.242876i   -0.588235+2.352941i   3.666667i   -0.453858+1.891074i;
-0.588235+2.352941i     1.069005-4.727377i       0        -0.480769+2.403846i;
3.666667i                   0                   -3.333333i            0;
-0.453858+1.891074i      -0.480769+2.403846i       0        0.934627-4.261590i];
%导纳矩阵
e=[1  1  1.1  1.05];%初始电压
f=zeros(4,1);
V=zeros(4,1);%节点电压
Ws=[-0.3 ; -0.18 ; -0.55 ; -0.13 ; 0.5 ; 1.1];%初始功率
W=zeros(6,1);
n=length(Y);%节点数
J=zeros(2*(n-1));%雅可比矩阵
delta_v=zeros(1,6);
delta_w=Ws;
G=real(Y);
B=imag(Y);
S=zeros(4,2);
c=0;%循环次数
m=input('请输入PQ节点数:');
 while max(abs(delta_w))>10^-5
for i=1:(n-1)%以下为求取雅可比矩阵
    for j=1:(n-1)
       if (i~=j)
           J(2*i-1,2*j-1)=-(G(i,j)*e(i)+B(i,j)*f(i));
           J(2*i,2*j)=-J(2*i-1,2*j-1);
           J(2*i-1,2*j)=B(i,j)*e(i)-G(i,j)*f(i);
           J(2*i,2*j-1)=J(2*i-1,2*j);
       end        
    end    
end
for j=1:(n-2)  
      J(6,2*j-1)=0;
      J(6,2*j)=0;   
end%以上为非对角线元素
s1=0;
s2=0;
for i=1:(n-1) 
    for j=1:n
   s1=s1+(G(i,j).*e(j)-B(i,j).*f(j));
   s2=s2+(G(i,j).*f(j)+B(i,j).*e(j));
    end
    J(2*i-1,2*i-1)=-s1-G(i,i) *e(i)-B(i,i)*f(i);
    J(2*i-1,2*i)=-s2+B(i,i) *e(i)-G(i,i)*f(i);
    s1=0;
    s2=0;
end
for i=1:m
    for j=1:n
   s1=s1+G(i,j).*f(j)+B(i,j).*e(j);
   s2=s2+(G(i,j).*e(j)-B(i,j).*f(j));
    end
     J(2*i,2*i-1)=s1+B(i,i) *e(i)-G(i,i)*f(i);
    J(2*i,2*i)=-s2+G(i,i) *e(i)+B(i,i)*f(i);
    s1=0;
    s2=0;
end
J(6,5)=-2*e(3);
J(6,6)=-2*f(3);%对角线元素求解
for i=1:m
    for j=1:n
   s1=s1+e(i)*(G(i,j).*e(j)-B(i,j).*f(j))+f(i)*(G(i,j).*f(j)+B(i,j).*e(j));
   s2=s2+f(i)*(G(i,j).*e(j)-B(i,j).*f(j))-e(i)*(G(i,j).*f(j)+B(i,j).*e(j));   
    end   
      delta_w(2*i-1)=Ws(2*i-1)-s1;
      delta_w(2*i)=Ws(2*i)-s2;   
      W(2*i-1)=s1;
      W(2*i)=s2;
      s1=0;
      s2=0;
end
for j=1:n
    s1=s1+e(3)*(G(3,j).*e(j)-B(3,j).*f(j))+f(3)*(G(3,j).*f(j)+B(3,j).*e(j));
end
delta_w(5)=Ws(5)-s1;
delta_w(6)=(Ws(6)^2-(e(3)^2+f(3)^2));
W(5)=s1;
W(6)=sqrt(e(3)^2+f(3)^2);%以上求功率差值
delta_v=-inv(J)*delta_w;
for i=1:(n-1)
   e(i)=e(i)+delta_v(2*i-1);
   f(i)=f(i)+delta_v(2*i);
end%求电压差值
c=c+1;
 end
 for x=1:4
     V(x)=e(x)+f(x)*1i;     
 end%节点电压
 s1=0;
 for x=3:4
    for j=1:4
       s1=s1+conj(Y(x,j))*conj(V(j));
    end
   S(x,1)=real(V(x)*s1);
   S(x,2)=imag(V(x)*s1);
   s1=0;
 end%PV与平衡节点功率
 for x=1:2
     S(x,1)=W(2*x-1);
     S(x,2)=W(2*x);
 end%节点功率
c  
J
V
S

运行结果如下:
潮流计算结果

  • 28
    点赞
  • 275
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
牛顿拉弗森法是一种求解非线性方程组的数值方法,在潮流计算中常用于解决节点电压相角和幅值的问题。下面是一个简单的使用牛顿拉弗森法进行潮流计算MATLAB程序。 ```matlab function [V, converged] = newton_raphson_power_flow(Y, S, V0, tolerance, max_iterations) % 输入参数: % Y: 节点导纳矩阵 % S: 节点注入功率矩阵 % V0: 节点电压初值矩阵 % tolerance: 迭代收敛的容差 % max_iterations: 最大的迭代次数 % 初始化变量 n = size(Y, 1); % 节点数 V = V0; % 节点电压矩阵 converged = false; % 收敛标志 iteration = 0; % 迭代次数 % 开始迭代 while ~converged && iteration < max_iterations P = real(conj(V) .* (Y * V)); % 计算节点注入有功功率 Q = imag(conj(V) .* (Y * V)); % 计算节点注入无功功率 F = [P - real(S); Q - imag(S)]; % 构建非线性方程组 J = [real(Y * V), -imag(Y * V); imag(Y * V), real(Y * V)]; % 构建雅可比矩阵 delta_x = -J \ F; % 使用牛顿拉弗森法求解线性方程组 delta_theta = delta_x(1:n); % 相角调整量 delta_V = delta_x(n+1:end); % 电压调整量 V = V + delta_V; % 更新节点电压 converged = max(abs(delta_theta)) < tolerance && max(abs(delta_V)) < tolerance; % 判断是否收敛 iteration = iteration + 1; % 迭代次数+1 end if converged disp('潮流计算收敛'); else disp('潮流计算未收敛'); end end ``` 该程序通过输入节点导纳矩阵Y、节点注入功率矩阵S、节点电压初值矩阵V0、迭代收敛容差tolerance和最大迭代次数max_iterations来进行潮流计算程序首先初始化变量,然后开始迭代过程,在每一次迭代中计算节点注入功率,并构建非线性方程组。随后,程序根据雅可比矩阵和非线性方程组使用牛顿拉夫法求解线性方程组,得到相角和电压调整量。最后,程序更新节点电压,并判断是否达到收敛条件。如果收敛,则输出“潮流计算收敛”,否则输出“潮流计算未收敛”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电磁MATLAB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值