华北电力大学潮流计算上机实验

华北电力大学潮流计算上机实验
华北电力大学潮流计算上机实验

院系:电气与电子工程学院

班级:电气1006

学号

学生姓名:

指导教师:孙英云

设计周数:两周

成绩:

日期:2013 年1 月10 日

一、 目的与要求

培养学生的电力系统潮流计算机编程能力,掌握计算机潮流计算的相关知识

二、 主要内容

1. 手算.要求应用牛顿-拉夫逊法或P-Q 分解法手算求解,要求精度为0.001MW 。节点1

为平衡节点,电压?∠=00.11

U ,节点2为PQ 节点,负荷功率6.08.0~

2j S +=,节点3是PV 节点,1.1,4.033==U P ,两条支路分别为

04.001.013j Z +=,

2.005.012j Z +=,对地支路3

3.030j y =。

2. 计算机计算(详见附录)

3. 思考题

3.1潮流计算的方法有哪些?各有何特点?

答:潮流计算分为手算和机算两大类,其中机算又有高斯-赛德尔迭代法、牛顿-拉夫逊迭代法、P-Q 分解法等算法。 迭特点:

手算求解潮流一般只用在简单的网络中,其计算量大,对于多节点的网络用手算一般难以解决问题,但通过手算可以加深物理概念的理解,还可以在运用计算机计算前以手算求取某些原始数据。

高斯-赛德尔迭代法:算法简单,对初值的要求不高,但需要迭代的次数多,收敛的速度慢,在早期的潮流计算程序中应用很多,之后逐渐被牛顿-拉夫逊迭代法所取代,但仍可作为计算程序前几次迭代的算法,以弥补后者对初值要求高的缺点。

牛顿-拉夫逊迭代法:是常用的解非线性方程组的方法,也是当前广泛采用的计算潮流的方法,其收敛速度快,几次迭代就可以得到最终的结果。但其缺点是要求初值的选择得比较接近它们的精确值,否则迭代过程可能不收敛。

P-Q 分解法潮流计算:派生于以极坐标表示时的牛顿-拉夫逊法,其根据电力系统的特点,对后者的修正方程做了简化,P-Q 分解法的系数矩阵B ’和B ”代替了牛拉法中的雅可比矩阵J ,阶数降低,其中的元素在迭代过程中不发生变化,而且元素对称,这些都大大提高了运算速度,而且精确度几乎不受影响。

P-Q 分解法的收敛特性接近于直线,而牛顿-拉夫逊的收敛速度要比P-Q 分解法快, 但是由于牛顿-拉夫逊每次迭代都要形成雅客比矩阵,所以一次代的时间比P-Q 分解法长。

3.2如果交给你一个任务,请你用已有的潮流计算软件计算北京城市电网的潮

流,你应该做哪些工作?(收集哪些数据,如何整理,计算结果如何分析 答:

(1)所需要收集的数据:

A.电网中所有节点的数据:

a.各节点的类型,包括平衡节点、PV 节点、PQ 节点;b. 对于平衡节点要了解节点的电压大小相位、及节点所能提供的最大最小有功无功功率;c. PV节点要知道节点电压大小注入有功功率及节点所能提供的最大和最小无功功.率;d. PQ节点要知道节点的注入有功和无功功率

B.电网中所有支路的数据:

a.各支路类型,即是否含有变压器;

b.各支路的电阻、电感、电纳;

c.各变压器的变比。(2)数据整理:将上述数据资料进行分类整理,并为每个节点及支路编上编号。将整理的结果写成本实验中所要求的格式(原始数据的 txt 文档),再用本实验所编制的程序进行求解,得到各节点电压、相位,各线路传输功率、损耗,平衡节点注入功率等数值。(3)计算结果分析:可以大致了解整个电网的运行状况并按照电力系统知识依次进行所需的调整。如调节各节点电压的大小以防止超出规定限度,调整各线路的有功无功分布状况分析整个系统的网损是否达到标准等。

3.3设计中遇到的问题和解决的办法。

1)设计中遇到是对C++部分指令的不熟悉,通过老师讲解、看书和向他人询问减小了编程语言上的障碍;

2)在设计中,由于一开始知识脉络以及思维脉络都不是很清晰,导致在程序设计过程中的各种误操作,例如在写不平衡量的时候对定义数组的下脚标标注不清。最好经过老师的教导和我们自己的仔细排查,终于排除掉各类错误,得到结果。

在形成雅克比矩阵的过程中,存在雅克比矩阵的坐标与节点的坐标对应和转化的问题。

附录(设计流程图、程序、表格、数据等)一、流程图

二、程序

/*

Purpose: for undergraduate power flow calculation course Example2

Author: Sun Yingyun

Date: 9-Jun-2010

Version: 1.0.0

This class is to help the students to solve pf problems. */

#include"pf.h"

using namespace std;

pf::pf(void)

{

m_Line = NULL;

m_Bus = NULL;

m_Bus_newIdx = NULL;

m_pv_Num = 0;

m_sw_Num = 0;

m_pq_Num = 0;

}

pf::~pf(void)

{

if (m_Line!=NULL) delete [] m_Line;

if (m_Bus!=NULL) delete [] m_Bus;

if (m_Bus_newIdx!=NULL) delete[] m_Bus_newIdx;

int pf::readDataFromFile(string fileName)

{

string strLine,strTemp;

ifstream fin;

// open file for read;

fin.open(fileName.c_str());

if(!fin.fail())

{

// 1. read SBase;

getline(fin,strLine);

strTemp.assign(strLine,31,6);

m_SBase = atof(strTemp.c_str());

// 2. read Bus Data here ;

// 2.1 read Bus num;

getline(fin,strLine);

size_t pos_begin, pos_end;

pos_begin = strLine.find("FOLLOWS");

pos_begin = pos_begin + size_t(10);

pos_end = strLine.find("ITEM");

strTemp = strLine.substr(pos_begin, pos_end - pos_begin);

m_Bus_Num = atoi(strTemp.c_str());//读入节点个数

cout<<"系统共有"<

cout<<"Type"<

<<"LoadP"<

<<"GenP"<

<

// 2.2 read each bus data here

// allocate memory for m_Bus(为节点数据定义数组)

m_Bus = new Bus[m_Bus_Num]; //建立结构体保存节点数据

m_Bus_newIdx = new int[m_Bus_Num];

for (int i = 0; i

{

getline(fin,strLine);

strTemp = strLine.substr(0,4);

// read bus num

m_Bus[i].Num = atoi(strTemp.c_str());

// read bus Name;

strTemp = strLine.substr(5,7);

m_Bus[i].Name = strTemp;

// read bus type PQ: Type = 1; PV: Type = 2; swing: Type = 3;

strTemp = strLine.substr(24,2);

if (atoi(strTemp.c_str())<=1)

{

m_Bus[i].Type = 1;

m_pq_Num ++;

}

else if(atoi(strTemp.c_str())==2)

{

m_Bus[i].Type = 2;

m_pv_Num ++;

}

else if(atoi(strTemp.c_str())==3)

{

m_Bus[i].Type = 3;

m_sw_Num ++;

}

strTemp = strLine.substr(27,6);

m_Bus[i].V = atof(strTemp.c_str());//读入节点电压V

strTemp = strLine.substr(33,6);

m_Bus[i].theta = atof(strTemp.c_str());//读入节点相角

strTemp = strLine.substr(39,9);

m_Bus[i].LoadP = atof(strTemp.c_str());//读入节点有功负荷

strTemp = strLine.substr(49,10);

m_Bus[i].LoadQ = atof(strTemp.c_str());//读入节点无功负荷

strTemp = strLine.substr(59,8);

m_Bus[i].GenP = atof(strTemp.c_str());//读入节点电压V

strTemp = strLine.substr(67,8);

m_Bus[i].GenQ= atof(strTemp.c_str());//读入节点电压V

strTemp = strLine.substr(114,8);

m_Bus[i].ShuntB = atof(strTemp.c_str());//input into ShuntB in system strTemp = strLine.substr(106,8);

m_Bus[i].ShuntG = atof(strTemp.c_str());//input into ShuntG in system

cout<

<

<

}

// 3. read Line Data here ;

// 3.1 read Line num;

getline(fin,strLine);

getline(fin,strLine);

pos_begin = strLine.find("FOLLOWS");

pos_begin = pos_begin + size_t(10);

pos_end = strLine.find("ITEM");

strTemp = strLine.substr(pos_begin, pos_end - pos_begin);

m_Line_Num = atoi(strTemp.c_str());

m_Line = new Line[m_Line_Num];

for (int i = 0; i

{

getline(fin,strLine);

strTemp = strLine.substr(0,4);

m_Line[i].NumI = atoi(strTemp.c_str());

strTemp = strLine.substr(5,4);

m_Line[i].NumJ = atoi(strTemp.c_str());// read line

strTemp = strLine.substr(19,10);

m_Line[i].R= atof(strTemp.c_str());// read bus R;

strTemp = strLine.substr(29,10);

m_Line[i].X= atof(strTemp.c_str());// read bus X;

strTemp = strLine.substr(40,11);

m_Line[i].B= atof(strTemp.c_str());// read bus B;

m_Line[i].K=1; // read bus K;

strTemp = strLine.substr(18,1);

m_Line[i].Type= atoi(strTemp.c_str());// read bus Type

}

// 4. close the file;

fin.close();

}

else

cout<<"file open fail!"<

return 0;

}

//重新编号pq、pv、sw

int pf::initPFData()

{

// according to Page 132 of ref book 3,

// reindex the bus num ase the sequence [PQ PV SW];

int iPQ,iPV,iSW;

iPQ = 0;

iPV = 0;

iSW = 0;

int i;

for( i = 0; i

{

switch (m_Bus[i].Type)

{

case 1:

m_Bus_newIdx[i] = iPQ;

iPQ++;

break;

case 2:

m_Bus_newIdx[i] = iPV + m_pq_Num;

iPV++;

break;

case 3:

m_Bus_newIdx[i] = iSW + m_pq_Num + m_pv_Num;

iSW++;

break;

}

}

for (i =0; i

cout<

//分别给出jacobi矩阵和B\G矩阵的空间

m_Jacobi.setSize(2*m_pq_Num+m_pv_Num,2*m_pq_Num+m_pv_Num);

m_Matrix_B.setSize( m_Bus_Num,m_Bus_Num);

m_Matrix_G.setSize(m_Bus_Num,m_Bus_Num);

return 0;

}

//????

int pf::getBusIdx(int busNum)

{

// return the index of bus from busNum

int i,idx = -1;

for (i = 0; i

{

if (m_Bus[i].Num == busNum)

idx = i;

}

return idx;

}

//做jacobi矩阵

int pf::makeYMatrix()

{

//做导纳矩阵

int ii,jj;

double YG,YB;

double Z2;

for(int i=0;i

{

ii=m_Line[i].NumI-1;

jj=m_Line[i].NumJ-1;

Z2= m_Line[i].R*m_Line[i].R+ m_Line[i].X*m_Line[i].X;

YG=m_Line[i].R/Z2;

YB=-1*m_Line[i].X/Z2;

m_Matrix_G(ii,ii)+=YG;

m_Matrix_B(ii,ii)+=YB+m_Line[i].B/2;

m_Matrix_G(jj,jj)+=YG;

m_Matrix_B(jj,jj)+=YB+m_Line[i].B/2;

m_Matrix_G(ii,jj)-=YG;

m_Matrix_B(ii,jj)-=YB;

m_Matrix_G(jj,ii)-=YG;

m_Matrix_B(jj,ii)-=YB;

}

m_Matrix_B.outputMatrix();

m_Matrix_G.outputMatrix();

return 0;

}

//做jacobi矩阵

int pf::makeJacobi()

{

// TODO

int i,j,k=0,l=0,n=0,h;

struct Bus a[9];

int b[9];

for(i=0;i

{

if(m_Bus[i].Type==1)

{

a[k]=m_Bus[i];

b[k]=i;

k++;

}

if(m_Bus[i].Type==2)

{

a[l+m_pq_Num]=m_Bus[i];

b[l+m_pq_Num]=i;

l++;

}

if(m_Bus[i].Type==3)

{

a[n+m_pq_Num+m_pv_Num]=m_Bus[i];

b[n+m_pq_Num+m_pv_Num]=i;

n++;

}

}

//计算jacobi矩阵中A区元素

for(i=0;i

{

for(j=0;j

{

if(i==j)

{

for(h=0;h

{

if(h!=i)

{

m_Jacobi(2*i,2*i)+=a[i].V*a[h].V*(m_Matrix_G(b[i],b[h])*sin(a[i].theta*3.14/180-a[h].th eta*3.14/180)-m_Matrix_B(b[i],b[h])*cos(a[i].theta*3.14/180-a[h].theta*3.14/180));

m_Jacobi(2*i,2*i+1)-=a[i].V*a[h].V*(m_Matrix_G(b[i],b[h])*cos(a[i].theta*3.14/180-a[h].theta *3.14/180)+m_Matrix_B(b[i],b[h])*sin(a[i].theta*3.14/180-a[h].theta*3.14/180));

m_Jacobi(2*i+1,2*i)-=a[i].V*a[h].V*(m_Matrix_G(b[i],b[h])*cos(a[i].theta*3.14/180-a[h].theta *3.14/180)+m_Matrix_B(b[i],b[h])*sin(a[i].theta*3.14/180-a[h].theta*3.14/180));

m_Jacobi(2*i+1,2*i+1)-=a[i].V*a[h].V*(m_Matrix_G(b[i],b[h])*sin(a[i].theta*3.14/180-a[h].the ta*3.14/180)-m_Matrix_B(b[i],b[h])*cos(a[i].theta*3.14/180-a[h].theta*3.14/180));

}

else

continue;

}

m_Jacobi(2*i,2*i+1)-=2*a[i].V*a[i].V*m_Matrix_G(b[i],b[i]);

m_Jacobi(2*i+1,2*i+1)+=2*a[i].V*a[i].V*m_Matrix_B(b[i],b[i]);

}

else

{

m_Jacobi(2*i,2*j)=-a[i].V*a[j].V*(m_Matrix_G(b[i],b[j])*sin(a[i].theta*3.14/180-a[j].th eta*3.14/180)-m_Matrix_B(b[i],b[j])*cos(a[i].theta*3.14/180-a[j].theta*3.14/180));

m_Jacobi(2*i,2*j+1)=-a[i].V*a[j].V*(m_Matrix_G(b[i],b[j])*cos(a[i].theta*3.14/180-a[j]. theta*3.14/180)+m_Matrix_B(b[i],b[j])*sin(a[i].theta*3.14/180-a[j].theta*3.14/180));

m_Jacobi(2*i+1,2*j)=a[i].V*a[j].V*(m_Matrix_G(b[i],b[j])*cos(a[i].theta*3.14/180-a[j].theta* 3.14/180)+m_Matrix_B(b[i],b[j])*sin(a[i].theta*3.14/180-a[j].theta*3.14/180));

m_Jacobi(2*i+1,2*j+1)=-a[i].V*a[j].V*(m_Matrix_G(b[i],b[j])*sin(a[i].theta*3.14/180-a[j ].theta*3.14/180)-m_Matrix_B(b[i],b[j])*cos(a[i].theta*3.14/180-a[j].theta*3.14/180));

}

}

}

//计算jacobi矩阵中B区的元素

for(i=k;i

{

for(j=k;j

{

if(i==j)

{

for(h=0;h

{

if(i!=h)

{

m_Jacobi(i+k,i+k)+=a[i].V*a[h].V*(m_Matrix_G(b[i],b[h])*sin(a[i].theta*3.14/180-a[h].th eta*3.14/180)-m_Matrix_B(b[i],b[h])*cos(a[i].theta*3.14/180-a[h].theta*3.14/180));

}

else

continue;

}

}

else

m_Jacobi(k+i,k+j)=-a[i].V*a[j].V*(m_Matrix_G(b[i],b[j])*sin(a[i].theta*3.14/180-a[j].th eta*3.14/180)-m_Matrix_B(b[i],b[j])*cos(a[i].theta*3.14/180-a[j].theta*3.14/180));

}

}

//计算jacobi矩阵中C区元素

for(i=0;i

{

for(j=k;j

{

m_Jacobi(2*i,k+j)=-a[i].V*a[j].V*(m_Matrix_G(b[i],b[j])*sin(a[i].theta*3.14/180-a[j].th eta*3.14/180)-m_Matrix_B(b[i],b[j])*cos(a[i].theta*3.14/180-a[j].theta*3.14/180));

m_Jacobi(2*i+1,k+j)=a[i].V*a[j].V*(m_Matrix_G(b[i],b[j])*cos(a[i].theta*3.14/180-a[j].t heta*3.14/180)+m_Matrix_B(b[i],b[j])*sin(a[i].theta*3.14/180-a[j].theta*3.14/180));

}

}

//计算jacobi矩阵中D区元素

for(i=k;i

{

for(j=0;j

{

m_Jacobi(k+i,2*j)=-a[i].V*a[j].V*(m_Matrix_G(b[i],b[j])*sin(a[i].theta*3.14/180-a[j].th eta*3.14/180)-m_Matrix_B(b[i],b[j])*cos(a[i].theta*3.14/180-a[j].theta*3.14/180));

m_Jacobi(k+i,2*j+1)=-a[i].V*a[j].V*(m_Matrix_G(b[i],b[j])*cos(a[i].theta*3.14/180-a[j]. theta*3.14/180)+m_Matrix_B(b[i],b[j])*sin(a[i].theta*3.14/180-a[j].theta*3.14/180));

}

}

m_Jacobi.outputMatrix();

return 0;

}

int pf::solveLF()

{

// TODO

int i;

// 1. initialize

for ( i = 0; i

{

if(m_Bus[i].Type==1)

{

m_Bus[i].V = 1;

m_Bus[i].theta = 0;

}

if(m_Bus[i].Type==2)

{

m_Bus[i].theta = 0;

}

}

// 2. iterate

double *bph=new double[2*m_pq_Num+m_pv_Num];

int maxIter = 20;

double epsilon=0.000001;

for(int iter=0;iter

{

int k=0,l=0;

// 2.1 calDeltaS

calcDeltaS(bph);

double error=0;

for(int k=0;k<2*m_pq_Num+m_pv_Num;k++)

{

error+=bph[k]*bph[k];

}

//cout<<"误差"<

if(error

{

//cout<

break;

}

this->makeJacobi();

// 2.2 calJacobi;

m_Jacobi.solve(2*m_pq_Num+m_pv_Num,bph);

for ( i = 0; i<2*m_pq_Num+m_pv_Num; i++)

{

for ( int j = 0; j<2*m_pq_Num+m_pv_Num;j++)

{

m_Jacobi(i,j)=0.0;

}

}

// 2.4 update variables

for ( i = 0; i

{

if(m_Bus[i].Type==1)

{

m_Bus[i].V -=bph[2*k+1]*m_Bus[i].V;

m_Bus[i].theta -= bph[2*k]*180/3.14;

k++;

}

if(m_Bus[i].Type==2)

{

m_Bus[i].theta -= bph[2*m_pq_Num+l]*180/3.14;

l++;

}

}

outputResult();

//cout<

}

// 3. output the result.

outputResult();

return 0;

}

int pf::calcDeltaS(double* bph)

{

// TODO

// calculate the active and reactive power equation and store the result to the double array bph

double deltaP,deltaQ;

double Ui,Uj;

double thetai,thetaj;

int k=0,l=0;

for(int i=0;i

{

Ui=m_Bus[i].V;

thetai=m_Bus[i].theta*3.14/180;

deltaP=(m_Bus[i].GenP-m_Bus[i].LoadP)/100;

deltaQ=(m_Bus[i].GenQ-m_Bus[i].LoadQ)/100;

for(int j=0;j

{

Uj=m_Bus[j].V;

thetaj=m_Bus[j].theta*3.14/180;

if(m_Bus[i].Type==1)

{

deltaP-=Ui*Uj*(m_Matrix_G(i,j)*cos(thetai-thetaj)+m_Matrix_B(i,j)*sin(thetai-thetaj));

deltaQ-=Ui*Uj*(m_Matrix_G(i,j)*sin(thetai-thetaj)-m_Matrix_B(i,j)*cos(thetai-thetaj));

}

if(m_Bus[i].Type==2)

{

deltaP-=Ui*Uj*(m_Matrix_G(i,j)*cos(thetai-thetaj)+m_Matrix_B(i,j)*sin(thetai-thetaj));

}

}

if(m_Bus[i].Type==1)

{

bph[k]=deltaP;

bph[++k]=deltaQ;

//cout<

//cout<

k++;

}

if(m_Bus[i].Type==2)

{

bph[l+2*m_pq_Num]=deltaP;

//cout<

l++;

}

}

for(k=0;k<2*m_pq_Num+m_pv_Num;k++)

cout<

return 0;

}

int pf::outputResult()

{

// TODO

for (int i = 0; i

switch (m_Bus[i].Type)

{

case 1:

cout<<"节点"<

cout<<"节点"<

break;

case 2:

cout<<"节点"<

break;

case 3:

break;

}

return 0;

}

三、表格

导纳矩阵G

0000000

0000000

0000000

000 3.30738-1.36519-1.942190

000-1.36519 2.552790-1.1876

000-1.942190 3.22420

0000-1.18760 2.80473

000000-1.61712

00000-1.282010

导纳矩阵B

-17.36110017.3611000 0-16000016

00-17.06480000

17.361100-39.308911.604110.51070

00011.6041-17.33820 5.97513

00010.51070-15.84090

01600 5.975130-35.4456

00000013.698

0017.064800 5.588240

第一次迭代

不平衡量

节点4有功2.22045E-16

节点4无功0.861444

节点5有功-1.25

节点5无功-0.259

节点6有功-0.9

节点6无功-0.042

节点7有功0

节点7无功0.6275

节点8有功-1

节点8无功-0.171

雅克比矩阵

-41.930 -3.543 12.130 1.063 11.154 1.766 0.000 -0.000 0.000 -0.000 0.000 -0.000 0.000 0.000 3.521 -42.030 -1.063 12.130 -1.766 11.154 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 12.046 1.781 -18.061 -1.308 0.000 -0.000 6.015 2.103 0.000 -0.000 0.000 -0.000 0.000 0.000 -1.781 12.046 3.884 -17.204 0.000 0.000 -2.103 6.015 0.000 0.000 0.000 0.000 0.000 0.000 11.048 2.336 -0.000 -0.000 -16.814 -2.426 0.000 -0.000 0.000 -0.000 5.766 1.978 0.000 0.000 -2.336 11.048 0.000 -0.000 4.314 -16.299 0.000 0.000 0.000 0.000 -1.978 5.766 0.000 0.000 -0.000 -0.000 6.362 0.358 -0.000 -0.000 -37.948 -3.060 14.658 0.931 -0.000 -0.000 16.927 0.000 0.000 -0.000 -0.358 6.362 0.000 -0.000 2.975 -38.323 -0.930 14.658 0.000 -0.000 -1.688 0.000 -0.000 -0.000 -0.000 -0.000 -0.000 -0.000 14.472 2.509 -24.887 -1.861 10.415 1.474 0.000 0.000 0.000 -0.000 0.000 -0.000 0.000 -0.000 -2.509 14.472 3.983 -24.236 -1.474 10.415 0.000 0.000 -0.000 -0.000 -0.000 -0.000 6.052 0.733 0.000 -0.000 10.472 0.992 -34.693 -2.663 0.000 18.169 0.000 -0.000 0.000 -0.000 -0.733 6.052 0.000 0.000 -0.992 10.472 2.609 -34.858 0.000 -0.884 -0.000 -0.000 -0.000 -0.000 -0.000 -0.000 16.927 -1.688 -0.000 -0.000 -0.000 -0.000 -16.927 -0.000节点2的相角0.172632

节点3的相角0.0907544

节点4的相角-0.0371077

节点4的幅值1.03342

节点5的相角-0.0668222

节点5的幅值1.00845

节点6的相角-0.0627586

节点6的幅值1.02235

节点7的相角0.0732415

节点7的幅值1.03724

节点8的相角0.0190912

节点8的幅值1.02664

节点9的相角0.0421593

节点9的幅值1.03997

第二次迭代

雅克比矩阵

-41.930 -3.543 12.130 1.063 11.154 1.766 0.000 -0.000 0.000 -0.000 0.000 -0.000 0.000 0.000 3.521 -42.030 -1.063 12.130 -1.766 11.154 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 12.046 1.781 -18.061 -1.308 0.000 -0.000 6.015 2.103 0.000 -0.000 0.000 -0.000 0.000 0.000 -1.781 12.046 3.884 -17.204 0.000 0.000 -2.103 6.015 0.000 0.000 0.000 0.000 0.000 0.000 11.048 2.336 -0.000 -0.000 -16.814 -2.426 0.000 -0.000 0.000 -0.000 5.766 1.978 0.000 0.000 -2.336 11.048 0.000 -0.000 4.314 -16.299 0.000 0.000 0.000 0.000 -1.978 5.766 0.000 0.000 -0.000 -0.000 6.362 0.358 -0.000 -0.000 -37.948 -3.060 14.658 0.931 -0.000 -0.000 16.927 0.000 0.000 -0.000 -0.358 6.362 0.000 -0.000 2.975 -38.323 -0.930 14.658 0.000 -0.000 -1.688 0.000 -0.000 -0.000 -0.000 -0.000 -0.000 -0.000 14.472 2.509 -24.887 -1.861 10.415 1.474 0.000 0.000 0.000 -0.000 0.000 -0.000 0.000 -0.000 -2.509 14.472 3.983 -24.236 -1.474 10.415 0.000 0.000 -0.000 -0.000 -0.000 -0.000 6.052 0.733 0.000 -0.000 10.472 0.992 -34.693 -2.663 0.000 18.169 0.000 -0.000 0.000 -0.000 -0.733 6.052 0.000 0.000 -0.992 10.472 2.609 -34.858 0.000 -0.884节点2的相角0.162138

节点3的相角0.0815663

节点4的相角-0.0386656

节点4的幅值1.02588

节点5的相角-0.0695638

节点5的幅值0.995802

节点6的相角-0.0643198

节点6的幅值1.01277

节点7的相角0.0650806

节点7的幅值1.02591

节点8的相角0.0128221

节点8的幅值1.01601

节点9的相角0.0344697

节点9的幅值1.03244

第三次次迭代

雅克比矩阵

《计算方法》课内实验报告

《计算方法》实验报告 姓名: 班级: 学号: 实验日期: 2011年10月26日

一、实验题目: 数值积分 二、实验目的: 1.熟悉matlab 编写及运行数值计算程序的方法。 2.进一步理解数值积分的基础理论。 3.进一步掌握应用不同的数值积分方法求解给定的积分并给出数据结果及误差分析。 三、实验内容: 1.分别用复合梯形求积公式及复合辛普森求积公式计算积分xdx x ln 10 ? , 要求计算精度达到410-,给出计算结果并比较两种方法的计算节点数. 2.用龙贝格求积方法计算积分dx x x ?+3 021,使误差不超过510-. 3.用3=n 的高斯-勒让德公式计算积分?3 1 sin x e x ,给出计算结果. 4.用辛普森公式(取2==M N ) 计算二重积分.5 .00 5 .00 dydx e x y ? ? - 四、实验结果: 1.(1)复合梯形法: 将区间[a,b]划分为n 等份,分点n k n a b h kh a x k ,2,1,0,,=-=+=在每个区间[1,+k k x x ](k=0,1,2,···n-1)上采用梯形公式,则得 )()]()([2)()(1 11 1 f R x f x f h dx x f dx x f I n n k k k b a n k x x k k ++===∑?∑? -=+-=+ 故)]()(2)([21 1 b f x f a f h T n k k n ++=∑-=称为复合梯形公式 计算步长和划分的区间 Eps=1E-4 h1=sqrt(Eps/abs(-(1-0)/12*1/(2+1))) h1 =0.0600 N1=ceil(1/h1) N1 =17 用复合梯形需要计算17个结点。 复合梯形: function T=trap(f,a,b,n) h=(b-a)/n;

matlab电力系统潮流计算

华中科技大学 信息工程学院课程设计报告书题目: 电力系统潮流计算 专业:电气工程及其自动化 班级: 学号: 学生姓名: 指导教师: 2015年 11 月 10 日

2015年11月12日

信息工程学院课程设计成绩评定表

摘要 电力系统稳态分析包括潮流计算和静态安全分析。本文主要运用的事潮流计算,潮流计算是电力网络设计与运行中最基本的运算,对电力网络的各种设计方案及各种运行方式进行潮流计算,可以得到各种电网各节点的电压,并求得网络的潮流及网络中的各元件的电力损耗,进而求得电能损耗。本位就是运用潮流计算具体分析,并有MATLAB仿真。 关键词:电力系统潮流计算 MATLAB仿真

Abstract Electric power system steady flow calculation and analysis of the static safety analysis. This paper, by means of the calculation, flow calculation is the trend of the power network design and operation of the most basic operations of electric power network, various design scheme and the operation ways to tide computation, can get all kinds of each node of the power grid voltage and seek the trend of the network and the network of the components of the power loss, and getting electric power. The standard is to use the power flow calculation and analysis, the specific have MATLAB simulation. Key words: Power system; Flow calculation; MATLAB simulation

计算方法上机实验报告

《计算方法》上机实验报告 班级:XXXXXX 小组成员:XXXXXXX XXXXXXX XXXXXXX XXXXXXX 任课教师:XXX 二〇一八年五月二十五日

前言 通过进行多次的上机实验,我们结合课本上的内容以及老师对我们的指导,能够较为熟练地掌握Newton 迭代法、Jacobi 迭代法、Gauss-Seidel 迭代法、Newton 插值法、Lagrange 插值法和Gauss 求积公式等六种算法的原理和使用方法,并参考课本例题进行了MATLAB 程序的编写。 以下为本次上机实验报告,按照实验内容共分为六部分。 实验一: 一、实验名称及题目: Newton 迭代法 例2.7(P38):应用Newton 迭代法求 在 附近的数值解 ,并使其满足 . 二、解题思路: 设'x 是0)(=x f 的根,选取0x 作为'x 初始近似值,过点())(,00x f x 做曲线)(x f y =的切线L ,L 的方程为))((')(000x x x f x f y -+=,求出L 与x 轴交点的横坐标) (') (0001x f x f x x - =,称1x 为'x 的一次近似值,过点))(,(11x f x 做曲线)(x f y =的切线,求该切线与x 轴的横坐标) (') (1112x f x f x x - =称2x 为'x

的二次近似值,重复以上过程,得'x 的近似值序列{}n x ,把 ) (') (1n n n n x f x f x x - =+称为'x 的1+n 次近似值,这种求解方法就是牛顿迭代法。 三、Matlab 程序代码: function newton_iteration(x0,tol) syms z %定义自变量 format long %定义精度 f=z*z*z-z-1; f1=diff(f);%求导 y=subs(f,z,x0); y1=subs(f1,z,x0);%向函数中代值 x1=x0-y/y1; k=1; while abs(x1-x0)>=tol x0=x1; y=subs(f,z,x0); y1=subs(f1,z,x0); x1=x0-y/y1;k=k+1; end x=double(x1) K 四、运行结果: 实验二:

电力系统潮流计算

信息工程学系 2011-2012学年度下学期电力系统分析课程设计 题目:电力系统潮流计算 专业:电气工程及其自动化 班级: 学号: 学生姓名: 指导教师:钟建伟

2012年3月10日信息工程学院课程设计任务书

目录 1 任务提出与方案论证 (4) 1.1潮流计算的定义、用途和意义 (4) 1.2 运用软件仿真计算 (5) 2 总体设计 (7) 2.1潮流计算设计原始数据 (7) 2.2总体电路设计 (8) 3 详细设计 (10) 3.1数据计算 (10) 3.2 软件仿真 (14) 4 总结 (24) 5参考文献 (25)

1任务提出与方案论证 1.1潮流计算的定义、用途和意义 1.1.1潮流计算的定义 潮流计算,指在给定电力系统网络拓扑、元件参数和发电、负荷参量条件下,计算有功功率、无功功率及电压在电力网中的分布。潮流计算是根据给定的电网结构、参数和发电机、负荷等元件的运行条件,确定电力系统各部分稳态运行状态参数的计算。通常给定的运行条件有系统中各电源和负荷点的功率、枢纽点电压、平衡点的电压和相位角。待求的运行状态参量包括电网各母线节点的电压幅值和相角,以及各支路的功率分布、网络的功率损耗等。 1.1.2潮流计算的用途 电力系统潮流计算是电力系统最基本的计算,也是最重要的计算。所谓潮流计算,就是已知电网的接线方式与参数及运行条件,计算电力系统稳态运行各母线电压、个支路电流与功率及网损。对于正在运行的电力系统,通过潮流计算可以判断电网母线电压、支路电流和功率是否越限,如果有越限,就应采取措施,调整运行方式。对于正在规划的电力系统,通过潮流计算,可以为选择电网供电方案和电气设备提供依据。潮流计算还可以为继电保护和自动装置定整计算、电力系统故障计算和稳定计算等提供原始数据。 潮流计算(load flow calculation)根据电力系统接线方式、参数和运行条件计算电力系统稳态运行状态下的电气量。通常给定的运行条件有电源和负荷节点的功率、枢纽点电压、平衡节点的电压和相位角。待求的运行状态量包括各节点电压及其相位角和各支路(元件)通过的电流(功率)、网络的功率损耗等。潮流计算分为离线计算和在线计算两种方式。离线计算主要用于系统规划设计和系统运行方式安排;在线计算用于运行中电力系统的监视和实时控制。 目前广泛应用的潮流计算方法都是基于节点电压法的,以节点导纳矩阵Y作为电力网络的数学模型。节点电压Ui和节点注入电流Ii 由节点电压方程(1)联系。在实际的电力

太原理工大学数值计算方法实验报告

本科实验报告 课程名称:计算机数值方法 实验项目:方程求根、线性方程组的直接解 法、线性方程组的迭代解法、代数插值和最 小二乘拟合多项式 实验地点:行勉楼 专业班级: ******** 学号: ********* 学生姓名: ******** 指导教师:李誌,崔冬华 2016年 4 月 8 日

y = x*x*x + 4 * x*x - 10; return y; } float Calculate(float a,float b) { c = (a + b) / 2; n++; if (GetY(c) == 0 || ((b - a) / 2) < 0.000005) { cout << c <<"为方程的解"<< endl; return 0; } if (GetY(a)*GetY(c) < 0) { return Calculate(a,c); } if (GetY(c)*GetY(b)< 0) { return Calculate(c,b); } } }; int main() { cout << "方程组为:f(x)=x^3+4x^2-10=0" << endl; float a, b; Text text; text.Getab(); a = text.a; b = text.b; text.Calculate(a, b); return 0; } 2.割线法: // 方程求根(割线法).cpp : 定义控制台应用程序的入口点。// #include "stdafx.h" #include"iostream"

心得体会 使用不同的方法,可以不同程度的求得方程的解,通过二分法计算的程序实现更加了解二分法的特点,二分法过程简单,程序容易实现,但该方法收敛比较慢一般用于求根的初始近似值,不同的方法速度不同。面对一个复杂的问题,要学会简化处理步骤,分步骤一点一点的循序处理,只有这样,才能高效的解决一个复杂问题。

电力系统潮流计算课程设计报告

课程设计报告 学生:学号: 学院: 班级: 题目: 电力系统潮流计算课程设计

课设题目及要求 一 .题目原始资料 1、系统图:两个发电厂分别通过变压器和输电线路与四个变电所相连。 2、发电厂资料: 母线1和2为发电厂高压母线,发电厂一总装机容量为( 300MW ),母线3为机压母线,机压母线上装机容量为( 100MW ),最大负荷和最小负荷分别为50MW 和20MW ;发电厂二总装机容量为( 200MW )。 3、变电所资料: (一) 变电所1、2、3、4低压母线的电压等级分别为:35KV 10KV 35KV 10KV (二) 变电所的负荷分别为: 60MW 40MW 40MW 50MW (三) 每个变电所的功率因数均为cos φ=0.85; 变电所1 变电所母线 电厂一 电厂二

(四) 变电所1和变电所3分别配有两台容量为75MVA 的变压器,短路损 耗414KW ,短路电压(%)=16.7;变电所2和变电所4分别配有两台容 量为63MVA 的变压器,短路损耗为245KW ,短路电压(%)=10.5; 4、输电线路资料: 发电厂和变电所之间的输电线路的电压等级及长度标于图中,单位长度的电阻为Ω17.0,单位长度的电抗为Ω0.402,单位长度的电纳为S -610*2.78。 二、 课程设计基本容: 1. 对给定的网络查找潮流计算所需的各元件等值参数,画出等值电路图。 2. 输入各支路数据,各节点数据利用给定的程序进行在变电所在某一负荷 情况下的潮流计算,并对计算结果进行分析。 3. 跟随变电所负荷按一定比例发生变化,进行潮流计算分析。 1) 4个变电所的负荷同时以2%的比例增大; 2) 4个变电所的负荷同时以2%的比例下降 3) 1和4号变电所的负荷同时以2%的比例下降,而2和3号变电所的 负荷同时以2%的比例上升; 4. 在不同的负荷情况下,分析潮流计算的结果,如果各母线电压不满足要 求,进行电压的调整。(变电所低压母线电压10KV 要求调整围在9.5-10.5 之间;电压35KV 要求调整围在35-36之间) 5. 轮流断开支路双回线中的一条,分析潮流的分布。(几条支路断几次) 6. 利用DDRTS 软件,进行绘制系统图进行上述各种情况潮流的分析,并进 行结果的比较。 7. 最终形成课程设计成品说明书。 三、课程设计成品基本要求: 1. 在读懂程序的基础上画出潮流计算基本流程图 2. 通过输入数据,进行潮流计算输出结果 3. 对不同的负荷变化,分析潮流分布,写出分析说明。 4. 对不同的负荷变化,进行潮流的调节控制,并说明调节控制的方法,并 列表表示调节控制的参数变化。 5. 打印利用DDRTS 进行潮流分析绘制的系统图,以及潮流分布图。

电力系统潮流计算实验报告

1. 手算过程 已知: 节点1:PQ 节点, s(1)= -0.5000-j0.3500 节点2:PV 节点, p(2)=0.4000 v(2)=1.0500 节点3:平衡节点,U(3)=1.0000∠0.0000 网络的连接图: 0.0500+j0.2000 1 0.0500+j0.2000 2 3 1)计算节点导纳矩阵 由2000.00500.012j Z += ? 71.418.112j y -=; 2000.00500.013j Z += ? 71.418.113j y -=; ∴导纳矩阵中的各元素: 42.936.271.418.171.418.1131211j j j y y Y -=-+-=+=; 71.418.11212j y Y +-=-=; 71.418.11313j y Y +-=-=; =21Y 71.418.11212j y Y +-=-=; 71.418.12122j y Y -==; 002323j y Y +=-=; =31Y 71.418.11313j y Y +-=-=; =32Y 002323j y Y +=-=; 71.418.13133j y Y -==; ∴形成导纳矩阵B Y : ?? ?? ? ?????-++-+-+-+-+--=71.418.10071.418.10071.418.171.418.171.418.171.418.142.936.2j j j j j j j j j Y B 2)计算各PQ 、PV 节点功率的不平衡量,及PV 节点电压的不平衡量: 取:000.0000.1)0(1)0(1)0(1j jf e U +=+= 000.0000.1)0(2) 0(2)0(2j jf e U +=+= 节点3是平衡节点,保持000.0000.1333j jf e U +=+=为定值。 ()()[] ∑==++-=n j j j ij j ij i j ij j ij i i e B f G f f B e G e P 1 )0()0()0()0()0()0() 0(;

c 计算器实验报告

简单计算器 姓名: 周吉祥 实验目的:模仿日常生活中所用的计算器,自行设计一个简单的计算器程序,实现简单的计算功能。 实验内容: (1)体系设计: 程序是一个简单的计算器,能正确输入数据,能实现加、减、乘、除等算术运算,运算结果能正确显示,可以清楚数据等。 (2)设计思路: 1)先在Visual C++ 6.0中建立一个MFC工程文件,名为 calculator. 2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和单 选框 3)设计按钮,并修改其相应的ID与Caption. 4)选择和设置各控件的单击鼠标事件。 5)为编辑框添加double类型的关联变量m_edit1. 6)在calculatorDlg.h中添加math.h头文件,然后添加public成 员。 7)打开calculatorDlg.cpp文件,在构造函数中,进行成员初始 化和完善各控件的响应函数代码。 (3)程序清单:

●添加的public成员: double tempvalue; //存储中间变量 double result; //存储显示结果的值 int sort; //判断后面是何种运算:1.加法2.减法3. 乘法 4.除法 int append; //判断后面是否添加数字 ●成员初始化: CCalculatorDlg::CCalculatorDlg(CWnd* pParent /*=NULL*/) : CDialog(CCalculatorDlg::IDD, pParent) { //{{AFX_DATA_INIT(CCalculatorDlg) m_edit1 = 0.0; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); tempvalue=0; result=0; sort=0; append=0; }

电力系统潮流计算

第四章 电力系统潮流分析与计算 电力系统潮流计算是电力系统稳态运行分析与控制的基础,同时也是安全性分析、稳定性分析电磁暂态分析的基础(稳定性分析和电磁暂态分析需要首先计算初始状态,而初始状态需要进行潮流计算)。其根本任务是根据给定的运行参数,例如节点的注入功率,计算电网各个节点的电压、相角以及各个支路的有功功率和无功功率的分布及损耗。 潮流计算的本质是求解节点功率方程,系统的节点功率方程是节点电压方程乘以节点电压构成的。要想计算各个支路的功率潮流,首先根据节点的注入功率计算节点电压,即求解节点功率方程。节点功率方程是一组高维的非线性代数方程,需要借助数字迭代的计算方法来完成。简单辐射型网络和环形网络的潮流估算是以单支路的潮流计算为基础的。 本章主要介绍电力系统的节点功率方程的形成,潮流计算的数值计算方法,包括高斯迭代法、牛顿拉夫逊法以及PQ 解藕法等。介绍单电源辐射型网络和双端电源环形网络的潮流估算方法。 4-1 潮流计算方程--节点功率方程 1. 支路潮流 所谓潮流计算就是计算电力系统的功率在各个支路的分布、各个支路的功率损耗以及各个节点的电压和各个支路的电压损耗。由于电力系统可以用等值电路来模拟,从本质上说,电力系统的潮流计算首先是根据各个节点的注入功率求解电力系统各个节点的电压,当各个节点的电压相量已知时,就很容易计算出各个支路的功率损耗和功率分布。 假设支路的两个节点分别为k 和l ,支路导纳为kl y ,两个节点的电压已知,分别为k V 和l V ,如图4-1所示。 图4-1 支路功率及其分布 那么从节点k 流向节点l 的复功率为(变量上面的“-”表示复共扼): )]([l k kl k kl k kl V V y V I V S (4-1) 从节点l 流向节点k 的复功率为: )]([k l kl l lk l lk V V y V I V S (4-2) 功率损耗为: 2)()(kl kl l k kl l k lk kl kl V y V V y V V S S S (4-3)

计算方法第二章方程求根上机报告

实验报告名称 班级:学号:姓名:成绩: 1实验目的 1)通过对二分法与牛顿迭代法作编程练习与上级运算,进一步体会二分法与牛顿迭代法的不同特点。 2)编写割线迭代法的程序,求非线性迭代法的解,并与牛顿迭代法。 2 实验内容 用牛顿法和割线法求下列方程的根 x^2-e^x=0; x*e^x-1=0; lgx+x-2=0; 3实验步骤 1)根据二分法和牛顿迭代法,割线法的算法编写相应的求根函数; 2)将题中所给参数带入二分法函数,确定大致区间; 3)用牛顿迭代法和割线法分别对方程进行求解; 3 程序设计 牛顿迭代法x0=1.0; N=100; k=0; eps=5e-6; delta=1e-6; while(1) x1=x0-fc1(x0)/fc2(x0); k=k+1; if k>N disp('Newmethod failed')

break end if(abs(x1-x0)=delta) c=x1; x1=cutnext(x0,x1); x0=c; %x0 x1μYí?μ?μ?x1 x2 è?è?±£′??úx0 x1 end k=k+1; if k>N disp('Cutline method failed') break; end if(abs(x1-x0)

计算方法实验报告格式

计算方法实验报告格式 小组名称: 组长姓名(班号): 小组成员姓名(班号): 按贡献排序情况: 指导教师评语: 小组所得分数: 一个完整的实验,应包括数据准备、理论基础、实验内容及方法,最终对实验结果进行分析,以达到对理论知识的感性认识,进一步加深对相关算法的理解,数值实验以实验报告形式完成,实验报告格式如下: 一、实验名称 实验者可根据报告形式需要适当写出. 二、实验目的及要求 首先要求做实验者明确,为什么要做某个实验,实验目的是什么,做完该实验应达到什么结果,在实验过程中的注意事项,实验方法对结果的影响也可以以实验目的的形式列出. 三、算法描述(实验原理与基础理论) 数值实验本身就是为了加深对基础理论及方法的理解而设置的,所以要求将实验涉及到的理论基础,算法原理详尽列出. 四、实验内容 实验内容主要包括实验的实施方案、步骤、实验数据准备、实验的算法以及可能用到的仪器设备. 五、程序流程图 画出程序实现过程的流程图,以便更好的对程序执行的过程有清楚的认识,在程序调试过程中更容易发现问题. 六、实验结果 实验结果应包括实验的原始数据、中间结果及实验的最终结果,复杂的结果可以用表格

形式列出,较为简单的结果可以与实验结果分析合并出现. 七、实验结果分析 实验结果分析包括对对算法的理解与分析、改进与建议. 数值实验报告范例 为了更好地做好数值实验并写出规范的数值实验报告,下面给出一简单范例供读者参考. 数值实验报告 小组名称: 小组成员(班号): 按贡献排序情况: 指导教师评语: 小组所得分数: 一、实验名称 误差传播与算法稳定性. 二、实验目的 1.理解数值计算稳定性的概念. 2.了解数值计算方法的必要性. 3.体会数值计算的收敛性与收敛速度. 三、实验内容 计算dx x x I n n ? += 1 10 ,1,2,,10n = . 四、算法描述 由 dx x x I n n ? += 1 10 ,知 dx x x I n n ?+=--101110,则

数值分析上机实验报告

数值分析上机实验报告

《数值分析》上机实验报告 1.用Newton 法求方程 X 7-X 4+14=0 在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。 1.1 理论依据: 设函数在有限区间[a ,b]上二阶导数存在,且满足条件 {}α?上的惟一解在区间平方收敛于方程所生的迭代序列 迭代过程由则对任意初始近似值达到的一个中使是其中上不变号 在区间],[0)(3,2,1,0,) (') ()(],,[x |))(),((|,|,)(||)(|.4;0)(.3],[)(.20 )()(.110......b a x f x k x f x f x x x Newton b a b f a f mir b a c x f a b c f x f b a x f b f x f k k k k k k ==- ==∈≤-≠>+ 令 )9.1()9.1(0)8(4233642)(0)16(71127)(0)9.1(,0)1.0(,1428)(3 2 2 5 333647>?''<-=-=''<-=-='<>+-=f f x x x x x f x x x x x f f f x x x f 故以1.9为起点 ?? ?? ? ='- =+9.1)()(01x x f x f x x k k k k 如此一次一次的迭代,逼近x 的真实根。当前后两个的差<=ε时,就认为求出了近似的根。本程序用Newton 法求代数方程(最高次数不大于10)在(a,b )区间的根。

1.2 C语言程序原代码: #include #include main() {double x2,f,f1; double x1=1.9; //取初值为1.9 do {x2=x1; f=pow(x2,7)-28*pow(x2,4)+14; f1=7*pow(x2,6)-4*28*pow(x2,3); x1=x2-f/f1;} while(fabs(x1-x2)>=0.00001||x1<0.1); //限制循环次数printf("计算结果:x=%f\n",x1);} 1.3 运行结果: 1.4 MATLAB上机程序 function y=Newton(f,df,x0,eps,M) d=0; for k=1:M if feval(df,x0)==0 d=2;break else x1=x0-feval(f,x0)/feval(df,x0); end e=abs(x1-x0); x0=x1; if e<=eps&&abs(feval(f,x1))<=eps d=1;break end end

用Matlab计算潮流计算电力系统分析

《电力系统潮流上机》课程设计报告 院系:电气工程学院 班级:电088班 学号: 0812002221 学生姓名:刘东昇 指导教师:张新松 设计周数:两周 日期:2010年 12 月 25 日

一、课程设计的目的与要求 目的:培养学生的电力系统潮流计算机编程能力,掌握计算机潮流计算的相关知识 要求:基本要求: 1.编写潮流计算程序; 2.在计算机上调试通过; 3.运行程序并计算出正确结果; 4.写出课程设计报告 二、设计步骤: 1.根据给定的参数或工程具体要求(如图),收集和查阅资料;学习相关软件(软件自选:本设计选择Matlab进行设计)。 2.在给定的电力网络上画出等值电路图。 3.运用计算机进行潮流计算。 4.编写设计说明书。 三、设计原理 1.牛顿-拉夫逊原理 牛顿迭代法是取x0 之后,在这个基础上,找到比x0 更接近的方程的跟,一步一步迭代,从而找到更接近方程根的近似跟。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0 的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。电力系统潮流计算,一般来说,各个母线所供负荷的功率是已知的,各个节点电压是未知的(平衡节点外)可以根据网络结构形成节点导纳矩阵,然后由节点导纳矩阵列写功率方程,由于功率方程里功率是已知的,电压的幅值和相角是未知的,这样潮流计算的问题就转化为求解非线性方程组的问题了。为了便于用迭代法解方程组,需要将上述功率方程改写成功率平衡方程,并对功率平衡方程求偏导,得出对应的雅可比矩阵,给未知节点赋电压初值,一般为

额定电压,将初值带入功率平衡方程,得到功率不平衡量,这样由功率不平衡量、雅可比矩阵、节点电压不平衡量(未知的)构成了误差方程,解误差方程,得到节点电压不平衡量,节点电压加上节点电压不平衡量构成新的节点电压初值,将新的初值带入原来的功率平衡方程,并重新形成雅可比矩阵,然后计算新的电压不平衡量,这样不断迭代,不断修正,一般迭代三到五次就能收敛。 牛顿—拉夫逊迭代法的一般步骤: (1)形成各节点导纳矩阵Y。 (2)设个节点电压的初始值U和相角初始值e 还有迭代次数初值为0。 (3)计算各个节点的功率不平衡量。 (4)根据收敛条件判断是否满足,若不满足则向下进行。 (5)计算雅可比矩阵中的各元素。 (6)修正方程式个节点电压 (7)利用新值自第(3)步开始进入下一次迭代,直至达到精度退出循环。 (8)计算平衡节点输出功率和各线路功率 2.网络节点的优化 1)静态地按最少出线支路数编号 这种方法由称为静态优化法。在编号以前。首先统计电力网络个节点的出线支路数,然后,按出线支路数有少到多的节点顺序编号。当由n 个节点的出线支路相同时,则可以按任意次序对这n 个节点进行编号。这种编号方法的根据是导纳矩阵中,出线支路数最少的节点所对应的行中非零元素也2)动态地按增加出线支路数最少编号在上述的方法中,各节点的出线支路数是按原始网络统计出来的,在编号过程中认为固定不变的,事实上,在节点消去过程中,每消去一个节点以后,与该节点相连的各节点的出线支路数将发生变化(增加,减少或保持不变)。因此,如果每消去一个节点后,立即修正尚未编号节点的出线支路数,然后选其中支路数最少的一个节点进行编号,就可以预期得到更好的效果,动态按最少出线支路数编号方法的特点就是按出线最少原则编号时考虑了消去过程中各节点出线支路数目的变动情况。 3.MATLAB编程应用 Matlab 是“Matrix Laboratory”的缩写,主要包括:一般数值分析,矩阵运算、数字信号处理、建模、系统控制、优化和图形显示等应用程序。由于使用Matlab 编程运算与人进行科学计算的思路和表达方式完全一致,所以不像学习高级语言那样难于掌握,而且编程效率和计算效率极高,还可在计算机上直接输出结果和精美的图形拷贝,所以它的确为一高效的科研助手。 四、设计内容

计算方法上机实习题大作业(实验报告).

计算方法实验报告 班级: 学号: 姓名: 成绩: 1 舍入误差及稳定性 一、实验目的 (1)通过上机编程,复习巩固以前所学程序设计语言及上机操作指令; (2)通过上机计算,了解舍入误差所引起的数值不稳定性 二、实验内容 1、用两种不同的顺序计算10000 21n n -=∑,分析其误差的变化 2、已知连分数() 1 01223//(.../)n n a f b b a b a a b =+ +++,利用下面的算法计算f : 1 1 ,i n n i i i a d b d b d ++==+ (1,2,...,0 i n n =-- 0f d = 写一程序,读入011,,,...,,,...,,n n n b b b a a 计算并打印f 3、给出一个有效的算法和一个无效的算法计算积分 1 041 n n x y dx x =+? (0,1,...,1 n = 4、设2 2 11N N j S j == -∑ ,已知其精确值为1311221N N ?? -- ?+?? (1)编制按从大到小的顺序计算N S 的程序 (2)编制按从小到大的顺序计算N S 的程序 (3)按两种顺序分别计算10001000030000,,,S S S 并指出有效位数 三、实验步骤、程序设计、实验结果及分析 1、用两种不同的顺序计算10000 2 1n n -=∑,分析其误差的变化 (1)实验步骤: 分别从1~10000和从10000~1两种顺序进行计算,应包含的头文件有stdio.h 和math.h (2)程序设计: a.顺序计算

#include #include void main() { double sum=0; int n=1; while(1) { sum=sum+(1/pow(n,2)); if(n%1000==0)printf("sun[%d]=%-30f",n,sum); if(n>=10000)break; n++; } printf("sum[%d]=%f\n",n,sum); } b.逆序计算 #include #include void main() { double sum=0; int n=10000; while(1) { sum=sum+(1/pow(n,2)); if(n%1000==0) printf("sum[%d]=%-30f",n,sum); if(n<=1)break; n--; } printf("sum[%d]=%f\n",n,sum); } (3)实验结果及分析: 程序运行结果: a.顺序计算

新版电力系统暂态上机计算课程设计报告完整无误版(附程序)

课程设计报告 ( 2014—2015年度第二学期) 名称:电力系统暂态上机计算院系:电气与电子工程学院班级:电气1211 学号:1121210205 学生:郝阳 指导教师:艳波 设计周数:两周 成绩: 日期:2015年7月4日

一、课程设计的目的与要求 巩固电力系统暂态分析理论知识,使学生掌握采用计算机对电力系统电磁暂态过程和机电暂态过程进行计算的基本方法,并进一步巩固计算机编程能力,为将来从事相关的技术工作打下必要的基础。 二、设计正文(详细容见附录,用A4纸,页数不限) 1.对称短路计算过程流程图和计算结果 2.不对称短路计算过程流程图和计算结果 3.静态稳定性计算过程流程图和计算结果 4.暂态稳定性计算过程流程图和计算结果 5.思考题 三、课程设计总结或结论 本次电力系统暂态上机主要讨论了计算各种类型短路故障下系统网络中的电压电流分布以及电力系统的静态稳定、暂态稳定问题。通过本次课程设计,本人对电力系统故障分析有了更深刻的理解,电力系统的故障时,大部分电磁量将随时间变化,描述其特性的是微分方程,这给分析计算带来一定困难。在分析过程常尽量避免对微分方程直接求解,而是采用一定的工具和假设使问题得以简化,即把“微分方程代数化,暂态分析稳态化”。在分析不对称故障时,各相之间电磁量的耦合使问题的分析更为复杂,此时常用的分析方法是采用对称分量法将不对称问题转化为对称问题来求解。同时我对用来分析电力系统静态稳定的试探法,用来分析电力系统暂态稳定的改进欧拉法有了一些使用心得。这与手算系统短路电流时使用的网络化简方法大大不同。 在学习中,参照潮流程序,我加深了对节点导纳矩阵建立方法的理解与学习,巩固了不同类型短路的短路电流计算方法,和序电压、序电流,相电压、相电流基于matlab软件的计算。利用小干扰分析法判别静态稳定可以使用劳斯判据,也可以使用特征根判别的方法。二者都能够判断,在书中的例题中使用的是劳斯判据,但是,特征根判别放法更适合在matlab软件的环境下使用,因为该软件提供了计算矩阵特征根的函数,使用起来简便易懂。利用改进欧拉法计算最大切除角或切除时间虽然比较方便,但是由于计算机有效位数的限制而引起的舍入误差随步长的减小以及运算次数的增多而增大。在上机编程中体会比较深的是自己犯的几个错误,比如说在算短路电流时,发电机之路的电流和电压是否要经过相位的变换,在静态稳定计算中的角度是弧度制,在计算中使用的都是标幺值等等,这些看似细微的地方,往往考验的就是自己对电力系统分析中的知识的基础,虽然小但是也非常的重要,往往就是这些错误会令程序得不到正确的结果,值得我注意和反思。 总的来说,结合我们上学期潮流上机编程的经验,虽然这次用的是matlab,但是明显感觉到对计算机处理电力系统问题的简便,程序的编写也显得更加的轻松和得心应手,体会到matlab软件的强大。经过两个星期的回顾与学习,我巩固了电力系统暂态分析理论知识,在编程的过程中很深刻的感受到要想得出正确的结果,就必须认真地理解课本上对应的例题,知道这些原理,不能仅仅照着书抄公式;同时我也初步掌握了采用计算机对电力系统电磁暂态过程和机电暂态过程进行计算的基本方法,并进一步巩固计算机编程能力,为将来从事相关的技术工作打下必要的基础,更好地建设我国的电力系统。 四、参考文献 1.《电力系统暂态过程》,常鲜戎、书强编,机械工业,2010年1月,第一版; 2.《电力系统分析基础》,庚银,机械工业,2011年,第一版;

计算方法实验报告 拟合

南京信息工程大学实验(实习)报告 一、实验目的: 用最小二乘法将给定的十个点拟合成三次多项式。 二、实验步骤: 用matlab编制以函数为基的多项式最小二乘拟合程序,并用于对下列数据作三次多项式最小二乘拟合(取权函数wi=1) x -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 y -2.30 -1 -0.14 -0.25 0.61 1.03 1.75 2.75 4.42 6.94 给定直线方程为:y=1/4*x3+1/2*x2+x+1 三、实验结论: 最小二乘法:通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。 一般地。当测量数据的散布图无明显的规律时,习惯上取n次代数多项式。 程序运行结果为: a = 0.9731 1.1023 0.4862 0.2238 即拟合的三次方程为:y=0.9731+1.1023x+0.4862*x2+0.2238*x3

-2.5 -2-1.5-1-0.5 00.51 1.52 2.5 -4-20246 81012 x 轴 y 轴 拟合图 离散点 y=a(1)+a(2)*x+a(3)*x.2+a(4)*x.3 结论: 一般情况下,拟合函数使得所有的残差为零是不可能的。由图形可以看出最小二乘解决了残差的正负相互抵消的问题,使得拟合函数更加密合实验数据。 优点:曲线拟合是使拟合函数和一系列的离散点与观测值的偏差平方和达到最小。 缺点:由于计算方法简单,若要保证数据的精确度,需要大量的数据代入计算。

电力系统潮流计算课程设计论文

课程设计论文 基于MATLAB的电力系统潮流计算 学院:电气工程学院 专业:电气工程及自动化 班级:电自0710班 学号:0703110304 姓名: 马银莎

内容摘要 潮流计算是电力系统最基本最常用的计算。根据系统给定的运行条件,网络接线及元件参数,通过潮流计算可以确定各母线的电压(幅值和相角),各支路流过的功率,整个系统的功率损耗。潮流计算是实现电力系统安全经济发供电的必要手段和重要工作环节。因此,潮流计算在电力系统的规划计算,生产运行,调度管理及科学计算中都有着广泛的应用。 潮流计算在数学上是多元非线性方程组的求解问题,牛顿—拉夫逊Newton-Raphson法是数学上解非线性方程组的有效方法,有较好的收敛性。运用电子计算机计算一般要完成以下几个步骤:建立数学模型,确定解算方法,制订计算流程,编制计算程序。 关键词 牛顿-拉夫逊法(Newton-Raphson)变压器及非标准变比无功调节 高斯消去法潮流计算Mtlab

一 .电力系统潮流计算的概述 在电力系统的正常运行中,随着用电负荷的变化和系统运行方式的改变,网络中的损耗也将发生变化。要严格保证所有的用户在任何时刻都有额定的电压是不可能的,因此系统运行中个节点出现电压的偏移是不可避免的。为了保证电力系统的稳定运行,要进行潮流调节。 随着电力系统及在线应用的发展,计算机网络已经形成,为电力系统的潮流计算提供了物质基础。电力系统潮流计算是电力系统分析计算中最基本的内容,也是电力系统运行及设计中必不可少的工具。根据系统给定的运行条件、网络接线及元件参数,通过潮流计算可以确定各母线电压的幅值及相角、各元件中流过的功率、整个系统的功率损耗等。潮流计算是实现电力系统安全经济发供电的必要手段和重要工作环节,因此潮流计算在电力系统的规划设计、生产运行、调度管理及科学研究中都有着广泛的应用。它的发展主要围绕这样几个方面:计算方法的收敛性、可靠性;计算速度的快速性;对计算机存储容量的要求以及计算的方便、灵活等。 常规的电力系统潮流计算中一般具有三种类型的节点:PQ 、PV 及平衡节点。一个节点有四个变量,即注入有功功率、注入无功功率,电压大小及相角。常规的潮流计算一般给定其中的二个变量:PQ 节点(注入有功功率及无功功率),PV 节点(注入有功功率及电压的大小),平衡节点(电压的大小及相角)。 1、变量的分类: 负荷消耗的有功、无功功率——1L P 、1L Q 、2L P 、2L Q 电源发出的有功、无功功率——1G P 、1G Q 、2G P 、2G Q 母线或节点的电压大小和相位——1U 、2U 、1δ、2δ 在这十二个变量中,负荷消耗的有功和无功功率无法控制,因它们取决于用户,它们就称为不可控变量或是扰动变量。电源发出的有功无功功率是可以控制的自变量,因此它们就称为控制变量。母线或节点电压的大小和相位角——是受控制变量控制的因变量。其中, 1U 、2U 主要受1G Q 、2G Q 的控制, 1δ、2δ主要受 1G P 、2G P 的控制。这四个变量就是简单系统的状态变量。 为了保证系统的正常运行必须满足以下的约束条件: 对控制变量 max min max min ;Gi Gi Gi Gi Gi Gi Q Q Q P P P <<<< 对没有电源的节点则为 0;0==Gi Gi Q P 对状态变量i U 的约束条件则是 m a x m i n i i i U U U <<

计算方法实验报告册

实验一——插值方法 实验学时:4 实验类型:设计 实验要求:必修 一 实验目的 通过本次上机实习,能够进一步加深对各种插值算法的理解;学会使用用三种类型的插值函数的数学模型、基本算法,结合相应软件(如VC/VB/Delphi/Matlab/JAVA/Turbo C )编程实现数值方法的求解。并用该软件的绘图功能来显示插值函数,使其计算结果更加直观和形象化。 二 实验内容 通过程序求出插值函数的表达式是比较麻烦的,常用的方法是描出插值曲线上尽量密集的有限个采样点,并用这有限个采样点的连线,即折线,近似插值曲线。取点越密集,所得折线就越逼近理论上的插值曲线。本实验中将所取的点的横坐标存放于动态数组[]X n 中,通过插值方法计算得到的对应纵坐标存放 于动态数组[]Y n 中。 以Visual C++.Net 2005为例。 本实验将Lagrange 插值、Newton 插值和三次样条插值实现为一个C++类CInterpolation ,并在Button 单击事件中调用该类相应函数,得出插值结果并画出图像。CInterpolation 类为 class CInterpolation { public : CInterpolation();//构造函数 CInterpolation(float *x1, float *y1, int n1);//结点横坐标、纵坐标、下标上限 ~ CInterpolation();//析构函数 ………… ………… int n, N;//结点下标上限,采样点下标上限 float *x, *y, *X;//分别存放结点横坐标、结点纵坐标、采样点横坐标 float *p_H,*p_Alpha,*p_Beta,*p_a,*p_b,*p_c,*p_d,*p_m;//样条插值用到的公有指针,分别存放 i h ,i α,i β,i a ,i b ,i c ,i d 和i m }; 其中,有参数的构造函数为 CInterpolation(float *x1, float *y1, int n1) { //动态数组x1,y1中存放结点的横、纵坐标,n1是结点下标上限(即n1+1个结点) n=n1; N=x1[n]-x1[0]; X=new float [N+1]; x=new float [n+1]; y=new float [n+1];

相关文档
最新文档