电力系统潮流分析
文件夹
报告,汉语词语,公文的一种格式,是指对上级有所陈请或汇报时所作的口头或书面的陈述。怎样写报告才更能起到其作用呢?报告应该怎么制定呢?下面是小编帮大家整理的最新报告范文,仅供参考,希望能够帮助到大家。
《电力系统稳态分析》
课程报告
姓名
xx
学 号: 5*** 自动化学院 电气工程
基于牛顿-拉夫逊法的潮流计算例题编程报学院(系): 专
业: 题
目: 任课教师 硕士导师 告
杨伟 xx
2015年6月10号
基于牛顿-拉夫逊法的潮流计算例题编程报告
摘要:电力系统潮流计算的目的在于:确定电力系统的运行方式、检查系统中各元件是否过压或者过载、为电力系统继电保护的整定提供依据、为电力系统的稳定计算提供初值、为电力系统规划和经济运行提供分析的基础。潮流计算的计算机算法包含高斯—赛德尔迭代法、牛顿-拉夫逊法和p—q分解法等,其中牛拉法计算原理较简单、计算过程也不复杂,而且由于人们引入泰勒级数和非线性代数方程等在算法里从而进一步提高了算法的收敛性和计算速度。同时基于matlab的计算机算法以双精度类型进行数据的存储和运算, 数据精确度高,能进行潮流计算中的各种矩阵运算,使得传统潮流计算方法更加优化。
一 研究内容
通过一道例题来认真分析牛顿-拉夫逊法的原理和方法(采用极坐标形式的牛拉法),同时掌握潮流计算计算机算法的相关知识,能看懂并初步使用matlab软件进行编程,培养自己电力系统潮流计算机算法编程能力。
例题如下:用牛顿-拉夫逊法计算下图所示系统的潮流分布,其中系统中5为平衡节点,节点5电压保持u=1.05为定值,其他四个节点分别为pq节点,给定的注入功率如图所示。计算精度要求各节点电压修正量不大于10-6。
二 牛顿-拉夫逊法潮流计算 1 基本原理
牛顿法是取近似解x(k)之后,在这个基础上,找到比x(k)更接近的方程的根,一步步地迭代,找到尽可能接近方程根的近似根。牛顿迭代法其最大优点是在方程f(x)=0的单根附近时误差将呈平方减少,而且该法还可以用来求方程的重根、复根。电力系统潮流计算,一般来说,各个母线所供负荷的功率是已知的,各个节点的电压是未知的(平衡节点外)可以根据网络结构形成节点导纳矩阵,然后由节点导纳矩阵列写功率方程,由于功率方程里功率是已知的,电压的幅值和相角是未知的,这样潮流计算的问题就转化为求解非线性方程组的问题了。为了便于用迭代法解方程组,需要将上述功率方程改写成功率平衡方程,并对功率平衡方程求偏导,得出对应的雅可比矩阵,给未知节点赋电压初值,将初值带入功率平衡方程,得到功率不平衡量,这样由功率不平衡量、雅可比矩阵、节点电压不平衡量(未知的)构成了误差方程,解误差方程,得到节点电压不平衡量,节点电压加上节点电压不平衡量构成节点电压新的初值,将新的初值带入原来的功率平衡方程,并重新形成雅可比矩阵,然后计算新的电压不平衡量,这样不断迭代,不断修正,一般迭代三到五次就能收敛。2 基本步骤和设计流程图
形成了雅克比矩阵并建立了修正方程式,运用牛顿-拉夫逊法计算潮流的核心问题已经解决,已有可能列出基本计算步骤并编制流程图。由课本总结基本步骤如下:
1)形成节点导纳矩阵y;
2)设各节点电压的初值,如果是直角坐标的话设电压的实部e和虚部f;如果是极坐标的话则设电压的幅值u和相角a;
3)将各个节点电压的初值代入公式求修正方程中的不平衡量以及修正方程的系数矩阵的雅克比矩阵;
4)解修正方程式,求各节点电压的变化量,即修正量; 5)计算各个节点电压的新值,即修正后的值;
6)利用新值从第(3)步开始进入下一次迭代,直至达到精度退出循环; 7)计算平衡节点的功率和线路功率,输出最后计算结果; ① 公式推导
② 流程图
三
matlab编程代码
clear;
% 如图所示1,2,3,4为pq节点,5为平衡节点
y=0;
% 输入原始数据,求节点导纳矩阵
y(1,2)=1/(0.07+0.21j);
y(4,5)=0;y(1,3)=1/(0.06+0.18j);
y(1,4)=1/(0.05+0.10j);
y(1,5)=1/(0.04+0.12j);
y(2,3)=1/(0.05+0.10j);
y(2,5)=1/(0.08+0.24j);
y(3,4)=1/(0.06+0.18j);
for i=1:5
for j=i:5
y(j,i)=y(i,j);
end
end
y=0;
% 求节点导纳矩阵中互导纳
for i=1:5
for j=1:5
if i~=j
y(i,j)=-y(i,j);
end
end
end
% 求节点导纳矩阵中自导纳
for i=1:5
y(i,i)=sum(y(i,:));
end
y
% y为导纳矩阵
g=real(y);
b=imag(y);% 输入原始节点的给定注入功率
s(1)=0.3+0.3j;
s(2)=-0.5-0.15j;
s(3)=-0.6-0.25j;
s(4)=-0.7-0.2j;
s(5)=0;
p=real(s);
q=imag(s);
% 赋初值,u为节点电压的幅值,a为节点电压的相位角
u=ones(1,5);
u(5)=1.05;
a=zeros(1,5);
x1=ones(8,1);
x2=ones(8,1);
k=0;
while max(x2)>1e-6
for i=1:4
for j=1:4
h(i,j)=0;
n(i,j)=0;
m(i,j)=0;
l(i,j)=0;
op(i)=0;
oq(i)=0;
end
end
% 求有功、无功功率不平衡量
for i=1:4
for j=1:5
op(i)=op(i)-u(i)*u(j)*(g(i,j)*cos(a(i)-a(j))+b(i,j)*sin(a(i)-a(j)));
oq(i)=oq(i)-u(i)*u(j)*(g(i,j)*sin(a(i)-a(j))-b(i,j)*cos(a(i)-a(j)));
end
op(i)=op(i)+p(i);
oq(i)=oq(i)+q(i);
end
x2=[op,oq]';
% x2为不平衡量列向量
% 求雅克比矩阵
% 当i~=j时,求h,n,m,l
for i=1:4
for j=1:4
if i~=j
h(i,j)=-u(i)*u(j)*(g(i,j)*sin(a(i)-a(j))-b(i,j)*cos(a(i)-a(j)));
n(i,j)=-u(i)*u(j)*(g(i,j)*cos(a(i)-a(j))+b(i,j)*sin(a(i)-a(j)));
l(i,j)=h(i,j);
m(i,j)=-n(i,j);
end
end
end
% 当i=j时,求h,n,m,l
for i=1:4
for j=1:5
if i~=j h(i,i)=h(i,i)+u(i)*u(j)*(g(i,j)*sin(a(i)-a(j))-b(i,j)*cos(a(i)-a(j)));n(i,i)=n(i,i)-u(i)*u(j)*(g(i,j)*cos(a(i)-a(j))+b(i,j)*sin(a(i)-a(j)));
m(i,i)=m(i,i)-u(i)*u(j)*(g(i,j)*cos(a(i)-a(j))+b(i,j)*sin(a(i)-a(j)));
l(i,i)=l(i,i)-u(i)*u(j)*(g(i,j)*sin(a(i)-a(j))-b(i,j)*cos(a(i)-a(j)))
end
end
n(i,i)=n(i,i)-2*(u(i))^2*g(i,i);
l(i,i)=l(i,i)+2*(u(i))^2*b(i,i);
end
j=[h,n;m,l]
% j为雅克比矩阵
x1=-((inv(j))*x2);
% x1为所求△x的列向量
% 求节点电压新值,准备下一次迭代
for i=1:4
oa(i)=x1(i);
ou(i)=x1(i+4)*u(i);
end
for i=1:4
a(i)=a(i)+oa(i);
u(i)=u(i)+ou(i);
end
k=k+1;
end
k,u,a
% 求节点注入功率
i=5;
for j=1:5
p(i)=u(i)*u(j)*(g(i,j)*cos(a(i)-a(j))+b(i,j)*sin(a(i)-a(j)))+p(i);
q(i)=u(i)*u(j)*(g(i,j)*sin(a(i)-a(j))-b(i,j)*cos(a(i)-a(j)))+q(i);
end
s(5)=p(5)+q(5)*sqrt(-1);
s
% 求节点注入电流
i=y*u'
四
运行结果
节点导纳矩阵
经过五次迭代后的雅克比矩阵
迭代次数以及节点电压的幅值和相角(弧度数)
节点注入功率和电流
五 结果分析
在这次学习和实际操作过程里:首先,对电力系统分析中潮流计算的部分特别是潮流计算的计算机算法中的牛顿-拉夫逊法进行深入的研读,弄明白了其原理、计算过程、公式推导以及设计流程。牛顿-拉夫逊法是求解非线性方程的迭代过程,其计算公式为fjx,式中j为所求函数的雅可比矩阵;x为需要求的修正值;f为不平衡的列向量。利用x(*)=x(k+1)+x(k+1)进行多次迭代,通过迭代判据得到所需要的精度值即准确值x(*)。六 结论
通过这个任务,自己在matlab编程,潮流计算,word文档的编辑功能等方面均有提高,但也暴漏出一些问题:理论知识储备不足,对matlab的性能和特点还不能有一个全面的把握,对word软件也不是很熟练,相信通过以后的学习能弥补这些不足,达到一个新的层次。
电力系统潮流计算发展史
对潮流计算的要求可以归纳为下面几点:
(1)算法的可靠性或收敛性(2)计算速度和内存占用量(3)计算的方便性和灵活性
电力系统潮流计算属于稳态分析范畴,不涉及系统元件的动态特性和过渡过程。因此其数学模型不包含微分方程,是一组高阶非线性方程。非线性代数方程组的解法离不开迭代,因此,潮流计算方法首先要求它是能可靠的收敛,并给出正确答案。随着电力系统规模的不断扩大,潮流问题的方程式阶数越来越高,目前已达到几千阶甚至上万阶,对这样规模的方程式并不是采用任何数学方法都能保证给出正确答案的。这种情况促使电力系统的研究人员不断寻求新的更可靠的计算方法。
在用数字计算机求解电力系统潮流问题的开始阶段,人们普遍采用以节点导纳矩阵为基础的高斯-赛德尔迭代法(一下简称导纳法)。这个方法的原理比较简单,要求的数字计算机的内存量也比较小,适应当时的电子数字计算机制作水平和电力系统理论水平,于是电力系统计算人员转向以阻抗矩阵为主的逐次代入法(以下简称阻抗法)。
20世纪60年代初,数字计算机已经发展到第二代,计算机的内存和计算速度发生了很大的飞跃,从而为阻抗法的采用创造了条件。阻抗矩阵是满矩阵,阻抗法要求计算机储存表征系统接线和参数的阻抗矩阵。这就需要较大的内存量。而且阻抗法每迭代一次都要求顺次取阻抗矩阵中的每一个元素进行计算,因此,每次迭代的计算量很大。
阻抗法改善了电力系统潮流计算问题的收敛性,解决了导纳法无法解决的一些系统的潮流计算,在当时获得了广泛的应用,曾为我国电力系统设计、运行和研究作出了很大的贡献。但是,阻抗法的主要缺点就是占用计算机的内存很大,每次迭代的计算量很大。当系统不断扩大时,这些缺点就更加突出。为了克服阻抗法在内存和速度方面的缺点,后来发展了以阻抗矩阵为基础的分块阻抗法。这个方法把一个大系统分割为几个小的地区系统,在计算机内只需存储各个地区系统的阻抗矩阵及它们之间的联络线的阻抗,这样不仅大幅度的节省了内存容量,同时也提高了节省速度。
克服阻抗法缺点的另一途径是采用牛顿-拉夫逊法(以下简称牛顿法)。牛顿法是数学中求解非线性方程式的典型方法,有较好的收敛性。解决电力系统潮流计算问题是以导纳矩阵为基础的,因此,只要在迭代过程中尽可能保持方程式系数矩阵的稀疏性,就可以大大提高牛顿潮流程序的计算效率。自从20世纪60年代中期采用了最佳顺序消去法以后,牛顿法在收敛性、内存要求、计算速度方面都超过了阻抗法,成为直到目前仍被广泛采用的方法。
在牛顿法的基础上,根据电力系统的特点,抓住主要矛盾,对纯数学的牛顿法进行了改造,得到了p-q分解法。p-q分解法在计算速度方面有显著的提高,迅速得到了推广。
牛顿法的特点是将非线性方程线性化。20世纪70年代后期,有人提出采用更精确的模型,即将泰勒级数的高阶项也包括进来,希望以此提高算法的性能,这便产生了保留非线性的潮流算法。另外,为了解决病态潮流计算,出现了将潮流计算表示为一个无约束非线性规划问题的模型,即非线性规划潮流算法。
近20多年来,潮流算法的研究仍然非常活跃,但是大多数研究都是围绕改进牛顿法和p-q分解法进行的。此外,随着人工智能理论的发展,遗传算法、人工神经网络、模糊算法也逐渐被引入潮流计算。但是,到目前为止这些新的模型和算法还不能取代牛顿法和p-q分解法的地位。由于电力系统规模的不断扩大,对计算速度的要求不断提高,计算机的并行计算技术也将在潮流计算中得到广泛的应用,成为重要的研究领域。
'<<“''电力系统潮流计算程序设计
姓名:韦应顺
学号:2011021052 电力工程学院
牛顿—拉夫逊潮流计算方法具有能够将非线性方程线性化的特点,而使用matlab语言是由于matlab语言的数学逻辑强,易编译。
【】【】程序12
function tisco %这是一个电力系统潮流计算的程序 n=input(‘n请输入节点数:n=’); m=input(‘请输入支路数:m=’);ph=input(‘n请输入平衡母线的节点号:ph=’); b1=input(‘n请输入支路信号:b1=’);%它以矩阵形式存贮支路的情况,每行存贮一条支路 %第一列存贮支路的一个端点 %第二列存贮支路的另一个端点 %第三列存贮支路阻抗
%第四列存贮支路的对地导纳
%第五列存贮变压器的变比,注意支路为1 %第六列存贮支路的序号
b2=input(‘n请输入节点信息:b2=’); %第一列为电源侧的功率 %第二列为负荷侧的功率 %第三列为该点的电压值
%第四列为该点的类型:1为pq,2为pv节点,3为平衡节点 a=input(‘n请输入节点号及对地阻抗:a=’); ip=input(‘n请输入修正值:ip=’); %ip为修正值);y=zeros(n);
y(p,q)=y(p,q)-1./(b1(i3)*b1(i5);e=zeros(1,n);
y(p,q)=y(p,q);f=zeros(1,n);
no=2*ph=1; y(q,q)=y(q,q)+1./b1(i3)+b1(i4)/2;
end for i=1:n
g=real(y);if a(i2)=0
b=imag(y);p=a(i1);
y(p p)=1./a(i2);for i=1:n end e(i)=real(b2(i3));end f(i)=imag(b2(i3));for i=1:m s(i)=b2(i1)-b2(i2);p=b1(i1);v(i)=b2(i3);p=b1(i2);end y(p,p)=y(p,p)+1./(b1(i3)*b1(i5)^2+b1(i4)./2p=real(s);q=imag(s);[c,d,df]=xxf(g,b,e,f,p,q,n,b2,ph,v,no);j=jacci(y,g,b,p,q,e,f,v,c,d,b2,n,ph,no);[de,di]=hxf(j,d,f,ph,n,no);t=0;while
max(abs(de))>ip&max(abs(dfi)>ip
t=t+1;
e=e+de;
f=f+df;
[c,d,df]=xxf(g,b,e,f,p,q,n,b2,ph,v,no);
j=jacci(y,g,b,p,q,e,f,v,c,d,b2,n,ph,no);
[de,df]=hxf(j,df,ph,n,no);end v=e+f*j;for i=1:n hh(i)=conj(y(ph,i)*v(i));end s(ph)=sum(hh)*v(ph);b2(ph,1)=s(ph);v=abs(v);
jd=angle(v)*180/p;resulte1=[a(:,1),real(v),imag(v),v,jd,real(s’),imag(s’),real(b2(:1)),imag(b2(:1)),real(b2(:2)),imag(b2(:,2))];for i=1:m
a(i)=conj((v(b1(i1))/b1(i5)-v(b1(i2))/b1(i3));
b(i)=v(b1(i1))*a(i)-j*b1(i4)*v(b1(i))^2/2;
c(i)=-v(b1(i2))*a(i)-j*b1(i4)*v(b1(i2))^2/2;end result2=[b1(:,6),b1(:,1),b1(:,2),real(b’),imag(b’),real(c’),imag(c’), real(b’+c’),imag(b’+c’)];printcut(result1,s,b,c,result2);type resultm function [c,d,df]=xxf(g,b,e,f,p,q,n,b2,ph,v,no)%该子程序是用来求取df for i=1:n
if
i=ph
c(i)=0;
d(i)=0;
for j=i:n
c(i)=c(i)+g(i,j)*e(j)-b(i,j)*f(j);d(i)=d(i)+g(i,j)*f(j)+b(i,j)*e(j);end
p1=c(i)*e(i)+d(i)*f(i);q1=c(i)*f(i)-d(i)*e(i);v1=e(i)^2+f(i)^2;if
b2(i4)=2 p=2*i-1;
df(p)=p(i)-p1;p=p+1;else p=2*i-1;
df(p)=p(i)-p1;p=p+1;
df(p)=q(i)-q1;end end end df=df’;if ph=n df(no=[];end
function [de,df]=hxf(j,df,ph,n,no)%该子函数是为求取de df dx=jdf;dx1=dx;
x1=length(dx1);if ph=n dx(no)=0;dx(no+1)=0;
for i=(no+2):(x1+2)dx(i)=dx1(i-2);end else
dx=[dx1,0,0];end k=0;
[x,y]=size(dx);for i=1:2:x k=k+1;
df(k)=dx(i);de(k)=dx(i+1);end end case 2 function for j=1:n j=jacci(y,g,b,pq,e,f,v,c,d,b2,n,ph,no)x1=g(i,j)*f(i)-b(i,j)*e(i);
x2=g(i,j)*e(i)+b(i,j)*f(i);%该子程序是用来求取jacci矩阵
for i=1:n x3=0;switch b2(i4)x4=0;case 3 p=2*i-1;continue q=2*j-1;case 1 j(p,q)=x1;for j=1:n m=p+1;if
j=&j=ph j(m,q)=x3;x1=g(i)*f(i)-b(i,j)*e(i);q=q+1;x2=g(i,j)*e(i)+b(i,j)*f(i);j(p,q)=x2;x3=-x2;j(m,q)=x4;x4=x1;x1=d(i)+g(i,j)*f(i)-b(i,j)*e(i);p=2*i-1;x2=c(i)+g(i,j)*e(i)+b(i,j)*f(i);q=2*j-1;x3=0;j(p,q)=x1;x4=0;m=p+1;p=2*i-1;j(p,q)=x2;q=2*j-1;j(m,q)=x4;j(p,q)=x1;else if j=&j=jph m=p+1;x1=d(i)+g(i,j)*f(i)-b(i,j)*e(i);j(m,q)=x3;x2=c(i)+g(i,j)*e(i)+b(i,j)*f(i);q=q+1;x3= c(i)+g(i,j)*e(i)-b(i,j)*f(i);j(p,q)=x2;x4= c(i)+g(i,j)*f(i)-b(i,j)*e(i);j(m,q)=x4;p=2*i-1;end q=2*j-1;end j(p,q)=x1;end m=p+1;end j(m,q)=x3;if ph=n q=q+1;j(no:)=[];j(p,q)=x2;j(no:)=[];j(m,q)=x4;j(:,no)=[];end j(:,no)=[];end
2实例验证 【例题】设有一系统网络结线见图1,各支路阻抗和各节点功率均已以标幺值标示于图1中,其中节点2连接的是发电厂,设节点1电压保持u1=1.06定值,试计算其中的潮流分布,请输入节点数:n=5 请输入支路数:m=7 请输入平衡母线的节点号:ph=l 请输入支路信息:
bi=[ l 2 0.02+0.06i o l 1;1 3 0.08+0.24i 0 1 2;2 3 0.06+0.18i 0 l 3: 2 4 0.06+0.18i o l 4: 2 5 0.04+0.12i 0 l 5: 3 4 0.01+0.03i 0 l 6: 4 5 0.08+0.24i o 1 7] 请输入节点信息:
b2=[ 0 0 1.06 3;0.2+0.20i 0 1 1;一o.45一o.15i 0 l l;一0.4-0.05i 0 l 1;一0.6—0.1i 0 1 l] 请输入节点号及对地阻抗: a=[l 0;2 0;3 0;4 0;5 o ] 请输入修正值:ip=0.000 0l
参考文献
[1]陈珩.电力系统稳定分析[m].北京:中国电力出版社,2002:139—187.
[2]郑阿奇.matlab实用教程[m].北京:电子工业出版社,2005:1-243.
[3] 束洪春,孙士云,等.云电送粤交商流混联系统全过 程动态电压研究[j】.中国电力,2008,4l(10):l-4. shu hong—ch吼,sun shi-yun,et a1.research on fun prc'cess dyn锄ic voltage stabil时of hybrid ac/dc power tmnsmission system舶m yu衄an province to g啪gdong province【j】.electric power,2008,4l(10): l-4.
[4] 朱新立,汤涌,等.大电网安全分析的全过程动态仿 真技术[j】.电网技术,2008,32(22):23—28. song xin—ii,tang yof唱,et a1. full dyn锄ic simulation for the stabilhy a眦lysis of large power system【j】.power system融ilriolo影,2008,32(22): 23.28.
[5]roytelm锄i,shallidehpour s m.a comprehcnsivc long teml dynaiilic simulation for powcr system recovery【j】. ieee transactions 0n power systems,1994,9(3). [6] 石雩梅,汪志宏,等.发电机励磁系统数学模型及参 数对电网动态稳定性分析结果影响的研究[j】.继电 器,2007,35(21):22-27.
shi xue.mei,wang zlli-hon舀et a1.iksearch on the innuence of g锄e翰to璐bascd ∞de诅iled excitation system models柚d parameters t0 power铲id dyn锄ic stabil时【j】.relay,2007,35(2 1):22-27.
[7] 方思立,朱方.快速励磁系统对系统稳定的影响[j】.中 国电机工程学报,1986,6(1):20.28.
fang si.1i,zhu fang.the effbct of f弧t.respon∞
excitation system on the stability of power netwofk【j】. proceedings ofthe csee,1986,6(1):20-28.
[8] 刘取.电力系统稳定性及发电机励磁控制[m】.北京: 中国电力出版社,2007.
liu qu.power system s诅bility锄d generator excitation control【m】.beuing:chiila electric powef press,2007. [9] dallachy j l,anderson t.experience with rcplacing ro诅ting exciters wim static exciters【j】.1k institution of electrical engineers,1 996.
[10] 陈利芳,陈天禄.浅谈自并励励磁系统在大容量机组 中的应用【j】.继电器,2007,35(1):8l培4. chen li-f抽岛chen tian—lil application of 辩l仁exci组tion mode in large capacity髫memtor unit【j】. reiay'2007,35(1):81-84.
[11] 方思立,刘增煌,孟庆和.大型汽轮发电机自并励励 磁系统的应用条件【j].中国电力,1994,27(12):61.63. fang si.ii,liu zeng-hu锄g,meng qin争hc.m application conditions of large turbine generator self-excitation system【j】.electric powef,1994,27(12): 61.63.
[12]梁小冰,黄方能.利用emtdc进行长持续时间过程 的仿真研究【j】.电网技术,2002,26(9):55.57. liang xiao-bing,huang fan争眦ng.how to cany out simulalion of long dul‘ation processes by use of emtdc【j】.power system 11echnology,2002,26(9): 55-57.
[13]王卉,陈楷,彭哲,等.数字仿真技术在电力系统中 的应用及常用的几种数字仿真工具【j】.继电器,2004,32(21):7l一75.
wang hui,chen kai,peng zhe,et a1.application of digital simulation眦hniques棚d severaj simulation tools in power system[j】.relay,2004,32(21):71·75.
[14]ieee power engmeering socie哆.ieee std 421.5.2005 ieee玎ccommended practice for excitation system models for power system stabii时studies【s】.
电力系统潮流计算c语言程序,两行,大家可以看看,仔细研究,然后在这个基础上修改。谢谢
#include “stdafx.h” #include #include“complex.h” #include“wanjing.h” #include“gauss.h” using namespace std; int _tmain(int argc, _tchar* argv[]){ int i; //i作为整个程序的循环变量 int n=bus::scanfbusno();//输入节点个数 int l=line::scanflineno();//输入支路个数 if((l&&n)==0){return 0;} //如果找不到两个文件中的任意一个,退出 line *line=new line[l];//动态分配支路结构体 line::scanflinedata(line);//输入支路参数 line::printflinedata(line,l);//输出支路参数 bus *bus=new bus[n];//动态分配结点结构体 for(int i=0;i bus[i].=0; bus[i].=0;} bus::scanfbusdata(bus);//输入节点参数 bus::printfbusdata(bus,n);//输出结点参数 complex **x;x=new complex *[n];for(i=0;i bus::jisuannodednz(x,line,bus,l,n);//计算节点导纳矩阵 bus::printfnodednz(x,n);//输出节点导纳矩阵 int nn=(n-1)*2;double **jacaug;jacaug=new double *[nn];for(i=0;i double *x;x=new double[nn];int count=1; loop: bus::jisuannodei(x,bus,n);//计算节点注入电流 bus::jisuannodescal(x,bus,n);//计算节点功率 bus::jisuannodescal(x,bus,n);//计算节点功率 bus::jisuannodesdelta(bus,n);//计算节点功率差值 bus::printfnodescal(x,bus,n);//输出节点功率差值 int icon=wehcon1(bus,n);//whether converbence看迭代是否结束 if(icon==1){ cout<<“icon=”< bus::jisuanjacaug(jacaug,x,bus,n);//计算雅可比增广矩阵 // bus::printfjacaug(jacaug,n); gauss::gauss_slove(jacaug,x,nn);//解方程组求出电压差值 bus::revisenodev(bus,x,n);//修正节点电压 // bus::printfnodev(bus,n); count++; goto loop;} else { for(i=0;i { int statemp,endtemp; complex aa,bb,cc,dd,b; =0; =-line[i].b; statemp=line[i].start; endtemp=line[i].end; aa=complex::productcomplex(complex::getconj(bus[statemp-1].v), b); bb=complex::subcomplex (complex::getconj(bus[statemp-1].v), complex::getconj(bus[endtemp-1].v)); cc=complex::productcomplex(bb , complex::getconj(line[i].y)); dd=complex::caddc(aa,cc); line[i].stoe=complex::productcomplex(bus[statemp-1].v,dd); aa=complex::productcomplex(complex::getconj(bus[endtemp-1].v), b); bb=complex::subcomplex (complex::getconj(bus[endtemp-1].v), complex::getconj(bus[statemp-1].v)); cc=complex::productcomplex(bb , complex::getconj(line[i].y)); dd=complex::caddc(aa,cc); line[i].etos=complex::productcomplex(bus[endtemp-1].v,dd); } cout<<“icon=”< bus::jisuannodescal(x,bus,n);//计算节点功率 for(i=0;i { bus[i]. = bus[i]. + bus[i].;//发电机功率=注入功率+负荷功率 bus[i].= bus[i].+ bus[i].; bus[i].v=complex::rec2polar(bus[i].v); } cout<<“====节点电压===============发电机发出功率======”< for(i=0;i { cout<<“节点”<<(i+1)<<'t'; complex::printfcomplex(bus[i].v); coutt(bus[i].); coutt(bus[i].); cout< } cout<<“======线路传输功率==========”< for(i=0;i { int statemp,endtemp; statemp=line[i].start; endtemp=line[i].end; cout< complex::printfcomplex(complex::comdivrea(line[i].stoe,0.01)); complex::printfcomplex(complex::comdivrea(line[i].etos,0.01)); cout< } } return 0;} #include “stdafx.h” #include #include“complex.h” #include“wanjing.h” #include“gauss.h” using namespace std; int _tmain(int argc, _tchar* argv[]){ int i; //i作为整个程序的循环变量 int n=bus::scanfbusno();//输入节点个数 int l=line::scanflineno();//输入支路个数 if((l&&n)==0){return 0;} //如果找不到两个文件中的任意一个,退出 line *line=new line[l];//动态分配支路结构体 line::scanflinedata(line);//输入支路参数 line::printflinedata(line,l);//输出支路参数 bus *bus=new bus[n];//动态分配结点结构体 for(int i=0;i bus[i].=0; bus[i].=0;} bus::scanfbusdata(bus);//输入节点参数 bus::printfbusdata(bus,n);//输出结点参数 complex **x;x=new complex *[n];for(i=0;i bus::jisuannodednz(x,line,bus,l,n);//计算节点导纳矩阵 bus::printfnodednz(x,n);//输出节点导纳矩阵 int nn=(n-1)*2;double **jacaug;jacaug=new double *[nn];for(i=0;i double *x;x=new double[nn];int count=1; loop: bus::jisuannodei(x,bus,n);//计算节点注入电流 bus::jisuannodescal(x,bus,n);//计算节点功率 bus::jisuannodescal(x,bus,n);//计算节点功率 bus::jisuannodesdelta(bus,n);//计算节点功率差值 bus::printfnodescal(x,bus,n);//输出节点功率差值 int icon=wehcon1(bus,n);//whether converbence看迭代是否结束 if(icon==1){ cout<<“icon=”< bus::jisuanjacaug(jacaug,x,bus,n);//计算雅可比增广矩阵 // bus::printfjacaug(jacaug,n); gauss::gauss_slove(jacaug,x,nn);//解方程组求出电压差值 bus::revisenodev(bus,x,n);//修正节点电压 // bus::printfnodev(bus,n); count++; goto loop;} else { for(i=0;i { int statemp,endtemp; complex aa,bb,cc,dd,b; =0; =-line[i].b; statemp=line[i].start; endtemp=line[i].end; aa=complex::productcomplex(complex::getconj(bus[statemp-1].v), b); bb=complex::subcomplex (complex::getconj(bus[statemp-1].v), complex::getconj(bus[endtemp-1].v)); cc=complex::productcomplex(bb , complex::getconj(line[i].y)); dd=complex::caddc(aa,cc); line[i].stoe=complex::productcomplex(bus[statemp-1].v,dd); aa=complex::productcomplex(complex::getconj(bus[endtemp-1].v), b); bb=complex::subcomplex (complex::getconj(bus[endtemp-1].v), complex::getconj(bus[statemp-1].v)); cc=complex::productcomplex(bb , complex::getconj(line[i].y)); dd=complex::caddc(aa,cc); line[i].etos=complex::productcomplex(bus[endtemp-1].v,dd); } cout<<“icon=”< bus::jisuannodescal(x,bus,n);//计算节点功率 for(i=0;i { bus[i]. = bus[i]. + bus[i].;//发电机功率=注入功率+负荷功率 bus[i].= bus[i].+ bus[i].; bus[i].v=complex::rec2polar(bus[i].v); } cout<<“====节点电压===============发电机发出功率======”< for(i=0;i { cout<<“节点”<<(i+1)<<'t'; complex::printfcomplex(bus[i].v); coutt(bus[i].); coutt(bus[i].); cout< } cout<<“======线路传输功率==========”< for(i=0;i { int statemp,endtemp; statemp=line[i].start; endtemp=line[i].end; cout< complex::printfcomplex(complex::comdivrea(line[i].stoe,0.01)); complex::printfcomplex(complex::comdivrea(line[i].etos,0.01)); cout< } } return 0;} #include
电力系统潮流分析报告(5篇)
文件夹