当前位置:文档之家› 数值分析实验五(二分法,牛顿迭代法)

数值分析实验五(二分法,牛顿迭代法)

数值分析实验五(二分法,牛顿迭代法)
数值分析实验五(二分法,牛顿迭代法)

实验五

一、实验目的与要求:

1、通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点;

2、比较二者的计算速度和计算精度。

二、实验内容:

通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点。

二分法

算法:给定区间[a,b],并设与符号相反,取为根的容许误差,为的容许误差。

(1)令c=(a+b)/2

(2)如果(c-a)<或,则输出,结束;否则执行(3)

(3)如果,则令;否则则令,重复(1),(2),(3)。

牛顿迭代法

算法:给定初值 , 为根的容许误差,为 的容许误差,N 为

迭代次数的容许值。

(1)如果 =0或迭代次数大于N ,则算法失败,结束;否则执行

(2)。

(2)计算 = - (3)若 < 或 < ,则输出 ,程序结束;否则执行(4)。

x 0εη)(x f )('

x f x 1x 0)()('0x x o f f x x 01-ε)(1x f ηx 1

x0x1

(4)令= ,转向(1)。

三、实验题目:

1、用二分法求方程f(x)=x^3+4*x*x-10在区间[1,1.5]上的根,要求求出具有3位有效数的近似根。

2、用牛顿法求方程x^3-3x-1=0在x=2附近的根。

四、程序:

一、二分法

#include

float f(float x)

{

return x*x*x+4*x*x-10;

}

void main()

{

float a,b,c;

a=1.0;

b=1.5;

for(;b-a>=0.01;)

{

c=(a+b)/2;

if(f(a)*f(c)==0)

break;

else if(f(a)*f(c)<0)

b=c;

else

a=c;

}

printf("方程的近似根为%f\n",c);

printf("保留三位有效数字为%0.2f\n",c); }

二、牛顿迭代法

#include

#include

float f(float x)

{

return x*x*x-3*x-1;

}

float g(float x)

{

return 3*x*x-3;

}

void main()

{

float x0,x1,a,b,N;

int i;

i=0;

printf("请输入初值X0,根的容许误差,|f(x)|的容许误差,迭代次数的容许值N。\n");

scanf("%f,%f,%f,%f",&x0,&a,&b,&N);

for(;;)

{

i++;

if(g(x0)==0||i>=N)

break;

else

{

x1=x0-f(x0)/g(x0);

if(fabs(x1-x0)

goto end;

else

x0=x1;

}

}

printf("算法失败,在达到迭代次数时此结果并未达到根的容许误差或|f(x)|的容许误差。\n");

end:printf("%f\n",x1);

}

五、实验结果:

1、二分法

2、牛顿迭代法

数值分析实验报告176453

实验报告 插值法 数学实验室 数值逼近 算法设计 级 ____________________________ 号 ____________________________ 名 _____________________________ 实验项目名称 实验室 所属课程名称 实验类型 实验日期

实验概述: 【实验目的及要求】 本次实验的目的是熟练《数值分析》第二章“插值法”的相关内容,掌握三种插 多项式插值,三次样条插值,拉格朗日插值,并比较三种插值方法的 优劣。 本次试验要求编写牛顿多项式插值,三次样条插值,拉格朗日插值的程序编码,并 去实现。 【实验原理】 《数值分析》第二章“插值法”的相关内容,包括:牛顿多项式插值,三次样条插值, 拉格朗日 插值的相应算法和相关性质。 【实验环境】(使用的软硬件) 软件: MATLAB 2012a 硬件: 电脑型号:联想 Lenovo 昭阳E46A 笔记本电脑 操作系统: Win dows 8专业版 处理器:In tel ( R Core ( TM i3 CPU M 350 @2.27GHz 2.27GHz 实验内容: 【实验方案设计】 第一步,将书上关于三种插值方法的内容转化成程序语言,用 MATLA B 现; 第二步,分别用牛顿多项式插值,三次样条插值,拉格朗日插值求解不同的问题。 【实验过程】(实验步骤、记录、数据、分析) 实验的主要步骤是:首先分析问题,根据分析设计 MATLA 程序,利用程序算出 问题答案,分析所得答案结果,再得出最后结论。 实验一: 已知函数在下列各点的值为 试用4次牛顿插值多项式 P 4( x )及三次样条函数 S ( x )(自然边界条件)对数据进行插值。 用图给出{( X i , y i ), X i =0.2+0.08i , i=0 , 1, 11, 10 } , P 4 ( x )及 S ( x )。 值方法:牛顿 在MATLAB 件中

matlab实验十七__牛顿迭代法(可打印修改)

实验十七牛顿迭代法 【实验目的】 1.了解牛顿迭代法的基本概念。 2.了解牛顿迭代法的收敛性和收敛速度。 3.学习、掌握MATLAB软件的有关命令。 【实验内容】 用牛顿迭代法求方程的近似根,误差不超过。 3210 ++-=3 10- x x x 【实验准备】 1.牛顿迭代法原理 2.牛顿迭代法的几何解析 3.牛顿迭代法的收敛性 4.牛顿迭代法的收敛速度 5.迭代过程的加速 6.迭代的MATLAB命令 MATLAB中主要用for,while等控制流命令实现迭代。 【实验重点】 1.牛顿迭代法的算法实现 2.牛顿迭代法收敛性和收敛速度 【实验难点】 1.牛顿迭代法收敛性和收敛速度 【实验方法与步骤】 练习1用牛顿迭代法求方程在x=0.5附近的近似 3210 ++-= x x x

根,误差不超过。 310-牛顿迭代法的迭代函数为 322()1()()321 f x x x x g x x x f x x x ++-=-=-'++相应的MATLAB 代码为 >>clear; >>x=0.5; >>for i=1:3 >>x=x-(x^3+x^2+x-1)/(3*x^2+2*x+1) >>end 可算的迭代数列的前3项0.5455,0.5437,0.5437。经三次迭代,就大大超过了精度要求。 练习2 用牛顿迭代法求方程的近似正实根,由此建2(0)x a a =>立一种求平方根的计算方法。 由计算可知,迭代格式为,在实验12的练习4中1()()2a g x x x =+已经进行了讨论。 【练习与思考】 1.用牛顿迭代法求方程的近似根。 ln 1x x =2.为求出方程的根,在区间[1,2]内使用迭代函数进行310x x --=迭代,纪录迭代数据,问迭代是否收敛?对迭代进行加速,对比加速前的数据,比较加速效果。 3.使用在不动点的泰勒公式,证明牛顿迭代法收敛原理。*x

牛顿迭代法

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

数值分析实验报告

数值分析实验报告 姓名:周茹 学号: 912113850115 专业:数学与应用数学 指导老师:李建良

线性方程组的数值实验 一、课题名字:求解双对角线性方程组 二、问题描述 考虑一种特殊的对角线元素不为零的双对角线性方程组(以n=7为例) ?????????? ?????? ? ???? ?d a d a d a d a d a d a d 766 55 44 3 32 211??????????????????????x x x x x x x 7654321=?????????? ? ???????????b b b b b b b 7654321 写出一般的n (奇数)阶方程组程序(不要用消元法,因为不用它可以十分方便的解出这个方程组) 。 三、摘要 本文提出解三对角矩阵的一种十分简便的方法——追赶法,该算法适用于任意三对角方程组的求解。 四、引言 对于一般给定的d Ax =,我们可以用高斯消去法求解。但是高斯消去法过程复杂繁琐。对于特殊的三对角矩阵,如果A 是不可约的弱对角占优矩阵,可以将A 分解为UL ,再运用追赶法求解。

五、计算公式(数学模型) 对于形如????? ?? ????? ??? ?---b a c b a c b a c b n n n n n 111 2 2 2 11... ... ...的三对角矩阵UL A =,容易验证U 、L 具有如下形式: ??????? ????? ??? ?=u a u a u a u n n U ...... 3 3 22 1 , ?? ????? ? ?? ??????=1 (1) 1132 1l l l L 比较UL A =两边元素,可以得到 ? ?? ??-== = l a b u u c l b u i i i i i i 111 i=2, 3, ... ,n 考虑三对角线系数矩阵的线性方程组 f Ax = 这里()T n x x x x ... 2 1 = ,()T n f f f f ... 2 1 = 令y Lx =,则有 f Uy = 于是有 ()?????-== --u y a f y u f y i i i i i 1 1 11 1 * i=2, 3, ... ,n 再根据y Lx =可得到

Newton迭代法实例

基于牛顿迭代法的圆形断面临界水深直接计算 学院:建筑工程学院学号:2111206052 姓名:王瑞峰 一、问题来源 圆形断面由于具有受力条件好、适应地形能力强、水力条件好等优点,已成为农田灌溉、城市给水排水等工程较常采用的断面形式。而临界水深的计算则是进行圆形断面水力计算的关键,但其计算较繁杂,要求解高次隐函数方程,且未知量包含在三角函数中,求解难度大。自20世纪90年代,对圆形断面临界水深的计算进行了大量研究,获得了较多成果。鉴此,本文应用牛顿迭代算法,得到一种较简洁且可提供高精度算法程序的近似计算公式。 二、数学模型 相应于断面单位能量最小值的水深称为临界水深,其计算公式为: 需满足的临界流方程为: 其中 式中,d为洞径;为临界水深对应的圆心角,rad;n为流速分布不均匀系数(不特殊说明时取1.0);Q为流量,m3Is;g为重力加速度(通常取9.81 m/s2);分别为临界流对应的过水断面面积和水面宽度。 无压流圆形断面的水力要素见图1 将式(1)、(3)、(4)代入式(2)得: 将式(5)整理即得临界水深的非线形方程: 由此可知.式(6)为临界水深h。的高次隐函数方程,且未知量包含在三角函数中。 即圆形断面临界水深的求解即为式(6)的求根问题。在现行工程实际中计算临界水深时均采用近似公式或试算法,所得结果精度不高且效率较低。 三、方法选择 牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。 解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点

附近展开成泰勒级数f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +… 取其线性部分,作为非线性方程f(x) = 0的近似方程,即泰勒展开的前两项,则有f(x0)+f'(x0)(x- x0)=f(x)=0 设f'(x0)≠0则其解为x1=x0-f(x0)/f'(x0) 这样,得到牛顿法的一个迭代序列:x(n+1)=x(n)-f(x(n))/f'(x(n))。 在对式(6)的求解方法中,应首选牛顿迭代法,因为牛顿迭代法可快速求解出其他方法求不出或难以求出的解。 引入无量纲参数k: 将式(7)代入式(6)得: 的一阶、二阶导函数分别为: 由牛顿迭代法可得: 式中,=0,1,2…为迭代次数;为的初值。 将式(8)、(9)代入式(10),可得相应于式(6)临界水深对应中心角的牛顿迭代公式: 由式(11)迭代计算出临界水深对应的中心角后,代入式(1)即可得临界水深。 根据文献,为避免渡状水面有可能接触洞顶引起水流封顶现象。洞内水面线以上的空间不宜小于隧洞断面面积的15%,且高度不小于0.4m。可得临界水深对应的中心角的最大值一般不超过4.692,相应可得无量纲参数值的上限为0.5044。故取值范围为[O.000 0,0.504 4]。 查阅文献与的近似公式: 若将式(12)视为初值函数,代入式(11)进行一次迭代计算,不仅得到了直接计算的公式,且提高了计算结果的精度。 其中 将式(13)代入式(1)即得圆形断面临界水深。 计算实例: 某引水式电站输水隧洞为圆形断面,已知洞径d=3.0 m,试确定设计流量Q=8.0m3/s时的临界水深。 四、编程实现 本文采用Fortran软件求解,程序的代码如下:

数值分析实验报告1

实验一误差分析 实验1.1(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 其中ε(1.1)和(1.221,,,a a 的输出b ”和“poly ε。 (1(2 (3)写成展 关于α solve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考Matlab 的帮助。 实验过程: 程序: a=poly(1:20); rr=roots(a); forn=2:21 n form=1:9 ess=10^(-6-m);

ve=zeros(1,21); ve(n)=ess; r=roots(a+ve); -6-m s=max(abs(r-rr)) end end 利用符号函数:(思考题一)a=poly(1:20); y=poly2sym(a); rr=solve(y) n

很容易的得出对一个多次的代数多项式的其中某一项进行很小的扰动,对其多项式的根会有一定的扰动的,所以对于这类病态问题可以借助于MATLAB来进行问题的分析。 学号:06450210 姓名:万轩 实验二插值法

数值分析实验报告7..

实验七、QR 算法 一、实验目的 1、熟悉matlab 编程并学习QR 算法原理及计算机实现; 2、学习用matlab 内置函数eig 和QR 算法求矩阵的特征值,并比对二者差异。 二、实验题目 1、课本第277页第1题 已知矩阵1 126 1112 3 761 116 7 112 34561107 87445677 565,,.0 367886109002897 59100 0010A B H ?? ???? ? ? ? ? ? ? ?=== ? ? ? ? ? ????? ?? ? (1)用MATLAB 函数“eig ”求矩阵全部特征值; (2)用基本QR 算法求全部特征值(可用MA TLAB 函数“qr ”实现矩阵的QR 分解)。 2、用QR 算法求矩阵特征值: ??????????=111132126)(i ??? ???? ? ????????=010******* 8763076544 65432)(ii 根据QR 算法原理编制求(i )及(ii )中矩阵全部特征值的程序并输出计算结果(要求误差 <10 -5). 三、实验原理与理论基础 QR 方法是一种变换方法,是计算一般矩阵(中小型矩阵)全部特征值问题的最有效方法之一。目前QR 方法主要用来计算上海森伯格矩阵和对称三对角矩阵的全部特征值问题,且QR 方法具有收敛快、算法稳定等特点。对于一般矩阵n n A ?∈ (或对称矩阵),首先用 豪斯霍尔德方法将A 化为上海森伯格矩阵B (或对称三对角矩阵),然后再用QR 方法计算 B 的全部特征值。 1、矩阵的QR 分解 设n n A ?∈ 非奇异,则存在正交矩阵P ,使PA=R ,其中R 为上三角矩阵。用Householder 变换构造正交矩阵P ,记(0) A A =,它的第一列记为(0)1a ,不妨设(0) 10a ≠,可按公式(3.2) (Th14,约化定理 设12(,, ,)0,T n x x x x =≠则存在初等反射矩阵H 使1Hx e σ=-,其中) 112121122 , sgn(), , (). T H I uu x x u x e u x βσσβσσ-?=-? =?? =+??==+? 找到矩阵111111,,n n T H H I u u β?-∈=-使

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

Newton迭代法

第四章 一元方程求根/非线性方程组数值解法初步 4.3 Newton 迭代法 1. Newton 迭代法 解一元非线性方程组 0)(=x f (4.3.1) 的Newton 迭代法是不动点迭代法的一种特殊形式。可从不同途径导出Newton 迭代公式,这里采用Taylor 展开。 设方程0)(=x f 的根*x 的一个近似值0x ,将)(x f 在0x 附近展开得 20000)(! 2) (''))((')()(0x x f x x x f x f x f -+ -+==ξ 或表示为 200000)() ('2) ('')(')(x x x f f x f x f x x ---=ξ (4.3.2) 其中设 0)('0≠x f ,''f 存在、连续,而ξ在x 与0x 之间。忽略上式最后一项 *x 的一个新近似值 ) (') (0001x f x f x x - = 把1x 代替上式右端的0x ,并设 0)('1≠x f ,于是又得新近似值 ) (') (1112x f x f x x - = 如此继续,可知当),2,1,0(0)(' =≠k x f k 可得 ),2,1,0() (') (1 =-=+k x f x f x x k k k k (4.3.3) 这就是著名的Newton (牛顿)迭代公式。在迭代序列收敛的情况下,取一定精度的迭代值 k x 作为方程 0)(=x f 的根*x 的近似值,这就是解方程组 0)(=x f 的Newton 迭代法。显然,它以在*x 附近函数0)(=x f 线性化为基 础,并以 ),2,1,0(0)(' =≠k x f k 为前提。 例 4.3.1 用Newton 迭代法求下列方程的近似根:

数值分析实验报告模板

数值分析实验报告模板 篇一:数值分析实验报告(一)(完整) 数值分析实验报告 1 2 3 4 5 篇二:数值分析实验报告 实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。利用二分法求解给定非线性方程的根,在给定的范围内,假设f(x,y)在[a,b]上连续,f(a)xf(b) 直接影响迭代的次数甚至迭代的收敛与发散。即若x0 偏离所求根较远,Newton法可能发散的结论。并且本实验中还利用利用改进的Newton法求解同样的方程,且将结果与Newton法的结果比较分析。 前言:(目的和意义) 掌握二分法与Newton法的基本原理和应用。掌握二分法的原理,验证二分法,在选对有根区间的前提下,必是收

敛,但精度不够。熟悉Matlab语言编程,学习编程要点。体会Newton使用时的优点,和局部收敛性,而在初值选取不当时,会发散。 数学原理: 对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。 对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b) Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式xk?1?xk?f(xk) f'(xk) 产生逼近解x*的迭代数列{xk},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为 xk?1?xk?rf(xk) 'f(xk) 其中r为要求的方程的根的重数,这就是改进的Newton 法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。 程序设计: 本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下 function y=f(x);

数值分析实验报告记录

数值分析实验报告记录

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

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

数值分析实验报告

实验一 误差分析 实验(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 )1.1() ()20()2)(1()(20 1∏=-=---=k k x x x x x p Λ 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 )2.1(0 )(19=+x x p ε 其中ε是一个非常小的数。这相当于是对()中19x 的系数作一个小的扰动。我们希望比较()和()根的差别,从而分析方程()的解对扰动的敏感性。 实验内容:为了实现方便,我们先介绍两个Matlab 函数:“roots ”和“poly ”。 roots(a)u = 其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。设a 的元素依次为121,,,+n a a a Λ,则输出u 的各分量是多项式方程 01121=+++++-n n n n a x a x a x a Λ 的全部根;而函数 poly(v)b = 的输出b 是一个n+1维变量,它是以n 维变量v 的各分量为根的多项式的系数。可见“roots ”和“poly ”是两个互逆的运算函数。 ;000000001.0=ess );21,1(zeros ve = ;)2(ess ve = ))20:1((ve poly roots +

关于牛顿迭代法的课程设计实验指导

y x O x * x 1 x 0 关于牛顿迭代法的课程设计实验指导 非线性方程(或方程组)问题可以描述为求 x 使得f (x ) = 0。在求解非线性方程的方法中,牛顿迭代法是求非线性方程(非线性方程组)数值解的一种重要的方法。牛顿是微积分创立者之一,微积分理论本质上是立足于对世界的这种认识:很多物理规律在微观上是线性的。近几百年来,这种局部线性化方法取得了辉煌成功,大到行星轨道计算,小到机械部件设计。牛顿迭代法正是将局部线性化的方法用于求解方程。 一、牛顿迭代法及其收敛速度 牛顿迭代法又称为牛顿-拉夫逊方法(Newton-Raphson method ),是一种在实数域和复数域上通过迭代计算求出非线性方程的数值解方法。方法的基本思路是利用一个根的猜测值x 0做初始近似值,使用函数f (x )在x 0处的泰勒级数展式的前两项做为函数f (x )的近似表达式。由于该表达式是一个线性函数,通过线性表达式替代方程中的求得近似解x 1。即将方程f (x ) = 0在x 0处局部线性化计算出近似解x 1,重复这一过程,将方程f (x ) = 0在x 1处局部线性化计算出x 2,求得近似解x 2,……。详细叙述如下:假设方程的解x *在x 0附近(x 0是方程解x *的近似),函数f (x )在点x 0处的局部线化表达式为 )()()()(000x f x x x f x f '-+≈ 由此得一次方程 0)()()(000='-+x f x x x f 求解,得 ) ()(0001x f x f x x '-= 如图1所示,x 1比x 0更接近于x *。该方法的几何意义是:用曲线上某点(x 0,y 0)的切线代替曲线,以该切线与x 轴的交点(x 1,0)作为曲线与x 轴的交点(x *,0)的近似(所以牛顿迭代法又称为切线法)。设x n 是方程解x *的近似,迭代格式 ) ()(1n n n n x f x f x x '-=+ ( n = 0,1,2,……) 就是著名的牛顿迭代公式,通过迭代计算实现逐次逼近方程的解。牛顿迭代法的最大优点是收敛速度快,具有二阶收敛。以著名的平方根算法为例,说明二阶收敛速度的意义。 例1.已知4.12≈,求2等价于求方程f (x ) = x 2 – 2 = 0的解。由于x x f 2)(='。应用牛顿迭代法,得迭代计算格式 )/2(2 11n n n x x x +=+,(n = 0,1,2,……) 取x 0= 1.4为初值,迭代计算3次的数据列表如下 迭代次数 近似值 15位有效数 误差 0 1.4 1.41421356237310 -1.42e-002 1 1.41428571428571 1.41421356237310 7.21e-005 2 1.41421356421356 1.41421356237310 1.84e-009 3 1.41421356237309 1.41421356237310 - 2.22e-016 图1 牛顿迭代法示意图

数值分析实验报告

实验一、误差分析 一、实验目的 1.通过上机编程,复习巩固以前所学程序设计语言及上机操作指令; 2.通过上机计算,了解误差、绝对误差、误差界、相对误差界的有关概念; 3.通过上机计算,了解舍入误差所引起的数值不稳定性。 二.实验原理 误差问题是数值分析的基础,又是数值分析中一个困难的课题。在实际计算中,如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。因此,选取算法时注重分析舍入误差的影响,在实际计算中是十分重要的。同时,由于在数值求解过程中用有限的过程代替无限的过程会产生截断误差,因此算法的好坏会影响到数值结果的精度。 三.实验内容 对20,,2,1,0 =n ,计算定积分 ?+=10 5dx x x y n n . 算法1:利用递推公式 151--=n n y n y , 20,,2,1 =n , 取 ?≈-=+=1 00182322.05ln 6ln 51dx x y . 算法2:利用递推公式 n n y n y 51511-= - 1,,19,20 =n . 注意到 ???=≤+≤=10 10202010201051515611261dx x dx x x dx x , 取 008730.0)12611051(20120≈+≈y .: 四.实验程序及运行结果 程序一: t=log(6)-log(5);

n=1; y(1)=t; for k=2:1:20 y(k)=1/k-5*y(k-1); n=n+1; end y y =0.0884 y =0.0581 y =0.0431 y =0.0346 y =0.0271 y =0.0313 y =-0.0134 y =0.1920 y =-0.8487 y =4.3436 y =-21.6268 y =108.2176 y =-541.0110 y =2.7051e+003 y =-1.3526e+004 y =6.7628e+004 y =-3.3814e+005 y =1.6907e+006 y =-8.4535e+006 y =4.2267e+007 程序2: y=zeros(20,1); n=1; y1=(1/105+1/126)/2;y(20)=y1; for k=20:-1:2 y(k-1)=1/(5*k)-(1/5)*y(k); n=n+1; end 运行结果:y = 0.0884 0.0580 0.0431 0.0343 0.0285 0.0212 0.0188 0.0169

(完整版)哈工大-数值分析上机实验报告

实验报告一 题目:非线性方程求解 摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。 前言:(目的和意义) 掌握二分法与Newton法的基本原理和应用。 数学原理: 对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。 对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b)<0,且f(x)在[a,b]内仅有一个实根x*,取区间中点c,若,则c恰为其根,否则根据f(a)f(c)<0是否成立判断根在区间[a,c]和[c,b]中的哪一个,从而得出新区间,仍称为[a,b]。重复运行计算,直至满足精度为止。这就是二分法的计算思想。

Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式 产生逼近解x*的迭代数列{x k},这就是Newton法的思想。当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。另外,若将该迭代公式改进为 其中r为要求的方程的根的重数,这就是改进的Newton法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。 程序设计: 本实验采用Matlab的M文件编写。其中待求解的方程写成function的方式,如下 function y=f(x); y=-x*x-sin(x); 写成如上形式即可,下面给出主程序。 二分法源程序: clear %%%给定求解区间 b=1.5; a=0;

%%%误差 R=1; k=0;%迭代次数初值 while (R>5e-6) ; c=(a+b)/2; if f12(a)*f12(c)>0; a=c; else b=c; end R=b-a;%求出误差 k=k+1; end x=c%给出解 Newton法及改进的Newton法源程序:clear %%%% 输入函数 f=input('请输入需要求解函数>>','s') %%%求解f(x)的导数 df=diff(f);

数值分析实验报告

学生实验报告实验课程名称 开课实验室 学院年级专业班 学生姓名学号 开课时间至学年学期

if(A(m,k)~=0) if(m~=k) A([k m],:)=A([m k],:); %换行 end A(k+1:n, k:c)=A(k+1:n, k:c)-(A(k+1:n,k)/ A(k,k))*A(k, k:c); %消去end end x=zeros(length(b),1); %回代求解 x(n)=A(n,c)/A(n,n); for k=n-1:-1:1 x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n))/A(k,k); end y=x; format short;%设置为默认格式显示,显示5位 (2)建立MATLAB界面 利用MA TLAB的GUI建立如下界面求解线性方程组: 详见程序。 五、计算实例、数据、结果、分析 下面我们对以上的结果进行测试,求解:

? ? ? ? ? ? ? ? ? ? ? ? - = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - - - - - - 7 2 5 10 13 9 14 4 4 3 2 1 13 12 4 3 3 10 2 4 3 2 1 x x x x 输入数据后点击和,得到如下结果: 更改以上数据进行测试,求解如下方程组: 1 2 3 4 43211 34321 23431 12341 x x x x ?? ???? ?? ???? ?? ???? = ?? ???? - ?? ???? - ???? ?? 得到如下结果:

牛顿迭代法实验报告

用牛顿迭代法求非线性方程的根 一、 实验题目 求方程()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次。初

Newton迭代法求解非线性方程

Newton迭代法求解非 线性方程

一、 Newton 迭代法概述 构造迭代函数的一条重要途径是用近似方程来代替原方程去求根。因此,如果能将非线性方程f (x )=0用线性方程去代替,那么,求近似根问题就很容易解决,而且十分方便。牛顿(Newton)法就是一种将非线性方程线化的一种方法。 设k x 是方程f (x )=0的一个近似根,把如果)(x f 在k x 处作一阶Taylor 展开,即: )x x )(x ('f )x (f )x (f k k k -+≈ (1-1) 于是我们得到如下近似方程: 0)x x )(x ('f )x (f k k k =-+ (1-2) 设0)('≠k x f ,则方程的解为: x ?=x k +f (x k ) f (x k )? (1-3) 取x ~作为原方程的新近似根1+k x ,即令: ) x ('f ) x (f x x k k k 1k -=+, k=0,1,2,… (1-4) 上式称为牛顿迭代格式。用牛顿迭代格式求方程的根的方法就称为牛顿迭代法,简称牛顿法。 牛顿法具有明显的几何意义。方程: )x x )(x ('f )x (f y k k k -+= (1-5) 是曲线)x (f y =上点))x (f ,x (k k 处的切线方程。迭代格式(1-4)就是用切线式(1-5)的零点来代替曲线的零点。正因为如此,牛顿法也称为切线法。 牛顿迭代法对单根至少是二阶局部收敛的,而对于重根是一阶局部收敛的。一般来说,牛顿法对初值0x 的要求较高,初值足够靠近*x 时才能保证收敛。若

要保证初值在较大范围内收敛,则需对)x (f 加一些条件。如果所加的条件不满足,而导致牛顿法不收敛时,则需对牛顿法作一些改时,即可以采用下面的迭代格式: ) x ('f ) x (f x x k k k 1k λ -=+, ?=,2,1,0k (1-6) 上式中,10<λ<,称为下山因子。因此,用这种方法求方程的根,也称为牛顿下山法。 牛顿法对单根收敛速度快,但每迭代一次,除需计算)x (f k 之外,还要计算 )x ('f k 的值。如果)x (f 比较复杂,计算)x ('f k 的工作量就可能比较大。为了避免计算导数值,我们可用差商来代替导数。通常用如下几种方法: 1. 割线法 如果用 1 k k 1k k x x ) x (f )x (f ----代替)x ('f k ,则得到割线法的迭代格式为: )x (f ) x (f )x (f x x x x k 1k k 1 k k k 1k --+---= (1-7) 2. 拟牛顿法 如果用 ) x (f )) x (f x (f )x (f k 1k k k ---代替)x ('f k ,则得到拟牛顿法的迭代格式为: )) x (f x (f )x (f ) x (f x x 1k k k k 2k 1k -+--- = (1-8) 3. Steffenson 法 如果用 ) x (f ) x (f ))x (f x (f k k k k -+代替)x ('f k ,则得到拟牛顿法的迭代格式为: ) x (f ))x (f x (f ) x (f x x k k k k 2k 1 k -+- =+

牛顿迭代法的实验报告

牛顿迭代法实验报告 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)

相关主题
文本预览
相关文档 最新文档