电力系统稳态分析报告-牛顿拉夫逊法

电力系统稳态分析报告-牛顿拉夫逊法
电力系统稳态分析报告-牛顿拉夫逊法

0 引言

潮流是配电网络分析的基础,用于电网调度、运行分析、操作模拟和设计规划,同时也是电压优化和网络接线变化所要参考的内容。潮流计算通过数值仿真的方法把电力系统的详细运行情况呈现给工作人员,从而便于研究系统在给定条件下的稳态运行特点。随着市场经济的发展,经济利益是企业十分看重的,而线损却是现阶段阻碍企业提高效益的一大因素。及时、准确的潮流计算结果,可以给出配电网的潮流分布、理论线损及其在网络中的分布,从而为配电网的安全经济运行提供参考。从数学的角度来看,牛顿-拉夫逊法能有效进行非线性代数方程组的计算且具有二次收敛的特点,具有收敛快、精度高的特点,在输电网中得到广泛应用。随着现代计算机技术的发展,利用编程和相关软件,可以更好、更快地实现配电网功能,本文就是结合牛顿-拉夫逊法的基本原理,利用C++程序进行潮流计算,计算结果表明该方法具有良好的收敛性、可靠性及正确性。

1 牛顿-拉夫逊法基本介绍

1.1 潮流方程

对于N个节点的电力网络(地作为参考节点不包括在内),如果网络结构和元件参数已知,则网络方程可表示为:

YV I

=

(1-1)

式中,Y为N*N阶节点导纳矩阵;V为N*1维节点电压列向量;I为N*1维节点注入电流列向量。如果不计网络元件的非线性,也不考虑移相变压器,则Y 为对称矩阵。

电力系统计算中,给定的运行变量是节点注入功率,而不是节点注入电流,这两者之间有如下关系:

?

?=

EI S

(1-2)

式中,S为节点的注入复功率,是N*1维列矢量;?S为S的共轭;

??i diag ??=????

E V 是由节点电压的共轭组成的N*N 阶对角线矩阵。 由(1-1)和(1-2),可得:

??=S EYV

上式就是潮流方程的复数形式,是N 维的非线性复数代数方程组。将其展开,有:

?i i i

ij j j i

P jQ V Y V ∈

-=∑ j=1,2,….,N

(1-3)

式中, j i ∈表示所有和i 相连的节点j ,包括j i =。

将节点电压用极坐标表示,即令i i i V V θ=∠,代入式(1-3)中则有:

()i i i i ij ij j j j i

P jQ V G jB V θθ∈-=∠-+∠∑

()()cos sin i j ij ij ij ij j i

V V G jB j θθ∈=+-∑

故有:

()

()cos sin sin cos i i j ij ij ij ij j i

i i j ij ij ij ij j i P V V G B Q V V G B θθθθ∈∈?=+??

=-??

∑∑ i=1,2,…,N (1-4)

式(1-4)是用极坐标表示的潮流方程。

而节点功率误差:

(cos sin )θθ∈?=-+∑SP

i i

i j ij

ij ij ij j i

P P V V G

B

(1-5)

(cos sin )θθ∈?=--∑SP i i i

j

ij

ij ij ij j i

Q Q V V G

B

(1-6)

式中:SP i P ,SP i Q 为节点i 给定的有功功率及无功功率。

1.2 牛顿-拉夫逊法基本原理

1.2.1 牛拉法的一般描述

牛拉法是把非线性方程式的求解过程变成反复对相应的线性方程式的求解

过程,即非线性问题通过线性化逐步近似,这就是牛拉法的核心。下面以非线性方程式的求解过程来进行说明。

设电力网络的节点功率方程一般形式如下:

()SP =y y x

(1-7)

式中,SP y 为节点注入功率给定值;y 为SP y 对应的物理量和节点电压之间的函数表达式;x 为节点电压。写成功率偏差的形式:

()()SP =-=0f

x y y x

(1-8)

应用牛拉法求解如下。在给定的初值()0

x 处将式(1-8)作一阶泰勒展开:

()()

()

00T x ?+?=?f f x x x

定义T

?=

?f J x 为潮流方程的雅克比矩阵,0

J 为J 在()

0x 处的值,则有: ()()

10-?=-x J f x

用?x 修正()0

x 就得到x 的新值。如果用k 表示迭代次数,写成一般的表达式,

有:

()()

()()()

()()()1

1k k k k k k -+??=-???=+??

x

J x f x x x x

(1-9)

对于潮流收敛的情况,(

)

1k +x 应比()k

x 更接近于解点。收敛条件为:

()

()

max k

i f x ε<

由简单迭代法收敛性分析的结论知,越接近解点,牛顿-拉夫逊法收敛越快,它具有二阶收敛速度。由图1.1可以直观地了解牛拉法的步骤:

图1.1 牛顿-拉夫逊法的几何解释

1.2.2 极坐标的牛顿-拉夫逊法

在极坐标中,()f x 有如下的形式:

()

()()()(),,,,n

SP SP n r

-????

?-?

???==?????-????P V P P V f x Q V Q Q V θθθθ

(1-10)

共2n-r 个方程,状态变量为:1212

T T T

n n r V V V θθθ-????==????

x V θ

共2n-r 个待求量。r 个PV 节点的电压幅值给定,不需求解。潮流雅克比矩阵的维数是(2n-r )*(2n-r),结构如下:

n

T T T

T

T

n r

-?????????????=

=?????????????P

P

f

V J x Q Q V θθ 上式右侧的对电压幅值的偏导数项中的电压幅值的阶数减少了1,为使雅克比矩阵的各部分子矩阵具有一致的形式,在实际计算中,常将该项乘以电压幅值,并选取1122

////T

n r n r V V V V V V --?????=???????V V 作为待求的修正

量,则雅克比矩阵可写成:

n

T T T

T T

n r

-??

???????????=

=???????

??????P P V f V J x Q Q V V θθ

(1-11)

将式(1-10)和(1-11)代入式(1-9)的修正方程即可求得x 的修正量x ?,

用它修正x 直到()

()

max k

i f x ε<为止。

将式(1-11)用下式表示:

??=?

???

H N J M

L 其中每个字块的计算公式如下:

对角元素:

'

'2

''

2

''2

''

2

,,,,i i ii i ii i ii ii i i i i ii i i ii i ii ii i i

i i ii i ii i ii ii i i i i

ii i i ii i ii ii i i P Q H V H V H B V P P N V V N V N G V V Q P M V M V M G V Q Q L V V L V L B V V θθ???===+???????=

==--??????===-??????=

==-???

(1-12)

非对角元素: ''

''

'''

'''

,cos sin ,cos sin ,,i ij i ij j ij ij ij ij ij

j

i ij j i ij j ij ij ij ij ij

j

i ij i ij j ij ij

j

i ij j i ij j ij ij

j

P H V H V H B G P N V V N V N G B V Q M V M V M N Q L V V L V L H V θθθθθθ?

??===-???????===--??

?

???===-??????=

==???

(1-

13)

2 牛顿法潮流计算步骤

2.1 程序流程图

在了解了牛拉法的原理之后,明确程序编写思路,如图2.1、2.2所示。

其中图2.1中的“计算电压幅值和角度”步骤较多,单独用图2.2表示出来。

图2.1 牛顿法计算潮流的程序框图 图2.2 电压幅值和角度求解步骤框

当不符合收敛的条件“amontk>1”时,即认为计算不收敛。具体程序见附录。

2.2 计算步骤

下面讨论的是极坐标形式的牛顿法求解过程,大致分为以下几个步骤: ① 形成节点导纳矩阵;

② 给各节点电压设初值((0)(0),i i V θ);

③根据式(1-12)、(1-13)生成雅克比矩阵(H 、N 、M 、L );

④ 将节点电压初值代入式(1-5)、式(1-6),求出修正方程式的常数项向量

,i i P Q ??;

⑤ 求解修正方程,得到电压幅值和角度;

⑥判断是否收敛,若收敛,计算平衡节点和线路功率;

⑦输出结果,并结束。

3 算例

3.1 系统模型

本文以图3.1所示电力网络为例,调用基于牛顿-拉夫逊法的C++程序。

图3.1 系统模型

其中节点4设为平衡节点,电压标幺值为1.05,计算误差为0.000001。

3.2 输入与输出

将图3.1所示模型的相关数据放在data.dat文件中

图3.2 输入节点和支路数据

对各个数字含义的解释如下:

网络模型有四个节点,四条支路,编号见图3.1。第一个零下面三行数为支路参数,分别表示三条支路的起始和终止节点编号,后面的为电阻、电抗和电纳,电导均为0,例如:1 2 0.1 0.4 0.01528。第二个零下面的为变压器支路,各数字意义同支路参数。接下去三行均为节点参数,分别表示注入有功功率和无功功率。

调用text.cpp文件,得到运行结果,见图3.3和图3.4。

图3.3 运行结果1

图3.4 运行结果2 3.3 结果分析

将上述仿真结果整理为表格 3.1、3.2,其中“+”表示节点i 输出功率给节点j ,“-”表示节点j 输出功率给i(纵向为i ,横向为j)。

表3.1节点有功功率输入与输出

根据表格计算:

节点1有功功率:0+0.245981-0.5-0.046563=-0.300582

无功功率:0-0.014708-0.029001-0.136187=-0.179896 节点2有功功率:-0.24316+0+0-0.312949=-0.556109

无功功率:0.0110505+0+0-0.14036=-0.1293095 节点3有功功率:0.5+0+0+0=0.5

无功功率:0.097016+0+0+0=0.097016

节点4有功功率:0.0482143+0.319671+0+0=0.3678853

无功功率:0.10464+0.160255+0+0=0.264895

根据已知条件,两个PQ 节点的注入有功、无功分别为:

P1=0.3,Q1=0.18; P2=0.55,Q2=0.13 潮流计算误差:

1

0.3005820.3

100%0.194%0.3i

P P ?-=

?=

1

1

0.180.179896

100%0.0578%0.18Q Q ?-=

?=

2

2

0.5561090.55

100% 1.11%0.55

P P ?-=

?=

2

2

0.130.1293095

100%0.531%0.13

Q Q ?-=

?=

可见,误差均在允许范围内。 线路损耗:

120.2459810.014708(0.24316j 0.0110505)0.002821j 0.0036575S j =-+-+=-

130.50.029001(0.5j 0.097016)j 0.068015S j =--++=

140.0465630.136187(0.0482143j 0.10464)0.0016513j 0.031547S j =--++=-

240.3129490.14036(0.319671j 0.160255)0.006722j 0.019895S j =--++=+

3.4 结论

通过上面的分析与计算,验证了程序的正确性。由于编写过程的不足,线路损耗没能直接计算出来,而是需要手算,比较遗憾。程序在运行过程中,需要区分三种不同的节点,这由子程序保证实现。相比于快速分解法,牛拉法程序较为复杂,但更精确一点,潮流误差较小。

4 总结

本文基于牛顿-拉夫逊潮流算法的基本原理,利用C++编程计算了一个4节点简单电力网络的潮流,并验证了运行成果,误差在允许范围之内。因为牛拉法计算过程中要不断生成新的雅各布矩阵,所以相对来说占用内存较多,但收敛速度快,这在程序运行过程中可以体现出来。本文程序并不是特别实用,因为真正的电力网络不可能只有几个节点,而且各种电力设备的情况也会复杂很多,因此程序会变得非常大,占用极大内存。但是,我还是通过这次练习,进一步巩固了书本上的理论知识,了解了实际操作的过程步骤。最后,感谢杨伟老师的悉心指导!

参考文献

[1 ] 朱红,赵琦,王庆宝. C++程序设计教程[M]. 北京:清华大学出版社,

2010.

[2]张伯明,陈寿孙,严正.高等电力网络分析[M].北京:清华大学出版社,

2007.

[3]吴明波. 牛顿-拉夫逊法在潮流计算中的应用[J]. 内蒙古科技与经济,2011,

21:111-112,115.

[4]明日科技. VisualC++从入门到精通[M]. 北京:清华大学出版社,2012.

[5] 顾洁,陈章潮,徐蓓. 一种新的配电网潮流算法-改进牛顿拉夫逊法[J].华

东电力,2000,5:10-12.

[6] 朱文强. 牛顿-拉夫逊法在配电网中的应用[J]. 水利科技,2004,3:55-

56,58.

[7] 刘明波,谢敏,赵维新. 大电网最优潮流计算[M]. 北京:科学出版社,

2010.

附录

//***************************************************//

#include"iostream.h"

#include"math.h"

#include

#include

#include

#define nodeNumber readParameter[6]

using namespace std;

///////////////////////////////////////////

class powerFlowCalculation //导纳矩阵的计算类

{

private:

int readDataAmount; //存放元件参数的读取个数int balanceNodeindex; //平衡结点号

double balanceNodeVoltage; //平衡节点电压幅值

double balanceNodePowerP; //平衡节点功率

double balanceNodePowerQ;

double calculationAccuracy; //计算精度

double readParameter[7]; //宏定义

double *conductance;

double *susceptance ;

double *admittanceAmplitude;

double *admittanceAngle;

double *lineData;

int PVNodeNumber; //PV节点数

double *jacobiMatrix; //雅克比矩阵

double *PQData; //矩阵,存放PQ节点的数据

double *PVData; //矩阵,存放PV节点的数据double *voltageAmplitude; //电压幅值

double *voltageAngle; //电压角度

double *constantVector; //常数向量

double *lineConsumeG;

double *lineConsumeB;

ifstream instream;

public:

//下标的转换

int converIndex(int i,int j)

{

int serial;

serial=(i-1)*nodeNumber+j;

return serial;

}

//线路的计算

void countLineBranch(double para[],double*G,double*B)

{

double GIJ,BIJ;

int nii,njj,nij,nji;

GIJ=para[3]/(para[3]*para[3]+para[4]*para[4]);

BIJ=-para[4]/(para[3]*para[3]+para[4]*para[4]);

nij=converIndex(para[1],para[2]);

nji=converIndex(para[2],para[1]);

nii=converIndex(para[1],para[1]);

njj=converIndex(para[2],para[2]);

G[nji]=-GIJ;

G[nij]=-GIJ;

B[nji]=-BIJ;

B[nij]=-BIJ;

G[nii]+=GIJ;

G[njj]+=GIJ;

B[nii]+= (BIJ+para[5]);

B[njj]+= (BIJ+para[5]);

}

//变压器的计算,规定para[1]为理想变压器侧,para[2]为归算阻抗侧void countTranformer(double para[],double*G,double*B)

{

double GIJ,BIJ,b_i,b_j;

int nii,njj,nij,nji;

GIJ=para[3]/(para[3]*para[3]+para[4]*para[4]);

BIJ=-para[4]/(para[3]*para[3]+para[4]*para[4]);

b_i=BIJ*(1-para[5])/para[5]/para[5];

b_j=BIJ*(para[5]-1)/para[5];

nij=converIndex(para[1],para[2]);

nji=converIndex(para[2],para[1]);

nii=converIndex(para[1],para[1]);

njj=converIndex(para[2],para[2]);

G[nij]=-GIJ/para[5];

B[nij]=-BIJ/para[5];

G[nji]=-GIJ/para[5];

B[nji]=-BIJ/para[5];

G[nii]+= GIJ/para[5];

B[nii]+= (BIJ/para[5]+b_i);

G[njj]+= GIJ/para[5];

B[njj]+= (BIJ/para[5]+b_j);

}

//对地支路的计算

void countGroundBranch(double para[],double*G,double*B)

{

int nii;

nii=converIndex(para[1],para[1]);

G[nii]+=para[2];

B[nii]+=para[3];

}

//导纳矩阵的显示

void display()

{

cout<

int nij;

for(int i=1;i<=nodeNumber;i++)

{

for(int j=1;j<=nodeNumber;j++)

{

nij=converIndex(i,j);

if(susceptance [nij]<0)

cout<

else

cout<

}

cout<

}

cout<

}

//显示任意秩矩阵

void displayMatrix(double *matr,int ranki,int rankj) {

int nij;

for(int i=1;i<=ranki;i++)

{

for(int j=1;j<=rankj;j++)

{

nij=(i-1)*rankj+j;

cout<

}

cout<

}

//cout<

}

//构造函数,打开文件

powerFlowCalculation(string inputfilename)

{

instream.open(inputfilename.data());

assert(instream.is_open());

}

//析构函数,关闭文件

~powerFlowCalculation()

{

instream.close();

}

//初始化,根据节点数开辟数组

void initi()

{

nodeNumber=readParameter[0]; //读取节点数 PVNodeNumber=0;

conductance=new double[nodeNumber*nodeNumber];

susceptance =new double[nodeNumber*nodeNumber];

admittanceAmplitude=new double[nodeNumber*nodeNumber]; admittanceAngle=new double[nodeNumber*nodeNumber];

PQData=new double[(nodeNumber-1)*6]; //开辟PQData

PVData=new double[(nodeNumber-1)*5]; //开辟PVData

voltageAmplitude=new double[nodeNumber];

voltageAngle=new double[nodeNumber];

jacobiMatrix=new double[nodeNumber*nodeNumber*4];

constantVector=new double[nodeNumber*2];

lineData=new double[nodeNumber*(nodeNumber-1)/2*5];

lineConsumeG=new double[nodeNumber*nodeNumber];

lineConsumeB=new double[nodeNumber*nodeNumber];

for(int a=1;a<=nodeNumber*(nodeNumber-1)/2*5;a++)

lineData[a]=0.0;

for(int i=1;i<=nodeNumber;i++) //电压向量的初始化

{

voltageAmplitude[i]=1.0;

voltageAngle[i]=0.0;

}

for(int j=1;j<=(nodeNumber*nodeNumber);j++) //导纳初始化

{

conductance[j]=0.0;

susceptance [j]=0.0;

admittanceAmplitude[j]=0.0;

admittanceAngle[j]=0.0;

lineConsumeG[j]=0.0;

lineConsumeB[j]=0.0;

}

for(int k=0;k<=nodeNumber*nodeNumber*4;k++) //雅克比矩阵初始化 jacobiMatrix[k]=0.0;

for(int n=1;n<=nodeNumber*2;n++) //常数向量初始化

{

constantVector[n]=0.0;

}

}

//计算导纳矩阵主程序

void countAdmittance()

{

int lineDataSerial=1;

for(int facility=0;facility<4;facility++)

switch(facility) //不同元件参数的读取个数

{

case 0: //节点数,平衡节点,平衡节点电压,计算精度

readDataAmount=4;

break;

case 1: //线路

readDataAmount=6;

break;

case 2: //变压器

readDataAmount=6;

break;

case 3: //对地支路

readDataAmount=4;

break;

}//end switch

for(;;) //参数的读取和操作

{

instream>>readParameter[0];

if (readParameter[0]<0.5) break; //序号为0时退出循环for(int i=1;i

{

instream>>readParameter[i];

if(facility==1)

{

lineData[lineDataSerial]=readParameter[i];

lineDataSerial++;

}

if(facility==2)

{

lineData[lineDataSerial]=readParameter[i];

if(i==5)

{

lineData[lineDataSerial]=0.0;

lineDataSerial--;

lineData[lineDataSerial]*=readParameter[i];

lineDataSerial--;

lineData[lineDataSerial]*=readParameter[i];

lineDataSerial+=2;

}//end for if(i==5)

lineDataSerial++;

}//end for if(facility==2)

}//end for loop i

switch(facility) //不同元件的计算

{

case 0:

initi();

balanceNodeindex=(int)readParameter[1];

balanceNodeVoltage=readParameter[2];

calculationAccuracy=readParameter[3];

cout<<"节点数:"<

<<"平衡节点:"<

<<"平衡节点电压:"<

<<"计算精度:"<

break;

case 1:

countLineBranch(readParameter,conductance,susceptance );

break;

case 2:

countTranformer(readParameter,conductance,susceptance );

break;

case 3:

countGroundBranch(readParameter,conductance,susceptance );

break;

}//end switch

}//end for loop

}//end for (facility)

}//end countAdmittance()

//*****************************雅克比矩阵****************************//

double vectorAngle(double a,double b)

{

if(fabs(a)<0.0000001 && fabs(b)<0.0000001) return 0.0;

double alpha;

alpha=atan(fabs(b)/fabs(a));

if(a<=0 && b>=0)

插值法数值上机实验报告

插值法数值上机实验报告 实验题目: 利用下列条件做插值逼近,并与R (x) 的图像比较 考虑函数:R x y=1 1+x2 (1)用等距节点X i=?5+i,i=0,1,...,10.给出它的10次Newton插值多项式的图像; π),i=0,1,...,20.给出它的20次Lagrange插值多项式(2)用节点X i=5cos(2i+1 42 的图像; (3)用等距节点X i=?5+i,i=0,1,...,10.给出它的分段线性插值函数的图像;(4)用等距节点X i=?5+i,i=0,1,...,10.给出它的三次自然样条插值函数的图像; (5)用等距节点X i=?5+i,i=0,1,...,10.给出它的分段三次Hermite插值函数的图像; 实验图像结果:

实验结果分析: 1.为了验证Range现象,我还特意做了10次牛顿插值多项式和20次牛顿插值多项式的对比图像,结果如下图(图对称,只截取一半) 可以看出,Range现象在高次时变得更加明显。这也是由于高次多项式在端点处的最值随次数的变大很明显。可以料定高次多项式在两侧端点处剧烈震荡,在更小的间距内急剧上升然后下降,Range现象非常明显。

2.分析实验(2)的结果,我们会惊讶地发现,由于取21个点逼近,原本预料的Range现象会很明显,但这里却和f(x)拟合的很好。(即下图中Lagrange p(x)的图像)。可是上图中取均匀节点的20次牛顿多项式逼近的效果在端点处却很差。料想是由于节点X i=5cos2i+1 42 π ,i=0,1,...,20 取得很好。由书上第五章的 知识,对于函数y=1 1+x ,y 1 2对应的cherbyshev多项式的根恰好为X i= 5cos2i+1 42 π ,i=0,1,...,20 。由于所学限制,未能深入分析。 (3)比较三次样条插值图像和Hermit插值图像对原函数图像的逼近情形。见下图:

牛顿拉夫逊法潮流计算

摘要 本文,首先简单介绍了基于在MALAB中行潮流计算的原理、意义,然后用具体的实例,简单介绍了如何利用MALAB去进行电力系统中的潮流计算。 众所周知,电力系统潮流计算是研究电力系统稳态运行情况的一种计算,它根据给定的运行条件及系统接线情况确定整个电力系统各部分的运行状态:各线的电压、各元件中流过的功率、系统的功率损耗等等。在电力系统规划的设计和现有电力系统运行方式的研究中,都需要利用潮流计算来定量地分析比较供电方案或运行方式的合理性、可靠性和经济性。 此外,在进行电力系统静态及暂态稳定计算时,要利用潮流计算的结果作为其计算的基础;一些故障分析以及优化计算也需要有相应的潮流计算作配合;潮流计算往往成为上述计算程序的一个重要组成部分。以上这些,主要是在系统规划设计及运行方式安排中的应用,属于离线计算范畴。 牛顿-拉夫逊法在电力系统潮流计算的常用算法之一,它收敛性好,迭代次数少。本文介绍了电力系统潮流计算机辅助分析的基本知识及潮流计算牛顿-拉夫逊法,最后介绍了利用MTALAB程序运行的结果。 关键词:电力系统潮流计算,牛顿-拉夫逊法,MATLAB

ABSTRACT This article first introduces the flow calculation based on the principle of MALAB Bank of China, meaning, and then use specific examples, a brief introduction, how to use MALAB to the flow calculation in power systems. As we all know, is the study of power flow calculation of power system steady-state operation of a calculation, which according to the given operating conditions and system wiring the entire power system to determine the operational status of each part: the bus voltage flowing through the components power, system power loss and so on. In power system planning power system design and operation mode of the current study, are required to quantitatively calculated using the trend analysis and comparison of the program or run mode power supply reasonable, reliability and economy. In addition, during the power system static and transient stability calculation, the results of calculation to take advantage of the trend as its basis of calculation; number of fault analysis and optimization also requires a corresponding flow calculation for cooperation; power flow calculation program often become the an important part. These, mainly in the way of system design and operation arrangements in the application areas are off-line calculation. Newton - Raphson power flow calculation in power system is one commonly used method, it is good convergence of the iteration number of small, introduce the trend of computer-aided power system analysis of the basic knowledge and power flow Newton - Raphson method, introduced by the last matlab run results. Keywords:power system flow calculation, Newton – Raphson method, matlab

牛顿迭代法

牛顿迭代法 李保洋 数学科学学院信息与计算科学学号:060424067 指导老师:苏孟龙 摘要:牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法,即牛顿迭代法.迭代法是一种不断用变量的旧值递推新值的过程.跟迭代法相对应的是直接法或者称为一次解法,即一次性解决问题.迭代法又分为精确迭代和近似迭代.“牛顿迭代法”属于近似迭代法,本文主要讨论的是牛顿迭代法,方法本身的发现和演变和修正过程,避免二阶导数计算的Newton迭代法的一个改进,并与中国古代的算法,即盈不足术,与牛顿迭代算法的比较. 关键词:Newton迭代算法;近似求解;收敛阶;数值试验;中国古代数学; 九章算术;Duffing方程;非线性方程;收敛速度;渐进性 0 引言: 迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法或者称为一次解法,即一次性解决问题.迭代法又分为精确迭代和近似迭代.“二分法”和“牛顿迭代法”属于近似迭代法. 迭代算法是用计算机解决问题的一种基本方法.它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值.具体使用迭代法求根时应注意以下两种可能发生的情况: (1)如果方程无解,算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考察方程是否有解,并在程序中对迭代的次数给予限制. (2)方程虽然有解,但迭代公式选择不当,或迭代的初始近似根选择不合理,也会导致迭代失败. 所以利用迭代算法解决问题,需要做好以下三个方面的工作: 1、确定迭代变量.在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量. 2、建立迭代关系式.所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系).迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成. 3、对迭代过程进行控制,在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题.不能让迭代过程无休止地重复执行下去.迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定.对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件. 1牛顿迭代法:

MAAB计算方法迭代法牛顿法二分法实验报告

姓名 实验报告成绩 评语: 指导教师(签名) 年 月 日 说明:指导教师评分后,实验报告交院(系)办公室保存。 实验一 方程求根 一、 实验目的 用各种方法求任意实函数方程0)(=x f 在自变量区间[a ,b]上,或某一点附近的实根。并比较方法的优劣。 二、 实验原理 (1)、二分法 对方程0)(=x f 在[a ,b]内求根。将所给区间二分,在分点 2a b x -=判断是否0)(=x f ;若是,则有根2a b x -=。否则,继续判断是否0)()(

+)(0x f 0))(('0=-x x x f 设0)('0≠x f ,则=x -0x )(') (00x f x f 。取x 作为原方程新的近似根1x ,然后将1x 作为0x 代入上式。迭代公式为:=+1 k x -0x )(')(k k x f x f 。 三、 实验设备:MATLAB 软件 四、 结果预测 (1)11x = (2)5x = (3)2x =0,09052 五、 实验内容 (1)、在区间[0,1]上用二分法求方程0210=-+x e x 的近似根,要求误差不超 过3105.0-?。 (2)、取初值00=x ,用迭代公式=+1 k x -0x )(') (k k x f x f ,求方程0210=-+x e x 的近似根。要求误差不超过3105.0-?。 (3)、取初值00=x ,用牛顿迭代法求方程0210=-+x e x 的近似根。要求误差 不超过3105.0-?。 六、 实验步骤与实验程序 (1) 二分法 第一步:在MATLAB 软件,建立一个实现二分法的MATLAB 函数文件如下: function x=agui_bisect(fname,a,b,e) %fname 为函数名,a,b 为区间端点,e 为精度 fa=feval(fname,a); %把a 端点代入函数,求fa fb=feval(fname,b); %把b 端点代入函数,求fb if fa*fb>0 error('两端函数值为同号'); end

数值分析实验报告记录

数值分析实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

数值分析实验报告 (第二章) 实验题目: 分别用二分法、牛顿迭代法、割线法、史蒂芬森迭代法求方程 的根,观察不同初始值下的收敛性,并给出结论。 问题分析: 题目有以下几点要求: 1.不同的迭代法计算根,并比较收敛性。 2.选定不同的初始值,比较收敛性。 实验原理: 各个迭代法简述 二分法:取有根区间的重点,确定新的有根区间的区间长度仅为区间长度的一版。对压缩了的有根区间重复以上过程,又得到新的有根区间,其区间长度为的一半,如此反复,……,可得一系列有根区间,区间收敛到一个点即为根。 牛顿迭代法:不动点迭代法的一种特例,具有局部二次收敛的特性。迭代格式为 割线法:是牛顿法的改进,具有超线性收敛的特性,收敛阶为1.618. 迭代格式为 史蒂芬森迭代法:采用不动点迭代进行预估校正。至少是平方收敛的。迭代格式为 这里可采用牛顿迭代法的迭代函数。 实验内容:

1.写出该问题的函数代码如下: function py= f(x) syms k; y=(k^2+1)*(k-1)^5; yy=diff(y,k); py(1)=subs(y,k,x); py(2)=subs(yy,k,x); end 2.分别写出各个迭代法的迭代函数代码如下: 二分法: function y=dichotomie(a,b,e) i=2; m(1)=a; while abs(a-b)>e t=(a+b)/2; s1=f(a); s2=f(b); s3=f(t); if s1(1)*s3(1)<=0 b=t; else a=t; end m(i)=t; i=i+1; end y=[t,i+1,m]; end 牛顿迭代法: function y=NewtonIterative(x,e) i=2; en=2*e;m(1)=x; while abs(en)>=e s=f(x); t=x-s(1)/s(2); en=t-x; x=t; m(i)=t; i=i+1; end y=[x,i+1,m]; end 牛顿割线法: function y=Secant(x1,x2,e) i=3; m(1)=x1,m(2)=x2; while abs(x2-x1)>=e s1=f(x1); s2=f(x2); t=x2-(x2-x1)*s2(1)/(s2(1)-s1( 1)); x1=x2; x2=t; m(i)=t; i=i+1; end

MATLAB计算方法迭代法牛顿法二分法实验报告分析

姓名实验报告成绩 评语: 指导教师(签名) 年月日

说明:指导教师评分后,实验报告交院(系)办公室保存。 实验一 方程求根 一、 实验目的 用各种方法求任意实函数方程0)(=x f 在自变量区间[a ,b]上,或某一点附近的实根。并比较方法的优劣。 二、 实验原理 (1)、二分法 对方程0)(=x f 在[a ,b]内求根。将所给区间二分,在分点2a b x -= 判 断是否0)(=x f ;若是,则有根 2a b x -= 。否则,继续判断是否0)()(

(1)11x =0.09033 (2)5x =0.09052 (3)2x =0,09052 五、 实验内容 (1)、在区间[0,1]上用二分法求方程0210=-+x e x 的近似根,要求误差不 超过 3 105.0-?。 (2)、取初值00=x ,用迭代公式=+1k x -0x ) (') (k k x f x f ,求方程0210=-+x e x 的 近似根。要求误差不超过 3 105.0-?。 (3)、取初值00=x ,用牛顿迭代法求方程0210=-+x e x 的近似根。要求误 差不超过 3 105.0-?。 六、 实验步骤与实验程序 (1) 二分法 第一步:在MATLAB 7.0软件,建立一个实现二分法的MATLAB 函数文件agui_bisect.m 如下: function x=agui_bisect(fname,a,b,e) %fname 为函数名,a,b 为区间端点,e 为精度 fa=feval(fname,a); %把a 端点代入函数,求fa fb=feval(fname,b); %把b 端点代入函数,求fb if fa*fb>0 error('两端函数值为同号'); end %如果fa*fb>0,则输出两端函数值为同号 k=0 x=(a+b)/2 while(b-a)>(2*e) %循环条件的限制

牛顿插值法试验报告

. 牛顿插值法一、实验目的:学会牛顿插值法,并应用算法于实际问题。 x?x)f(二、实验内容:给定函数,已知: 4832401.2)?.?1449138f(2.f.f(20)?1.414214(2.1) 549193.)?1f(2.4516575(f2.3)?1. 三、实验要求:以此作为函数2.15插值多项式在处的值,用牛顿插值法求4 次Newton( 1)2.15?N(2.15)。在MATLAB中用内部函数ezplot绘制出的近似值4次Newton插值多项式的函数图形。 (2)在MATLAB中用内部函数ezplot可直接绘制出以上函数的图形,并与作出的4次Newton插值多项式的图形进行比较。 四、实验过程: 1、编写主函数。打开Editor编辑器,输入Newton插值法主程序语句: function [y,L]=newdscg(X,Y,x) n=length(X); z=x; A=zeros(n,n);A(:,1)=Y';s=0.0; p=1.0; for j=2:n for i=j:n A(i,j)=(A(i,j-1)- A(i-1,j-1))/(X(i)-X(i-j+1)); end end C=A(n,n); for k=(n-1):-1:1 C=conv(C,poly(X(k))); d=length(C);C(d)=C(d)+A(k,k); end y(k)= polyval(C, z); L(k,:)=poly2sym(C); 0 / 3 . %%%%%%%%%%%%%%%%%% t=[2,2.1,2.2,2.3,2.4]; fx=sqrt(t); wucha=fx-Y; 以文件名newdscg.m保存。 2、运行程序。 (1)在MATLAB命令窗口输入: >> X=[2,2.1,2.2,2.3,2.4]; Y =[1.414214,1.449138,1.483240,1.516575,1.549193]; x=2.15;[y,P]=newdscg(X,Y,x) 回车得到:

数值分析实验报告-插值、三次样条(教育教学)

实验报告:牛顿差值多项式&三次样条 问题:在区间[-1,1]上分别取n=10、20用两组等距节点对龙格函数2 1()25f x x 作多项式插值及三次样条插值,对每个n 值,分别画出插值函数及()f x 的图形。 实验目的:通过编程实现牛顿插值方法和三次样条方法,加深对多项式插值的理解。应用所编程序解决实际算例。 实验要求: 1. 认真分析问题,深刻理解相关理论知识并能熟练应用; 2. 编写相关程序并进行实验; 3. 调试程序,得到最终结果; 4. 分析解释实验结果; 5. 按照要求完成实验报告。 实验原理: 详见《数值分析 第5版》第二章相关内容。 实验内容: (1)牛顿插值多项式 1.1 当n=10时: 在Matlab 下编写代码完成计算和画图。结果如下: 代码: clear all clc x1=-1:0.2:1; y1=1./(1+25.*x1.^2); n=length(x1); f=y1(:); for j=2:n for i=n:-1:j f(i)=(f(i)-f(i-1))/(x1(i)-x1(i-j+1)); end end syms F x p ; F(1)=1;p(1)=y1(1); for i=2:n F(i)=F(i-1)*(x-x1(i-1)); p(i)=f(i)*F(i);

end syms P P=sum(p); P10=vpa(expand(P),5); x0=-1:0.001:1; y0=subs(P,x,x0); y2=subs(1/(1+25*x^2),x,x0); plot(x0,y0,x0,y2) grid on xlabel('x') ylabel('y') P10即我们所求的牛顿插值多项式,其结果为:P10(x)=-220.94*x^10+494.91*x^8-9.5065e-14*x^7-381.43*x^6-8.504e-14*x^5+123.36*x^4+2.0202e-1 4*x^3-16.855*x^2-6.6594e-16*x+1.0 并且这里也能得到该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.1)。 Fig.1 牛顿插值多项式(n=10)函数和原函数图形 从图形中我们可以明显的观察出插值函数在两端点处发生了剧烈的波动,产生了极大的误差,即龙格现象,当n=20时,这一现象将更加明显。 1.2 当n=20时: 对n=10的代码进行修改就可以得到n=20时的代码。将“x1=-1:0.2:1;”改为“x1=-1:0.1:1;”即可。运行程序,我们得到n=20时的牛顿插值多项式,结果为:P20(x)= 260188.0*x^20 - 1.0121e6*x^18 + 2.6193e-12*x^17 + 1.6392e6*x^16 + 2.248e-11*x^15 - 1.4429e6*x^14 - 4.6331e-11*x^13 + 757299.0*x^12 + 1.7687e-11*x^11 - 245255.0*x^10 + 2.1019e-11*x^9 + 49318.0*x^8 + 3.5903e-12*x^7 - 6119.2*x^6 - 1.5935e-12*x^5 + 470.85*x^4 + 1.3597e-14*x^3 - 24.143*x^2 - 1.738e-14*x + 1.0 同样的,这里得到了该牛顿插值多项式的在[-1,1]上的图形,并和原函数进行对比(见Fig.2)。

基于MATLAB牛顿拉夫逊法进行潮流计算

>> %本程序的功能是用牛顿拉夫逊法进行潮流计算n=input('请输入节点数:n='); nl=input('请输入支路数:nl='); isb=input('请输入平衡母线节点号:isb='); pr=input('请输入误差精度:pr='); B1=input('请输入由各支路参数形成的矩阵:B1='); B2=input('请输入各节点参数形成的矩阵:B2='); Y=zeros(n); e=zeros(1,n);f=zeros(1,n);V=zeros(1,n); O=zeros(1,n);S1=zeros(nl); for i=1:nl 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)); Y(q,p)=Y(p,q); Y(q,q)=Y(q,q)+1./(B1(i,3)*B1(i,5)^2)+B1(i,4)./2; Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4)./2; end %求导纳矩阵 disp('导纳矩阵Y='); disp(Y); G=real(Y);B=imag(Y); for i=1:n e(i)=real(B2(i,3)); f(i)=imag(B2(i,3)); V(i)=B2(i,4); end for i=1:n S(i)=B2(i,1)-B2(i,2); B(i,i)=B(i,i)+B2(i,5); end P=real(S);Q=imag(S); ICT1=0;IT2=1;N0=2*n;N=N0+1;a=0; while IT2~=0 IT2=0;a=a+1; for i=1:n if i~=isb C(i)=0; D(i)=0; for j1=1:n C(i)= C(i)+G(i,j1)*e(j1)-B(i,j1)*f(j1); D(i)= D(i)+G(i,j1)*f(j1)+B(i,j1)*e(j1); end

数值计算(二分法、简单迭代法、Newton迭代法、弦截法(割线法、双点弦法))

本科生实验报告 实验课程数值计算方法 学院名称信息科学与技术学院 专业名称计算机科学与技术 学生姓名 学生学号 指导教师 实验地点 实验成绩 二〇一六年五月二〇一六年五月

实验一非线性方程求根 1.1问题描述 实验目的:掌握非线性方程求根的基本步骤及方法,。 实验内容:试分别用二分法、简单迭代法、Newton迭代法、弦截法(割线法、双点弦法),求x5-3x3+x-1= 0 在区间 [-8,8]上的全部实根,误差限为10-6。 要求:讨论求解的全过程,对所用算法的局部收敛性,优缺点等作分析及比较, 第2章算法思想 2.1二分法 思想:在函数的单调有根区间内,将有根区间不断的二分,寻找方程的解。 步骤: 1.取中点mid=(x0+x1)/2 2.若f(mid)=0,则mid为方程的根,否则比较与两端的符号,若与 f(x0) 异号,则根在[x0,mid]之间,否则在[mid,x1]之间。 3并重复上述步骤,直达达到精度要求,则mid为方程的近似解。

2.2 简单迭代法 思想:迭代法是一种逐次逼近的方法,它是固定公式反复校正跟的近似值,使之逐步精确,最后得到精度要求的结果。 步骤:1.构造迭代公式f(x),迭代公式必须是收敛的。 2.计算x1,x1=f(x0). 3.判断|x1-x0|是否满足精度要求,如不满足则重复上述步骤。 4.输出x1,即为方程的近似解。

开始 输入x0,e X1=f(x0)|x1-x0|

电力系统稳态分析牛顿拉夫逊法

0引言 潮流是配电网络分析的基础,用于电网调度、运行分析、操作模拟和设计规划,同时也是电压优化和网络接线变化所要参考的内容。潮流计算通过数值仿真的方法把电力系统的详细运行情况呈现给工作人员,从而便于研究系统在给定条件下的稳态运行特点。随着市场经济的发展,经济利益是企业十分看重的,而线损却是现阶段阻碍企业提高效益的一大因素。及时、准确的潮流计算结果,可以给出配电网的潮流分布、理论线损及其在网络中的分布,从而为配电网的安全经济运行提供参考。从数学的角度来看,牛顿-拉夫逊法能有效进行非线性代数方程组的计算且具有二次收敛的特点,具有收敛快、精度高的特点,在输电网中得到广泛应用。随着现代计算机技术的发展,利用编程和相关软件,可以更好、更快地实现配电网功能,本文就是结合牛顿-拉夫逊法的基本原理,利用C++程序进行潮流计算,计算结果表明该方法具有良好的收敛性、可靠性及正确性。 1牛顿-拉夫逊法基本介绍 1.1潮流方程 对于N 个节点的电力网络(地作为参考节点不包括在内),如果网络结构和元件参数已知,则网络方程可表示为: =&& YV I (1-1) 式中,Y 为N*N 阶节点导纳矩阵;&V 为N*1维节点电压列向量;&I 为N*1维节点注入电流列向量。如果不计网络元件的非线性,也不考虑移相变压器,则Y 为对称矩阵。 电力系统计算中,给定的运行变量是节点注入功率,而不是节点注入电流,这两者之间有如下关系: ??=&&&EI S (1-2) 式中,&S 为节点的注入复功率,是N*1维列矢量;? &S 为&S 的共轭;

??i diag ??=???? &&E V 是由节点电压的共轭组成的N*N 阶对角线矩阵。 由(1-1)和(1-2),可得: ??=&&&S EYV 上式就是潮流方程的复数形式,是N 维的非线性复数代数方程组。将其展开,有: ?i i i ij j j i P jQ V Y V ∈-=∑&& j=1,2,….,N (1-3) 式中,j i ∈表示所有和i 相连的节点j ,包括j i =。 将节点电压用极坐标表示,即令i i i V V θ=∠&,代入式(1-3)中则有: ()i i i i ij ij j j j i P jQ V G jB V θθ∈-=∠-+∠∑ ()()cos sin i j ij ij ij ij j i V V G jB j θθ∈=+-∑ 故有: () ()cos sin sin cos i i j ij ij ij ij j i i i j ij ij ij ij j i P V V G B Q V V G B θθθθ∈∈?=+?? =-?? ∑∑ i=1,2,…,N (1-4) 式(1-4)是用极坐标表示的潮流方程。 而节点功率误差: (cos sin )θθ∈?=-+∑SP i i i j ij ij ij ij j i P P V V G B (1-5) (cos sin )θθ∈?=--∑SP i i i j ij ij ij ij j i Q Q V V G B (1-6) 式中:SP i P ,SP i Q 为节点i 给定的有功功率及无功功率。 1.2牛顿-拉夫逊法基本原理 1.2.1牛拉法的一般描述 牛拉法是把非线性方程式的求解过程变成反复对相应的线性方程式的求解过程,即非线性问题通过线性化逐步近似,这就是牛拉法的核心。下面以非线性方程式的求解过程来进行说明。 设电力网络的节点功率方程一般形式如下:

matlab(迭代法-牛顿插值)Word版

实验报告内容: 一:不动点迭代法解方程 二:牛顿插值法的MATLAB实现 完成日期:2012年6月21日星期四 数学实验报告一 日期:2012-6-21

所以,确定初值为x0=1 二:不断迭代 算法: 第一步:将f(x0)赋值给x1 第二步:确定x1-x0的绝对值大小,若小于给定的误差值,则将x1当做方程的解,否则回到第一步 编写计算机程序: clear f=inline('0.5*sin(x)+0.4'); x0=1; x1=f(x0); k=1; while abs(x1-x0)>=1.0e-6 x0=x1; x1=f(x0); k=k+1; fprintf('k=%.0f,x0=%.9f,x1=%.9f\n',k,x0,x1) end 显示结果如下: k=2,x0=0.820735492,x1=0.765823700 k=3,x0=0.765823700,x1=0.746565483 k=4,x0=0.746565483,x1=0.739560873

k=6,x0=0.736981783,x1=0.736027993 k=7,x0=0.736027993,x1=0.735674699 k=8,x0=0.735674699,x1=0.735543758 k=9,x0=0.735543758,x1=0.735495216 k=10,x0=0.735495216,x1=0.735477220 k=11,x0=0.735477220,x1=0.735470548 k=12,x0=0.735470548,x1=0.735468074 k=13,x0=0.735468074,x1=0.735467157 >>。。。 以下是程序运行截图:

牛顿迭代法实验报告

用牛顿迭代法求非线性方程的根 一、 实验题目 求方程()013=--=x x x f 在5.1附近的根。 二、 实验引言 (1)实验目的 1. 用牛顿迭代法求解方程的根 2. 了解迭代法的原理 3. 改进和修缮迭代法 (2)实验意义 牛顿迭代法就是众多解非线性方程迭代法中比较普遍的一种,求解方便实用。 三、 算法设计 (1)基本原理 给定初始值0x ,ε为根的容许误差,η为()x f 的容许误差,N 为迭代次数的容许值。 1.如果()0='x f 或迭带次数大于N ,则算法失败,结束;否则执行2. 2.计算()() 0001x f x f x x '-=. 3.若ε<-21x x 或()η<1x f ,则输出1x ,程序结束;否则执行4. 4.令10x x =,转向1. (2)流程图

四、程序设计program nndd01 implicit none real,parameter::e=0.005 real,parameter::n=9 real::x1 real::x0=1.5 integer::k real,external::f,y do k=1,9 if (y(x0)==0) then write(*,*)"失败" else x1=x0-f(x0)/y(x0) if (abs(x1-x0)

else x0=x1 end if end if end do end function f(x) implicit none real::f real::x f=x*x*x-x-1 return end function function y(x) implicit none real::y real::x y=3*x*x-1 return end function 五、求解结果 3 1.324718 4 1.324718 5 1.324718 6 1.324718 7 1.324718 8 1.324718 9 1.324718 六、算法评价及讨论 1.在求解在1.5处附近的根,不难发现在输入区间左端值为1时 需要迭代6次,而输入区间左端值为1.5时,却只要4次。初

数值分析课程实验报告-拉格朗日和牛顿插值法

《数值分析》课程实验报告 用拉格朗日和牛顿插值法求解函数值 算法名称用拉格朗日和牛顿插值法求函数值 学科专业xxxxx 作者姓名xxxx 作者学号xxxxx 作者班级xxxxxx xxx大学 二〇一五年十二月

《数值分析》课程实验报告

得到的近似值为。 拉格朗日插值模型简单,结构紧凑,是经典的插值法。但是由于拉格朗日的插值多项式和每个节点都有关,当改变节点个数时,需要重新计算。且当增大插值阶数时容易出现龙格现象。 2.牛顿插值法 在命令窗口输入: x=[ ]; y=[ ]; xt=; [yt,N]=NewtInterp(x,y,xt) z=::2; yz=subs(N,'t',z); figure; plot(z,sqrt(z),'--r',z,yz,'-b') hold on plot(x,y,'marker','+') hold on plot(xt,yt,'marker','o') h=legend('$\sqrt{x}$','牛顿','$(x_k,y_k)$','$x=$'); set(h,'Interpreter','latex') xlabel('x') ylabel('y') 得到结果及图像如下: yt = N = - *t^4 + *t^3 - *t^2 + *t +

得到√的近似值为,插值函数为 N =- *t^4 + *t^3 - *t^2 + *t + , 其计算精度是相当高的。 Lagrange插值法和Newton插值法解决实际问题中关于只提供复杂的离散数据的函数求值问题,通过将所考察的函数简单化,构造关于离散数据实际函数f(x)的近似函数P(x),从而可以计算未知点出的函数值,是插值法的基本思路。 实际上Lagrange插值法和Newton插值法是同一种方法的两种变形,其构造拟合函数的思路是相同的,而实验中两个实际问题用两种算法计算出结果是相同的。

牛顿——拉夫逊法进行潮流计算

%本程序的功能是用牛顿——拉夫逊法进行潮流计算 % B1矩阵:1、支路首端号;2、末端号;3、支路阻抗;4、支路对地电纳 % 5、支路的变比;6、支路首端处于K侧为1,1侧为0 % B2矩阵:1、该节点发电机功率;2、该节点负荷功率;3、节点电压初始值% 4、PV节点电压V的给定值;5、节点所接的无功补偿设备的容量% 6、节点分类标号:1为平衡节点(应为1号节点);2为PQ节点;% 3为PV节点; clear; n=10;%input('请输入节点数:n='); nl=10;%input('请输入支路数:nl='); isb=1;%input('请输入平衡母线节点号:isb='); pr=0.00001;%input('请输入误差精度:pr='); B1=[1 2 0.03512+0.08306i 0.13455i 1 0; 2 3 0.0068+0.18375i 0 1.02381 1; 1 4 0.05620+0.13289i 0.05382i 1 0; 4 5 0.00811+0.24549i 0 1.02381 1; 1 6 0.05620+0.13289i 0.05382i 1 0; 4 6 0.04215+0.09967i 0.04037i 1 0; 6 7 0.0068+0.18375i 0 1.02381 1; 6 8 0.02810+0.06645i 0.10764i 1 0; 8 10 0.00811+0.24549i 0 1 1; 8 9 0.03512+0.08306i 0.13455i 1 0] B2=[0 0 1.1 1.1 0 1; 0 0 1 0 0 2; 0 0.343+0.21256i 1 0 0 2; 0 0 1 0 0 2; 0 0.204+0.12638i 1 0 0 2; 0 0 1 0 0 2; 0 0.306+0.18962i 1 0 0 2; 0 0 1 0 0 2; 0.5 0 1.1 1.1 0 3; 0 0.343+0.21256i 1 0 0 2] ;%input('请输入各节点参数形成的矩阵:B2='); Y=zeros(n);e=zeros(1,n);f=zeros(1,n);V=zeros(1,n);sida=zeros(1,n);S1=zeros(nl); % % %--------------------------------------------------- for i=1:nl %支路数 if B1(i,6)==0 %左节点处于1侧 p=B1(i,1);q=B1(i,2); else %左节点处于K侧 p=B1(i,2);q=B1(i,1); end

牛顿迭代法的实验报告

牛顿迭代法实验报告 1.功能 本程序采用牛顿法,求实系数高次代数方程 f(x)=a0x n+a1x n-1+…+a n-1x+a n=0(a n≠0)(1) 的在初始值x0附近的一个根。 2.使用说明 (1)函数语句 Y=NEWTON_1(A,N,X0,NN,EPS1) 调用M文件newton_1.m。 (2)参数说明 A n+1元素的一维实数组,输入参数,按升幂存放方程系数。 N整变量,输入参数,方程阶数。 X0 实变量,输入参数,初始迭代值。 NN整变量,输入参数,允许的最大迭代次数。 EPS1实变量,输入参数,控制根的精度。 3.方法简介 解非线性议程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数 f(x)=f(x0)+(x-x0)fˊ(x0)+(x-x0)2 !2) (0x f'' +… 取其线性部分,作为非线性方程f(x)=0的近似方程,则有 f(x0)+fˊ(x0)(x-x0)=0 设fˊ(x0)≠0则其解为 x1=x0-f(x0)/fˊ(x0) 再把f(x)在x1附近展开成泰勒级数,也取其线性部分作f(x)=0的近似方程。若f(x1)≠0,则得 x2=x1-f(x1)/fˊ(x1) 这样,得到牛顿法的一个迭代序列 x n+1=x n-f(x n)/fˊ(x n) 4.newton_1.m程序

function y=newton_1(a,n,x0,nn,eps1) x(1)=x0; b=1; i=1; while(abs(b)>eps1*x(i)) i=i+1; x(i)=x(i-1)-n_f(a,n,x(i-1))/n_df(a,n,x(i-1)); b=x(i)-x(i-1); if(i>nn)error(ˊnn is fullˊ); return; end end y=x(i); i 5.程序附注 (1)程序中调用n_f.m和n_df.m文件。n_f.m是待求根的实数代数方程的函数,n_df.m 是方程一阶导数的函数。由使用者自己编写。 (2)牛顿迭代法的收敛速度:如果f(x)在零点附近存在连续的二阶微商,ξ是f(x)的一个重零点,且初始值x0充分接近于ξ,那么牛顿迭代是收敛的,其收敛速度是二阶的,即平方收敛速度。 6.例题 用牛顿法求下面方程的根 f(x)=x3+2x2+10x-20 7.运行结果 >>a=[1,2,10,-20] ; >>n=3; >>x0=1; >>nn=1000; >>eps1=1e-8; >>y=newton_1(a,n,x0,nn,eps1)

牛顿插值法实验报告

牛顿插值法 一、实验目的:学会牛顿插值法,并应用算法于实际问题。 二、实验内容:给定函数 x x f =)(,已知: 414214.1)0.2(=f 449138.1)1.2(=f 483240.1)2.2(=f 516575.1)3.2(=f 549193.1)4.2(=f 三、实验要求: (1)用牛顿插值法求4次Newton 插值多项式在2.15处的值,以此作为函数的近似值)15.2(15.2N ≈。在MATLAB 中用内部函数ezplot 绘制出4次Newton 插值多项式的函数图形。 (2)在MATLAB 中用内部函数ezplot 可直接绘制出以上函数的图形,并与作出的4次Newton 插值多项式的图形进行比较。 四、实验过程: 1、编写主函数。打开Editor 编辑器,输入Newton 插值法主程序语句: function [y,L]=newdscg(X,Y,x) n=length(X); z=x; A=zeros(n,n);A(:,1)=Y';s=0.0; p=1.0; for j=2:n for i=j:n A(i,j)=(A(i,j-1)- A(i-1,j-1))/(X(i)-X(i-j+1)); end end C=A(n,n); for k=(n-1):-1:1 C=conv(C,poly(X(k))); d=length(C);C(d)=C(d)+A(k,k); end y(k)= polyval(C, z); L(k,:)=poly2sym(C);

%%%%%%%%%%%%%%%%%% t=[2,2.1,2.2,2.3,2.4]; fx=sqrt(t); wucha=fx-Y; 以文件名newdscg.m保存。 2、运行程序。 (1)在MATLAB命令窗口输入: >> X=[2,2.1,2.2,2.3,2.4]; Y =[1.414214,1.449138,1.483240,1.516575,1.549193]; x=2.15;[y,P]=newdscg(X,Y,x) 回车得到: y =1.4663 wucha =1.0e-06 * -0.4376 -0.3254 -0.3026 0.0888 0.3385 P = - (4803839603609061*x^4)/2305843009213693952 + (7806239355294329*x^3)/288230376151711744 - (176292469178709*x^2)/1125899906842624 + (1624739243112817*x)/2251799813685248 + 1865116246031207/4503599627370496 (2)在MATLAB命令窗口输入: >> v=[0,6,-1,3]; >> ezplot(P),axis(v),grid >> hold on >> x=0:0.1:6; >> yt=sqrt(x);plot(x,yt,':') >> legend('插值效果','原函数') >> xlabel('X') >> ylabel('Y') >>title('Newton插值与原函数比较') 回车即可得到图像1-1。

相关文档
最新文档