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

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

姓名实验报告成绩

评语:

指导教师(签名)

年月日

说明:指导教师评分后,实验报告交院(系)办公室保存。

实验一 方程求根

一、 实验目的

用各种方法求任意实函数方程0)(=x f 在自变量区间[a ,b]上,或某一点附近的实根。并比较方法的优劣。 二、 实验原理 (1)、二分法

对方程0)(=x f 在[a ,b]内求根。将所给区间二分,在分点2a b x -=

断是否0)(=x f ;若是,则有根

2a b x -=

。否则,继续判断是否0)()(

若是,则令x b =,否则令x a =。否则令x a =。重复此过程直至求出方程

0)(=x f 在[a,b]中的近似根为止。

(2)、迭代法

将方程0)(=x f 等价变换为x =ψ(x )形式,并建立相应的迭代公式

=+1k x ψ(x )。

(3)、牛顿法

若已知方程 的一个近似根0x ,则函数在点0x 附近可用一阶泰勒多项式))((')()(0001x x x f x f x p -+=来近似,因此方程0)(=x f 可近似表示为

+)(0x f 0))(('0=-x x x f 设0)('0≠x f ,则=x -0x )(')

(00x f x f 。取x 作为原方程新的近

似根1x ,然后将1x 作为0x 代入上式。迭代公式为:=+1k x -0x )(')

(k k x f x f 。

三、 实验设备:MATLAB 7.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) %循环条件的限制

fx=feval(fname,x);%把x代入代入函数,求fx

if fa*fx<0%如果fa与fx同号,则把x赋给b,把fx赋给fb

b=x;

fb=fx;

else

%如果fa与fx异号,则把x赋给a,把fx赋给fa

a=x;

fa=fx;

end

k=k+1

%计算二分了多少次

x=(a+b)/2 %当满足了一定精度后,跳出循环,每次二分,都得新的区间断点a和b,则近似解为x=(a+b)/2

end

第二步:在MATLAB命令窗口求解方程f(x)=e^x+10x-2=0,即输入如下>>fun=inline('exp(x)+10*x-2')

>> x=agui_bisect(fun,0,1,0.5*10^-3)

第三步:得到计算结果,且计算结果为

(2) 迭代法

第一步:第一步:在MATLAB 7.0软件,建立一个实现迭代法的MATLAB 函数文件agui_main.m 如下: function x=agui_main(fname,x0,e)

%fname 为函数名dfname 的函数fname 的导数, x0为迭代初值 %e 为精度,N 为最大迭代次数(默认为100) N=100;

x=x0; %把x0赋给x ,再算x+2*e 赋给x0

x0=x+2*e;

k=0;

while abs(x0-x)>e&k

k=k+1 %显示迭代的第几次

x0=x;

x=(2-exp(x0))/10 %迭代公式

disp(x)%显示x

end

if k==N warning('已达到最大迭代次数');end %如果K=N则输出已达到最大迭代次数

第二步:在MATLAB命令窗口求解方程f(x)=e^x+10x-2=0,即输入如下>>fun=inline('exp(x)+10*x-2')

>> x=agui_main(fun,0,1,0.5*10^-3)

第三步:得出计算结果,且计算结果为

以下是结果的屏幕截图

(3) 牛顿迭代法

第一步:第一步:在MATLAB 7.0软件,建立一个实现牛顿迭代法的MATLAB 函数文件=agui_newton.m 如下: function x=agui_newton(fname,dfname,x0,e)

%fname为函数名dfname的函数fname的导数, x0为迭代初值

%e为精度,N为最大迭代次数(默认为100)

N=100;

x=x0; %把x0赋给x,再算x+2*e赋给x0

x0=x+2*e;

k=0;

while abs(x0-x)>e&k

k=k+1 %显示迭代的第几次

x0=x;

x=x0-feval(fname,x0)/feval(dfname,x0);%牛顿迭代公式

disp(x)%显示x

end

if k==N warning('已达到最大迭代次数');end %如果K=N则输出已达到最大迭代次数

第二步:在MATLAB命令窗口求解方程f(x)=e^x+10x-2=0,即输入如下>>fun=inline('exp(x)+10*x-2')

>> dfun=inline('exp(x)+10')

>> x=agui_newton(fun,dfun,0,0.5*10^-3)

第三步:得出结果,且结果为

以下是结果的屏幕截图

七、实验结果

(1)11x=0.09033 (2)5x=0.09052 (3)2x=0,09052

八、实验分析与结论

由上面的对二分法、迭代法、牛顿法三种方法的三次实验结果,我们可以得出这样的结论:二分法要循环k=11次,迭代法要迭代k=5次,牛

顿法要迭代k=2次才能达到精度为3105.0-?的要求,而且方程0

210=-+x e x

的精确解经计算,为0.0905250, 计算量从大到小依次是:二分法,迭代法,牛顿法。由此可知,牛顿法和迭代法的精确度要优越于二分法。而这三种方法中,牛顿法不仅计算量少,而且精确度高。从而可知牛顿迭代法收敛速度明显加快。可是迭代法是局部收敛的,其收敛性与初值x0有关。二分法收敛虽然是速度最慢,但也有自己的优势,可常用于求精度不高的近似根。迭代法是逐次逼近的方法,原理简单,但存在收敛性和收敛速度的问题。对与不同的题目,可以从三种方法的优缺点考虑用哪一种方法比较好。

牛顿插值法原理及应用

牛顿插值法 插值法是利用函数f (x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值。如果这特定函数是多项式,就称它为插值多项式。当插值节点增减时全部插值基函数均要随之变化,这在实际计算中很不方便。为了克服这一缺点,提出了牛顿插值。牛顿插值通过求各阶差商,递推得到的一个公式: f(x)=f[x0]+f[x0,x1](x-x0)+f[x0,x1,x2](x-x0)(x-x1)+...f[x0,...xn](x-x0 )...(x-xn-1)+Rn(x)。 插值函数 插值函数的概念及相关性质[1] 定义:设连续函数y-f(x) 在区间[a,b]上有定义,已知在n+1个互异的点 x0,x1,…xn上取值分别为y0,y1,…yn (设a≤ x1≤x2……≤xn≤b)。若在函数类中存在以简单函数P(x) ,使得P(xi)=yi,则称P(x) 为f(x)的插值函数. 称x1,x2,…xn 为插值节点,称[a,b]为插值区间。 定理:n次代数插值问题的解存在且唯一。

牛顿插值法C程序 程序框图#include void main() { float x[11],y[11][11],xx,temp,newton; int i,j,n; printf("Newton插值:\n请输入要运算的值:x="); scanf("%f",&xx); printf("请输入插值的次数(n<11):n="); scanf("%d",&n); printf("请输入%d组值:\n",n+1); for(i=0;i

基于极坐标的牛顿拉夫逊潮流计算

前言 电力系统潮流计算是研究电力系统稳态运行情况的一种计算,它根据给定的运行件及系统接线情况确定整个电力系统各部分的运行状态。在电力系统规划设计和现有电力系统运行方式的研究中,都需要利用潮流计算来定量分析、比较供电方案或运行方式的合理性、可靠性和经济性。本次课程设计任务是闭式网络的潮流计算,用到的方法为牛顿拉夫逊极坐标法潮流计算。 牛顿法是数学中解决非线性方程式的典型方法,有较好的收敛性。解决电力系统潮流计算问题是以导纳距阵为基础的,因此,只要在迭代过程中尽可能保持方程式系数距阵的稀疏性,就可以大大提高牛顿法潮流程序的放率。自从20 世纪60 年代中期利用了最佳顺序消去法以后,牛顿法在收敛性、内存要求、速度方面都超过了阻抗法,成为直到目前仍在广泛采用的优秀方法。

目录 1任务书 (2) 2.模型简介及等值电路 (3) 3.设计原理 (4) 4.修正方程的建立 (7) 5.程序流程图及MATLAB程序编写 (9) 6.结果分析 (15) 7.设计总结 (25) 8.参考文献 (26)

《电力系统分析》 课程设计任务书 题目极坐标表示的牛顿拉夫逊法潮流计算程序设计学生姓名学号专业班级

设计内容与要求1. 设计要求 掌握MATLAB语言编程方法;理解和掌握运用计算机进行潮流计算的基本算法原理;针对某一具体电网,进行潮流计算程序设计。 其目的在于加深学生对电力系统稳态分析中课程中基本概念和计算方法的理解,培养学生运用所学知识分析和解决问题的能力。 2. 内容 1)学习并掌握MATLAB语言。 2)掌握变压器非标准变比概念及非标准变比变压器的等值电路。掌握节点导纳矩阵的概念及导纳矩阵的形成和修改方法。 3)掌握电力系统功率方程、变量和节点分类。 4)掌握利用极坐标表示的牛-拉法进行潮流计算的方法和步骤。 5)选择一个某一具体电网,编制程序流程框图。 6)利用MATLAB语言编写该模型的潮流计算程序,并上机调试程序,对计算结果进行分析。 7)整理课程设计论文。 起止时间2013 年7 月 4 日至2013 年7月10日指导教师签名年月日 系(教研室)主任签 名 年月日学生签名年月日 2 模型简介及等值电路 2.1课程设计模型:模型3

插值法数值上机实验报告

插值法数值上机实验报告 实验题目: 利用下列条件做插值逼近,并与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插值图像对原函数图像的逼近情形。见下图:

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

matlab实现数值分析报告插值及积分

Matlab实现数值分析插值及积分 摘要: 数值分析(numerical analysis)是研究分析用计算机求解数学计算问题的数值计算方法及其理论的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究对象。在实际生产实践中,常常将实际问题转化为数学模型来解决,这个过程就是数学建模。学习数值分析这门课程可以让我们学到很多的数学建模方法。 分别运用matlab数学软件编程来解决插值问题和数值积分问题。题目中的要求是计算差值和积分,对于问题一,可以分别利用朗格朗日插值公式,牛顿插值公式,埃特金逐次线性插值公式来进行编程求解,具体matlab代码见正文。编程求解出来的结果为:=+。 其中Aitken插值计算的结果图如下: 对于问题二,可以分别利用复化梯形公式,复化的辛卜生公式,复化的柯特斯公式编写程序来进行求解,具体matlab代码见正文。编程求解出来的结果为: 0.6932 其中复化梯形公式计算的结果图如下:

问题重述 问题一:已知列表函数 表格 1 分别用拉格朗日,牛顿,埃特金插值方法计算。 问题二:用复化的梯形公式,复化的辛卜生公式,复化的柯特斯公式计算积分,使精度小于5。 问题解决 问题一:插值方法 对于问题一,用三种差值方法:拉格朗日,牛顿,埃特金差值方法来解决。 一、拉格朗日插值法: 拉格朗日插值多项式如下: 首先构造1+n 个插值节点n x x x ,,,10 上的n 插值基函数,对任一点i x 所对应的插值基函数 )(x l i ,由于在所有),,1,1,,1,0(n i i j x j +-=取零值,因此)(x l i 有因子 )())(()(110n i i x x x x x x x x ----+- 。又因)(x l i 是一个次数不超过n 的多项式,所以只 可能相差一个常数因子,固)(x l i 可表示成: )())(()()(110n i i i x x x x x x x x A x l ----=+- 利用1)(=i i x l 得:

牛顿拉夫逊法潮流计算

摘要 本文,首先简单介绍了基于在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

PQ分解法潮流计算实验

xxxx实验报告 学生姓名:学号:专业班级: 实验类型:□验证□综合■设计□创新实验日期:实验成绩: 一、实验项目名称 P-Q分解法潮流计算实验 二、实验目的与要求: 目的:电力系统分析的潮流计算是电力系统分析的一个重要的部分。通过对电力系统潮流分布的分析和计算,可进一步对系统运行的安全性,经济性进行分析、评估,提出改进措施。电力系统潮流的计算和分析是电力系统运行和规划工作的基础。 潮流计算是指对电力系统正常运行状况的分析和计算。通常需要已知系统参数和条件,给定一些初始条件,从而计算出系统运行的电压和功率等;潮流计算方法很多:高斯-塞德尔法、牛顿-拉夫逊法、P-Q分解法、直流潮流法,以及由高斯-塞德尔法、牛顿-拉夫逊法演变的各种潮流计算方法。 本实验采用P-Q分解法进行电力系统分析的潮流计算程序的编制与调试,获得电力系统中各节点电压,为进一步进行电力系统分析作准备。通过实验教学加深学生对电力系统潮流计算原理的理解和计算,初步学会运用计算机知识解决电力系统的问题,掌握潮流计算的过程及其特点。熟悉各种常用应用软件,熟悉硬件设备的使用方法,加强编制调试计算机程序的能力,提高工程计算的能力,学习如何将理论知识和实际工程问题结合起来。 要求:编制调试电力系统潮流计算的计算机程序。程序要求根据已知的电力网的数学模型(节点导纳矩阵)及各节点参数,完成该电力系统的潮流计算,要求计算出节点电压、功率等参数。 三、主要仪器设备及耗材 每组计算机1台、相关计算软件1套 四、实验内容: 1.理论分析: P-Q分解法是从改进和简化牛顿法潮流程序的基础上提出来的,它的基本思想是:把节点功率表示为电压向量的极坐标方程式,抓住主要矛盾,以有功功率误差作为修正电压向量角度的依据,以无功功率误差作为修正电压幅值的依据,把有功功率和无功功率迭代分开来进行。 牛顿法潮流程序的核心是求解修正方程式,当节点功率方程式采取极坐标系统时,

数值分析实验报告记录

数值分析实验报告记录

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

数值分析实验报告 (第二章) 实验题目: 分别用二分法、牛顿迭代法、割线法、史蒂芬森迭代法求方程 的根,观察不同初始值下的收敛性,并给出结论。 问题分析: 题目有以下几点要求: 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

数值方法C++代码大全上(包括二分法迭代法牛顿法等等)

1.二分法 #include #include #include //调用fabs函数。 double f(double x) //定义函数F(x)。 { return 2*x*x*x-x-1; } void main() { double a,b,w,x; cout<<"请输入方程根的区间[a,b]及误差w:"; cin>>a>>b>>w; x=(a+b)/2; while(fabs(f(x))>w&&fabs(a-b)>w){ //用while循环控制中值折算的条件。if(f(x)*f(b)<0) a=x; //进行二分,缩小求值范围。else if(f(a)*f(x)<0) b=x; x=(a+b)/2; } cout< #include #include #include using namespace std; typedef double (*pFun)(double x); double getIterativeValue(double x) {

return pow((x+1)/2,(double)1.0/3); } double Solve(pFun f,double x,double e,int n) { double res; while(n--) { res = f(x); if(fabs(res - x) < e) { outPrint("第%d次次迭代以后返回值为:%0.7lf \n",10-n,res); break; } else x = res; outPrint("第%d次迭代以后x值为:%0.7lf\n ",10-n,x); } return res; } int main() { cout << setprecision(7); double x,e; cout << "输入初值和精度:" << endl; cin >> x >> e; cout << Solve(getIterativeValue,x,e,10) << endl; system("pause"); return 0; } 3.牛顿法 #include #include #include #include using namespace std;

牛顿插值法试验报告

. 牛顿插值法一、实验目的:学会牛顿插值法,并应用算法于实际问题。 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) 回车得到:

数值分析报告-二分法和牛顿法方程求根

《数值分析》实验报告一 姓名: 周举 学号: PB09001046

实验一 一、实验名称 方程求根 二、实验目的与要求: 通过对二分法和牛顿法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点; 比较二者的计算速度和计算精度。 三、实验内容: 通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点 。 (一)二分法 算法:给定区间[a,b],并设f (a )与f (b )符号相反,取δ为根的容许误差,ε为值的容许误差。 (1)令c=(a+b)/2 (2)如果(c-a)< δ或)(c f <ε,则输出c ,结束;否则执行(3) (3)如果f(a)f(c)<0,则令)()(,c f b f c b ←←;否则,则令 )()(,c f a f c a ←←,重复(1),(2),(3)。 (二)牛顿迭代法:给定初值0x ,ε为根的容许误差,η为)(x f 的容 许误差,N 为迭代次数的容许值。 (1)如果)(x f <η或迭代次数大于N ,则算法结束;否则执行(2)。

(2)计算)('/)(0001x f x f x x -= (3)若 < 或 < ,则输出 ,程序结束;否则执行(4)。 (4)令 = ,转向(1)。 四、实验题目与程序设计 1、二分法 3.1.1、用二分法求方程 a. f(x)= x x tan 1--在区间[0,π/2]上的根, c. f(x)=6cos 22-++-x e x x 在区间[1,3]上的根。 源程序: 3.1.1.a #include #include void main() { float a,b;double c,y,z; printf("plese input two number a and b:\n"); scanf("%f%f",&a,&b); c=(a+b)/2; y=1/c-tan(c); printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f\n",a,b,b-a,c,y); while(fabs(b-a)>0.00001|| fabs(y)>0.00001) { z=1/a-tan(a); if(z*y<0) b=c; else a=c; c=(a+b)/2; y=1/c-tan(c); printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f\n",a,b,b-a,c,y); } } x x 01-ε)(1x f ηx 1x 0x 1

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

%本程序的功能是用牛顿——拉夫逊法进行潮流计算 % 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,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牛顿插值法例题与程序

题目一:多项式插值 某气象观测站在8:00(AM )开始每隔10分钟对天气作如下观测,用三次多项式插值函数(Newton )逼近如下曲线,插值节点数据如上表,并求出9点30分该地区的温度(x=10)。 二、数学原理 假设有n+1个不同的节点及函数在节点上的值(x 0,y 0),……(x n ,y n ),插值多项式有如下形式: )() )(()()()(n 10n 102010n x -x )(x -x x -x x P x x x x x x -??-+??+-++=αααα (1) 其中系数i α(i=0,1,2……n )为特定系数,可由插值样条i i n y x P =) ((i=0,1,2……n )确定。 根据均差的定义,把x 看成[a,b]上的一点,可得 f(x)= f (0x )+f[10x x ,](0x -x ) f[x, 0x ]= f[10x x ,]+f[x,10x x ,] (1x -x ) …… f[x, 0x ,…x 1-n ]= f[x, 0x ,…x n ]+ f[x, 0x ,…x n ](x-x n ) 综合以上式子,把后一式代入前一式,可得到: f(x)= f[0x ]+f[10x x ,](0x -x )+ f[210x x x ,,](0x -x )(1x -x )+ …+ f[x, 0x ,…x n ](0x -x )…(x-x 1-n )+ f[x, 0x ,…x n ,x ]) (x 1n +ω= N n (x )+) (x n R 其中

N n (x )= f[0x ]+f[10x x ,](0x -x )+ f[210x x x ,,](0x -x )(1x -x )+ …+ f[x, 0x ,…x n ](0x -x )…(x-x 1-n ) (2) )(x n R = f(x)- N n (x )= f[x, 0x , (x) n ,x ]) (x 1n +ω (3) ) (x 1n +ω=(0x -x )…(x-x n ) Newton 插值的系数i α(i=0,1,2……n )可以用差商表示。一般有 f k =α[k 10x x x ??,] (k=0,1,2,……,n ) (4) 把(4)代入(1)得到满足插值条件N )() (i i n x f x =(i=0,1,2,……n )的n 次Newton 插值多项式 N n (x )=f (0x )+f[10x x ,](1x -x )+f[210x x x ,,](1x -x )(2x -x )+……+f[n 10x x x ??,](1x -x )(2x -x )…(1-n x -x ). 其中插值余项为: ) ()! () ()()()(x 1n f x N -x f x R 1n 1 n n +++==ωξ ξ介于k 10x x x ??,之间。 三、程序设计 function [y,A,C,L]=newdscg(X,Y,x,M) % y 为对应x 的值,A 为差商表,C 为多项式系数,L 为多项式 % X 为给定节点,Y 为节点值,x 为待求节点 n=length(X); m=length(x); % n 为X 的长度 for t=1:m

数值分析——二分法和牛顿法

二分法和牛顿法的比较 二分法的基本思想是对有根区间[a,b]逐次分半,首先计算区间[a,b]的中间点x0,然后分析可能出现的三种情况:如果f(x0)f(a)<0,则f(x)在区间[a,x0]内有零点;如果f(x0)f(b)<0,则f(x)在区间[x0,b]内有零点;如果f(x0)=0,则x0是f(x)在区间[a,b]内所求零点。但是二分法的缺点是收敛速度慢且不能求复根。牛顿迭代法的基本思想是将方程f(x)=0中函数f(x)线性化,以线性方程的解逼近非线性方程的解其迭代函数为) (') ()(x f x f x x -=?。牛顿迭代法的缺点是可能发生被零除错误,且可能出现死循环。 用二分法和牛顿法分别计算多项式02432 3 =-+-x x x 的解。该多项式的解为1、1+i 和1-i ,使用二分法计算时,区间为(-1,2),使用牛顿法计算时取初始值为0。误差都为0.0001。 编程如下 二分法(erfen.m): syms x ; fun=x^3-3*x^2+4*x-2; a=-1; b=2; d=0.0001; f=inline(fun); e=b-a; k=0; while e>d c=(a+b)/2; if f(a)*f(c)<0 b=c; elseif f(a)*f(c)>0 a=c; else a=c;b=c; end e=e/2; k=k+1; end k x=(a+b)/2 牛顿法(newton.m): function [k,x,wuca] = newton() k=1; x0=0; tol=0.0001; yx1=fun(x0); yx2=fun1(x0); x1=x0-yx1/yx2; while abs(x1-x0)>tol x0=x1; yx1=fun(x0); yx2=fun1(x0); k=k+1; x1=x1-yx1/yx2; end k x=x1 wuca=abs(x1-x0)/2 end function y1=fun(x) y1=x^3-3*x^2+4*x-2; end function y2=fun1(x) y2=3*x^2-6*x+4; end 分析结果得知,在相同的误差精度下,二分法需要计算15次,而牛顿法只需计算5次,得知牛顿法比二分法优越。

牛顿插值MATLAB算法

MATLAB程序设计期中作业 ——编程实现牛顿插值 成员:刘川(P091712797)签名_____ 汤意(P091712817)签名_____ 王功贺(P091712799)签名_____ 班级:2009信息与计算科学 学院:数学与计算机科学学院 日期:2012年05月02日

牛顿插值的算法描述及程序实现 一:问题说明 在我们的实际应用中,通常需要解决这样的问题,通过一些已知的点及其对应的值,去估算另外一些点的值,这些数据之间近似服从一定的规律,于是,这就引入了插值法的思想。 插值法是利用函数f (x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值。如果这特定函数是多项式,就称它为插值多项式。利用插值基函数很容易得到拉格朗日插值多项式,公式结构紧凑,在理论分析中甚为方便,但当插值节点增减时全部插值基函数均要随之变化,整个公式也将发生变化,这在实际计算中是很不方便的,为了克服这一缺点,提出了牛顿插值。 二:算法分析 newton 插值多项式的表达式如下: 010011()()()()()n n n N x c c x x c x x x x x x -=+-+???+--???- 其中每一项的系数c i 的表达式如下: 12011010 [,,,][,,,] [,,,]i i i i i f x x x f x x x c f x x x x x -???-???=???= - 即为f (x)在点01,,,i x x x ???处的i 阶差商,([]()i i f x f x =,1,2,,i n = ),由差商01[,,,]i f x x x ???的性质可知: () 010 1 [,,,]()i i i j j k j k k j f x x x f x x x ==≠???=-∑∏ 牛顿插值的程序实现方法: 第一步:计算[][][][]001012012,,,,,,,n f x f x x f x x x f x x x x 、、、 、。 第二步:计算牛顿插值多项式中01[,,,]i f x x x ???011()()()i x x x x x x ---???-,1,2,,i n = ,得到n 个多项式。

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 >>。。。 以下是程序运行截图:

相关文档
最新文档