关于牛顿迭代法的课程设计实验指导共9页word资料

合集下载

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

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

yx 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,……) 就是著名的牛顿迭代公式,通过迭代计算实现逐次逼近方程的解。

牛顿迭代、割线法、二分法算法实验报告

牛顿迭代、割线法、二分法算法实验报告

三、牛顿法计算实验
3.1 牛顿法算法思想和简要描述 我们有一个函数 f,其零点由数值计算得出,设 r 是 f 的一个零点,x 是 r 的一个近似。若 f 的二阶导数存在并且连续,则有泰勒定理,得 0=f(r)=f(x+h)=f(x)+hf ’(x)+o(h^2) 其中 h=r-x。若 h 较小(即 x 在 r 附近) ,则有理由略去 o(h^2)项并且 在余下方程中求 h。即得到 h=-f(x)/f ’(x)。故 x-f(x)/f ’(x)是比 x 更好的一个 近似。牛顿法从 r 的一个估计 x0 开始,得到更加准确的近似值 xn。递推 式定义为: f(xn ) xn+1 = xn − ′ f (xn ) 3.2 MATLAB 运行牛顿法程序 牛顿法求解 f=x^3-9 的根 参数设置:x0 设置为函数 f 零点的近似。 n 设置为牛顿法 for 语句迭代次数。 alpha 设置为最后结果 f(x)的精度。 delta 设置为最后结果 x 的精度。 (若 alpha,delta 都符合设置的计算精度时,结束迭代并得 出计算结果,否则一直迭代到 n 次) 设置初始值:设置参数 x0 分别为为 3;迭代次数 n 为 50 次;alpha 和 delta 都设置为 0.001。 列出计算结果: >> newton(f,50,3,0.001,0.001) n x f(x) delta alpha 1.0000 2.3333 3.7037 0.6667 3.7037 2.0000 2.1066 0.3483 0.2268 0.3483 3.0000 2.0804 0.0043 0.0262 0.0043 Elapsed time is 0.166680 seconds.
4.0000 2.0625 2.1250 5.0000 2.0625 2.0938 6.0000 2.0781 2.0938 7.0000 2.0781 2.0859 8.0000 2.0781 2.0820 9.0000 2.0801 2.0820 10.0000 2.0801 2.0811 11.0000 2.0801 2.0806 12.0000 2.0801 2.0803 13.0000 2.0801 2.0802 14.0000 2.0801 2.0801 elapsed time is 0.316426 seconds.

数学数学实验Newton迭代法

数学数学实验Newton迭代法

数学实验题目4 Newton 迭代法摘要0x 为初始猜测,则由递推关系产生逼近解*x 的迭代序列{}k x ,这个递推公式就是Newton 法。

当0x 距*x 较近时,{}k x 很快收敛于*x 。

但当0x 选择不当时,会导致{}k x 发散。

故我们事先规定迭代的最多次数。

若超过这个次数,还不收敛,则停止迭代另选初值。

前言利用牛顿迭代法求的根程序设计流程问题1(1 程序运行如下:r = NewtSolveOne('fun1_1',pi/4,1e-6,1e-4,10) r = 0.7391(2 程序运行如下:r = NewtSolveOne('fun1_2',0.6,1e-6,1e-4,10) r = 0.5885问题2(1 程序运行如下:否 是否是是定义()f x输入012,,,x N εε开 始1k =01()f x ε<0100()()f x x x f x =-'102||x x ε-<k N =输出迭代失败标志输出1x输出奇 异标志结 束01x x = 1k k =+ 否r = NewtSolveOne('fun2_1',0.5,1e-6,1e-4,10)r = 0.5671(2)程序运行如下:r = NewtSolveOne('fun2_2',0.5,1e-6,1e-4,20)r = 0.5669问题3(1)程序运行如下:①p = LegendreIter(2)p = 1.0000 0 -0.3333p = LegendreIter(3)p = 1.0000 0 -0.6000 0p = LegendreIter(4)p =1.0000 0 -0.8571 0 0.0857p = LegendreIter(5)p = 1.0000 0 -1.1111 0 0.2381 0②p = LegendreIter(6)p = 1.0000 0 -1.3636 0 0.4545 0 -0.0216r = roots(p)'r= -0.932469514203150 -0.6612 0.9324695142031530.6612 -0.238619186083197 0.238619186083197用二分法求根为:r = BinSolve('LegendreP6',-1,1,1e-6)r = -0.932470204878826 -0.661212531887755 -0.2386200573979590.2386 0.661192602040816 0.932467713647959(2)程序运行如下:①p = ChebyshevIter(2)p = 1.0000 0 -0.5000p = ChebyshevIter(3)p = 1.0000 0 -0.7500 0p = ChebyshevIter(4)p = 1.0000 0 -1.0000 0 0.1250p = ChebyshevIter(5)p = 1.0000 0 -1.2500 0 0.3125 0②p = ChebyshevIter(6)p = 1.0000 0 -1.5000 0 0.5625 0 -0.0313r = roots(p)'r = -0.965925826289067 -0.7548 0.9659258262890680.7547 -0.258819045102521 0.258819045102521用二分法求根为:r = BinSolve('ChebyshevT6',-1,1,1e-6)r = -0.965929926658163 -0.7755 -0.2588289221938780.2588 0.7020 0.965924944196429与下列代码结果基本一致,只是元素顺序稍有不同:j = 0:5;x = cos((2*j+1)*pi/2/(5+1))x =0.965925826289068 0.7548 0.258819045102521-0.258819045102521 -0.7547 -0.965925826289068(3)程序运行如下:①p = LaguerreIter(2)p = 1 -4 2p = LaguerreIter(3)p = 1 -9 18 -6p = LaguerreIter(4)p = 1 -16 72 -96 24p = LaguerreIter(5)p =1.0000 -25.0000 200.0000 -600.0000 600.0000 -120.000②p = LaguerreIter(5)p =1.0000 -25.0000 200.0000 -600.0000 600.0000 -120.000r = roots(p)'r =12.6432 7.8891 3.5964257710407111.4520 0.263560319718141用二分法求根为:r = BinSolve('LaguerreL5',0,13,1e-6)r = 0.263560314567722 1.4789 3.5964257656311507.0720 12.6490(4)程序运行如下:①p = HermiteIter(2)p = 1.0000 0 -0.5000p = HermiteIter(3)p = 1.0000 0 -1.5000 0p = HermiteIter(4)p = 1.0000 0 -3.0000 0 0.7500p = HermiteIter(5)p = 1.0000 0 -5.0000 0 3.7500 0②p = HermiteIter(6)p = 1.0000 0 -7.5000 0 11.2500 0 -1.8750r = roots(p)'r =-2.3587 2.3588 -1.3358490740136961.335849074013698 -0.4367 0.4366用二分法求根为:r = BinSolve('HermiteH6',-3,3,1e-6)r =-2.3516 -1.335849********* -0.43630.4366 1.335848983453244 2.3504所用到的函数function r = NewtSolveOne(fun, x0, ftol, dftol, maxit)% NewtSolveOne 用Newton法解方程f(x)=0在x0附近的一个根%% Synopsis: r = NewtSolveOne(fun, x0)% r = NewtSolveOne(fun, x0, ftol, dftol)%% Input: fun = (string) 需要求根的函数及其导数% x0 = 猜测根,Newton法迭代初始值% ftol = (optional)误差,默认为5e-9% dftol = (optional)导数容忍最小值,小于它表明Newton法失败,默认为5e-9 % maxit = (optional)迭代次数,默认为25%% Output: r = 在寻根区间内的根或奇点if nargin < 3ftol = 5e-9;endif nargin < 4dftol = 5e-9;endif nargin < 5maxit = 25;endx = x0; %设置初始迭代位置为x0k = 0; %初始化迭代次数为0while k <= maxitk = k + 1;[f,dfdx] = feval(fun,x); %fun返回f(x)和f'(x)的值if abs(dfdx) < dftol %如果导数小于dftol,Newton法失败,返回空值r = [];warning('dfdx is too small!');return;enddx = f/dfdx; %x(n+1) = x(n) - f( x(n) )/f'( x(n) ),这里设dx = f( x(n) )/f'( x(n) )x = x - dx;if abs(f) < ftol %如果误差小于ftol,返回当前x为根r = x;return;endendr = []; %如果牛顿法未收敛,返回空值function p = LegendreIter(n)% LegendreIter 用递推的方法计算n次勒让德多项式的系数向量Pn+2(x) = (2*i+3)/(i+2) * x*Pn+1(x) - (i+1)/(i+2) * Pn(x)%% Synopsis: p = LegendreIter(n)%% Input: n = 勒让德多项式的次数%% Output: p = n次勒让德多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %P0(x) = 1p = 1;return;elseif n == 1 %P1(x) = xp = [1 0];return;endpBk = 1; %初始化三项递推公式后项为P0pMid = [1 0]; %初始化三项递推公式中项为P1for i = 0:n-2pMidCal = zeros(1,i+3); %构造用于计算的x*Pn+1pMidCal(1:i+2) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的PnpBkCal(3:i+3) = pBk;pFwd = (2*i+3)/(i+2) * pMidCal - (i+1)/(i+2) * pBkCal; %勒让德多项式三项递推公式Pn+2(x) = (2*i+3)/(i+2) * x*Pn+1(x) - (i+1)/(i+2) * Pn(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把勒让德多项式最高次项系数归一化function p = ChebyshevIter(n)% ChebyshevIter 用递推的方法计算n次勒让德-切比雪夫多项式的系数向量Tn+2(x) = 2*x*Tn+1(x) - Tn(x)%% Synopsis: p = ChebyshevIter(n)%% Input: n = 勒让德-切比雪夫多项式的次数%% Output: p = n次勒让德-切比雪夫多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %T0(x) = 1p = 1;return;elseif n == 1 %T1(x) = xp = [1 0];return;endpBk = 1; %初始化三项递推公式后项为T0pMid = [1 0]; %初始化三项递推公式中项为T1for i = 0:n-2pMidCal = zeros(1,i+3); %构造用于计算的x*Tn+1pMidCal(1:i+2) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的PnpBkCal(3:i+3) = pBk;pFwd = 2*pMidCal - pBkCal; %勒让德-切比雪夫多项式三项递推公式Tn+2(x) = 2*x*Tn+1(x) - Tn(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把勒让德-切比雪夫多项式最高次项系数归一化function p = LaguerreIter(n)% LaguerreIter 用递推的方法计算n次拉盖尔多项式的系数向量Ln+2(x) = (2*n+3-x)*Ln+1(x) - (n+1)*Ln(x)%% Synopsis: p = LaguerreIter(n)%% Input: n = 拉盖尔多项式的次数%% Output: p = n次拉盖尔多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %L0(x) = 1p = 1;return;elseif n == 1 %L1(x) = -x+1p = [-1 1];return;endpBk = 1; %初始化三项递推公式后项为L0pMid = [-1 1]; %初始化三项递推公式中项为L1for i = 0:n-2pMidCal1 = zeros(1,i+3); %构造用于计算的x*Ln+1(x)pMidCal1(1:i+2) = pMid;pMidCal2 = zeros(1,i+3); %构造用于计算的Ln+1(x)pMidCal2(2:i+3) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的Ln(x)pBkCal(3:i+3) = pBk;pFwd =( (2*i+3)*pMidCal2 - pMidCal1 - (i+1)*pBkCal )/ (i+2); %拉盖尔多项式三项递推公式Ln+2(x) = (2*n+3-x)*Ln+1(x) - (n+1)^2*Ln(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把拉盖尔多项式最高次项系数归一化function p = HermiteIter(n)% HermiteIter 用递推的方法计算n次埃尔米特多项式的系数向量Hn+2(x) = 2*x*Hn+1(x) - 2*(n+1)*Hn(x)%% Synopsis: p = HermiteIter(n)%% Input: n = 埃尔米特多项式的次数%% Output: p = n次埃尔米特多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %H0(x) = 1p = 1;return;elseif n == 1 %H1(x) = 2*xp = [2 0];return;endpBk = 1; %初始化三项递推公式后项为L0pMid = [2 0]; %初始化三项递推公式中项为L1for i = 0:n-2pMidCal = zeros(1,i+3); %构造用于计算的x*Hn+1(x)pMidCal(1:i+2) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的Hn(x)pBkCal(3:i+3) = pBk;pFwd =2*pMidCal - 2*(i+1)*pBkCal; %埃尔米特多项式三项递推公式Hn+2(x) = 2*x*Hn+1(x) - 2*(n+1)*Hn(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把拉盖尔多项式最高次项系数归一化function r = BinSolve(fun, a, b, tol)% BinSolve 用二分法解方程f(x)=0在区间[a,b]的根%% Synopsis: r = BinSolve(fun, a, b)% r = BinSolve(fun, a, b, tol)%% Input: fun = (string) 需要求根的函数% a,b = 寻根区间上下限% tol = (optional)误差,默认为5e-9%% Output: r = 在寻根区间内的根if nargin < 4tol = 5e-9;endXb = RootBracket(fun, a, b); %粗略寻找含根区间[m,n] = size(Xb);r = [];nr = 1; %初始化找到的根的个数为1maxit = 50; %最大二分迭代次数为50for i = 1:ma = Xb(i,1); %初始化第i个寻根区间下限b = Xb(i,2); %初始化第i个寻根区间上限err = 1; %初始化误差k = 0;while k < maxitfa = feval(fun, a); %计算下限函数值fb = feval(fun, b); %计算上限函数值m = (a+b)/2;fm = feval(fun, m);err = abs(fm);if sign(fm) == sign(fb) %若中点处与右端点函数值同号,右端点赋值为中点b = m;else %若中点处与左端点函数值同号或为0,左端点赋值为中点a = m;endif err < tol %如果在a处函数值小于tolr(nr) = a; %一般奇点不符合该条件,这样可以去除奇点nr = nr + 1; %找到根的个数递增k = maxit; %改变k值跳出循环endk = k + 1; %二分迭代次数递增endendfunction X = powerX(x,a,b)% powerX 对给定向量(x1, x2,..., xn)返回增幂矩阵(x1^a, x2^a,..., xn^a; x1^a+1, x2^a+1,..., xn^a+1; ...; x1^b, x2^b,..., xn^b;)%% Synopsis: X = powerX(x,a,b)%% Input: x = 需要返回增幂矩阵的向量% a,b = 寻根区间上下限%% Output: X = 增幂矩阵(x1^a, x2^a,..., xn^a; x1^a+1, x2^a+1,..., xn^a+1; ...; x1^b, x2^b,..., xn^b;)if round(a) ~= a | round(b) ~= berror('a,b must be integers');elseif a >= berror('a must be smaller than b!');endx = x(:)';row = b-a+1;col = length(x);X = zeros(row, col);for i = b:-1:aX(b-i+1,:) = x.^i;Endfunction [f, dfdx] = fun1_1(x)f = cos(x) - x;dfdx = -sin(x) - 1;function [f, dfdx] = fun1_2(x)f = exp(-x) - sin(x);dfdx = -exp(-x) - cos(x);function [f, dfdx] = fun2_1(x)f = x - exp(-x);dfdx = 1 + exp(-x);function [f, dfdx] = fun2_2(x)f = x.^2 - 2*x*exp(-x) + exp(-2*x);dfdx = 2*x - 2*exp(-x) + 2*x*exp(-x) - 2*exp(-2*x);function y = LegendreP6(x)p = LegendreIter(6);X = powerX(x,0,6);y = p*X;function y = ChebyshevT6(x)p = ChebyshevIter(6);X = powerX(x,0,6);y = p*X;function y = LaguerreL5(x)p = LaguerreIter(5);X = powerX(x,0,5);y = p*X;function y = HermiteH6(x)p = HermiteIter(6);X = powerX(x,0,6);y = p*X;思考题(1)由于Newton法具有局部收敛性,所以在实际问题中,当实际问题本身能提供接近于根的初始近似值时,就可保证迭代序列收敛,但当初值难以确定时,迭代序列就不一定收敛。

牛顿迭代法实验报告

牛顿迭代法实验报告

材料科学与工程实验教学中心实验报告课程名称实验名称牛顿迭代法方程求根专业班级学号姓名实验日期材料科学与工程实验教学中心实验报告一.实验目的通过对牛顿迭代法作编程练习与上机运算,进一步体会牛顿迭代法的不同特点二.实验原理(方法)给定初始值x0,ε为根的容许误差,η为|f(x)|的容许误差,N为迭代次数的容许值。

①如果f′(x0)=0或迭代次数大于N,则算法失败,结束;否则执行②②计算x1=x0-f(x0)/f′(x0)。

③若|x1-x0|<ε或|f(x1)|<η,则输出x1,程序结束;否则执行④④令x0=x1,转向①三.实验仪器设备及操作步骤电脑一台操作步骤:打开电脑,打开VB程序,编辑程序四.实验数据及处理(N-S图和程序)f(x)=x³+x²-3x-3结束Private Sub Command1_Click()Dim x0, x!, eps!, kx0 = Val(InputBox("x=0", "ÊäÈë³õÖµ", 0.5))eps = Val(InputBox("eps=", "ÊäÈëepsµÄÖµ", 0.000005)) x = x0 - f(x0) / p(x0)k = 1PrintDo While Abs(x - x0) >= epsPrint "k=" & k, "x=" & x, "f(x)" & f(x)x0 = xk = k + 1x = x0 - f(x0) / p(x0)LoopEnd SubFunction f(ByVal x!) As Singlef = x ^ 3 + x ^ 2 - 3 * x - 3End FunctionFunction p(ByVal x!) As Singlep = 3 * x ^ 2 + 2 * x - 3End Function五.实验结果分析及结论(算例及结果)六.思考题成绩指导教师日期Welcome To Download !!!欢迎您的下载,资料仅供参考!。

数值分析课程设计Newton 迭代法

数值分析课程设计Newton 迭代法

课程设计报告课程名称数值分析课题名称Newton 迭代法2013年 1 月9 日湖南工程学院课程设计任务书课程名称数值分析课题Newton 迭代法任务书下达日期2013 年12 月22 日任务完成日期2014 年 1 月 6 日一、设计内容与设计要求1.设计内容:对课程《计算方法》中的常见算法进行综合设计或应用(具体课题题目见后面的供选题目)。

2.设计要求:●课程设计报告正文内容a.问题的描述及算法设计;b.算法的流程图(要求画出模块图);c.算法的理论依据及其推导;d.相关的数值结果(通过程序调试),;e.数值计算结果的分析;f.附件(所有程序的原代码,要求对程序写出必要的注释)。

●书写格式a.要求用A4纸打印成册b.正文格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。

c.正文的内容:正文总字数要求在3000字左右(不含程序原代码)。

d.封面格式如下页。

●考核方式指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。

具体考核标准包含以下几个部分:a.平时出勤(占10%)b.系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)c.程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)d.设计报告(占30%)注意:不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。

e.独立完成情况(占10%)。

●课程验收要求a.判定算法设计的合理性,运行相关程序,获得正确的数值结果。

b.回答有关问题。

c.提交课程设计报告。

d.提交软盘(源程序、设计报告文档)。

e.依内容的创新程度,完善程序情况及对程序讲解情况打分。

三、进度安排1、班级:信息与计算科学:1101、1102、11032、主讲教师:聂存云、阳卫锋3、辅导教师:聂存云、阳卫锋上机时间安排:第17教学周(课程设计算法设计)星期一:8:10---11:50 14:10---17:30 1--A--404星期二:10:10---11:50 15:20---17:30 1--A--404星期三:8:10---11:50 14:10---17:30 1--A--404星期四:8:10---10:50 14:10---17:30 1--A--404星期五:8:10---11:50 14:10---17:30 1--A--404第18教学周(课程设计算法设计与实现、报告撰写)星期一:8:10---11:50 14:10---17:30 1--A--404星期二:10:10---11:50 15:20---17:30 1--A--404星期三:8:10---11:50 14:10---17:30 1--A--404星期四:8:10---10:50 14:10---17:30 1--A--404星期五:8:10---11:50 14:10---17:30 1--A--404课程设计算法设计答辩与报告提交、成绩评定星期六:8:10---11:50 14:10---17:30 1--A--404星期日:8:10---11:50 14:10---17:30 1--A--404注:由于系部机房已排满,故采用在教学楼教室,学生自带手提电脑进行本课程设计。

牛顿迭代法实验报告

牛顿迭代法实验报告

用牛顿迭代法求非线性方程的根一、 实验题目求方程()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 nonereal,parameter::e=0.005 real,parameter::n=9 real::x1real::x0=1.5 integer::kreal,external::f,ydo k=1,9if (y(x0)==0) then write(*,*)"失败"elsex1=x0-f(x0)/y(x0)if (abs(x1-x0)<e) then write(*,*)k,x1elsex0=x1end ifend ifend doendfunction f(x)implicit nonereal::freal::xf=x*x*x-x-1returnend functionfunction y(x)implicit nonereal::yreal::xy=3*x*x-1returnend function五、求解结果3 1.3247184 1.3247185 1.3247186 1.3247187 1.3247188 1.3247189 1.324718六、算法评价及讨论1.在求解在1.5处附近的根,不难发现在输入区间左端值为1时需要迭代6次,而输入区间左端值为1.5时,却只要4次。

牛顿迭代法收敛定理

牛顿迭代法收敛定理

关于牛顿迭代法的课程设计实验指导非线性方程(或方程组)问题可以描述为求 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,……) 就是著名的牛顿迭代公式,通过迭代计算实现逐次逼近方程的解。

牛顿迭代法实验课件

牛顿迭代法实验课件

05
结论与展望
牛顿迭代法的优缺点总结
收敛速度快
牛顿迭代法在初始点接近真实根的情况下具有非常快的收敛速度。
适用于多维问题
可以推广到多维问题,通过引入更多的方程和变量来求解复杂的问题。
牛顿迭代法的优缺点总结
• 适用于非线性问题:能够处理非线性方程 的求解问题,这是许多其他方法无法做到 的。
牛顿迭代法的优缺点总结
初始值影响
初始值对迭代结果有一定影响,但只要在合理范围内,最终都能 收敛到正确解。
结果误差分析
绝对误差
(|x - x_{true}| = 0.00002698)
相对误差
(frac{|x - x_{true}|}{|x_{true}|} = 0.0027%)
误差来源
主要来源于舍入误差和计算过程中的近似处理。
牛顿迭代法实验课件
目录
• 引言 • 牛顿迭代法的基本原理 • 牛顿迭代法的实现步骤 • 实验结果与分析 • 结论与展望
01
引言
牛顿迭代法的定义
牛顿迭代法是一种数值计算方法,通 过迭代的方式求解非线性方程的根。
它基于牛顿定理,即函数在某点的切 线与x轴的交点即为该函数的根。
牛顿迭代法的应用场景
在金融领域的应用
牛顿迭代法可以用于求解金融领 域中的复杂模型和优化问题,例 如资产定价和风险管理。
在工程领域的应用
牛顿迭代法可以用于求解各种工 程领域的优化问题,例如结构分 析和控制系统设计。
感谢您的观看
THANKS
通过改进初始点的选择方法,提 高迭代过程的成功率和收敛速度。
在迭代过程中引入阻尼因子,以 避免迭代过程在鞍点处停滞不前。
根据迭代过程中的误差信息,自 适应地调整步长,以提高收敛速 度和稳定性。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关于牛顿迭代法的课程设计实验指导非线性方程(或方程组)问题可以描述为求 x 使得f (x ) = 0。

在求解非线性方程的方法中,牛顿迭代法是求非线性方程(非线性方程组)数值解的一种重要的方法。

牛顿是微积分创立者之一,微积分理论本质上是立足于对世界的这种认识:很多物理规律在微观上是线性的。

近几百年来,这种局部线性化方法取得了辉煌成功,大到行星轨道计算,小到机械部件设计。

牛顿迭代法正是将局部线性化的方法用于求解方程。

一、牛顿迭代法及其收敛速度牛顿迭代法又称为牛顿-拉夫逊方法(Newton-Raphson method ),是一种在实数域和复数域上通过迭代计算求出非线性方程的数值解方法。

方法的基本思路是利用一个根的猜测值x 0做初始近似值,使用函数f (x )在x 0处的泰勒级数展式的前两项做为函数f (x )的近似表达式。

由于该表达式是一个线性函数,通过线性表达式替代方程f (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处的局部线化表达式为 由此得一次方程0)()()(000='-+x f x x x f求解,得如图1所示,x 1比x 0更接近于x *。

该方法的几何意义是:用曲线上某点(x 0,图1 牛顿迭代法示意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(211n n n x x x +=+,(n = 0,1,2,……) 取x 0= 1.4为初值,迭代计算3次的数据列表如下其中,第三栏15位有效数是利用MATLAB 的命令sqrt(2)计算结果。

观察表中数据,第一次迭代数据准确到小数点后四位,第二次迭代数据准确到小数点后八位,……。

二阶收敛速度可解释为,每迭代一次,近似值的有效数位以二倍速度递增。

对于计算任意正数C 的平方根,牛顿迭代法计算同样具有快速逼近的性质。

二、牛顿迭代法的收敛性牛顿迭代法在使用受条件限制,这个限制就是通常所说的牛顿迭代法的局部收敛性。

定理 假设f (x )在x *的某邻域内具有连续的二阶导数,且设f (x *)=0,0)(*≠'x f ,则对充分靠近x *的初始值x 0,牛顿迭代法产生的序列{x n }收敛于x *。

下面例子是牛顿迭代法不收敛的反例。

反例说明,牛顿迭代法局部收敛性要求初始点要取得合适,否则导致错误结果。

例2用牛顿迭代法解方程 f (x ) = x 3– x – 3 = 0。

分析:利用MATLAB 求多项式零点命令roots(p),计算得三次方程的三个根如下表1为了使用牛顿迭代法计算,对于 f (x ) = x 3 – x – 3 ,首先求导数,得13)(-='x x f 。

取x 0 = 0和x 0 = 1取分别用牛顿迭代法计算,得对于迭代初值取x 0=0x 0 = 0附近,算法将陷入死循环。

图2 牛顿迭代法初值不收敛示意图 而迭代初值取x 0=1,可以使牛顿迭代法得到收敛。

三、特殊代数方程的牛顿迭代法收敛区域将牛顿迭代法用于求解高阶代数方程时,首先回顾一个代数基本定理,即“一个n 阶多项式在复数域内有n 个根”。

根据牛顿迭代法的局部收敛性质,任意取一个数据做为牛顿迭代的初值,可能导致迭代不收敛,即使这一个初值可以使迭代法收敛,下一个有趣的问题是“迭代序列将收敛于哪一个根”,其规律如何?例3牛顿迭代法的收敛区域问题:Newton 迭代法可以用于求解复数方程 z 3– 1 = 0,该方程在复平面上三个根分别是选择中心位于坐标原点,边长为4的正方形内的任意点作初始值,进行迭代,将不收敛的点定义为第一类,给它们标一种颜色;再把收敛到三个根的初值分为三类,并分别标上不同颜色。

对充分多的初始点进行实验,绘出牛顿迭代法对该方程的收敛域彩色图。

图3 牛顿迭代法收敛区域色图问题分析:记f (z ) = z 3 – 1,则23)(z z f =',所以牛顿迭代公式为 由于牛顿迭代法的二阶收敛速度,对于一个取定的初值z 0,如果z 0是一个可以导致迭代收敛的初值,则迭代10次已经达到足够精度,故可以取迭代次数为10。

考虑以坐标原点为中心的正方形区域 取步长h =0.02,在区域内取离散网格点⎩⎨⎧⨯+-=⨯+-=h k y hj x kj 22,( j ,k =0,1,…,200) 由此可以构造出规则的复数z jk = x j + i y k ,( j ,k =0,1, (200)对于这些点,逐一用牛顿迭代法取初值进行迭代实验,判断是否收敛?如果收敛,到底以该点为初值的迭代序列收敛到哪方程的一个根?为了记录实验结果,构造四个阶数均为201×201矩阵:Z 0、Z 1、Z 2、Z 3,开始时这四个矩阵都设为全零矩阵。

如果以z jk 为初值的迭代实验结果是不收敛,则将Z 0的第j 行第k 列的元素改写为1;如果以z jk 为初值的迭代实验结果是收敛到第一个根,则将Z 1的第j 行第k 列的元素改写为1;如果以z jk 为初值的迭代实验结果是收敛到第二个根,则将Z 2的第j 行第k 列的元素改写为1;如果以z jk 为初值的迭代实验结果是收敛到第三个根,则将Z 3的第j 行第k 列的元素改写为1。

首先分析矩阵Z0的数据,由于该矩阵在开始时刻为全零矩阵,而在迭代实验结束后,不收敛的点对应元素被改写为“1”。

所以,矩阵的元素只可能是“0”或“1”,根据该矩阵的全部的非零元素所在的位置可以使用MATLAB的图形绘制命令spy()或pcolor()等显示出一个特殊的图形。

根据Z0数据绘的图形如下所示图4 牛顿迭代法不收敛区域色图导致牛顿迭代法不收敛的初始点所形成的平面点集是一个著名的集合,称为茹莉亚集(为纪念法国女数学家茹莉亚而命名)。

为了得到全局的收敛或不收敛情况,需要对四个矩阵进行叠加。

如果直接相加将导致一个全“1”矩阵,不可能得出希望的结果。

故,对矩阵做如下组合处理,令Z = Z0 + 2Z1 + 3Z2 + 4Z3则矩阵Z的元素由“1”、“2”、“3”、“4”这四个元素组成。

该矩阵的某一位置上数据为“1”,说明这一位置上的复数做初值导致牛顿迭代法不收敛;位置上数据为“2”,说明这一位置上的复数做初值导致牛顿迭代法收敛到第一个根;位置上数据为“3”,说明这一位置上的复数做初值导致牛顿迭代法收敛到第二个根;位置上数据为“4”,说明这一位置上的复数做初值导致牛顿迭代法收敛到第三个根。

所以该矩阵包含了矩阵区域内离散点集合做为牛顿迭代法收敛实验结果的全部信息。

将这一矩阵用MATLAB作图命令pcolor()作用,将绘出图3所示的收敛区域色图。

导致牛顿迭代法收敛到第一个根的初始点所形成的平面点集,可以根据Z1数据绘图形四、关于实验的注记1.MATLAB相关命令介绍(1)求多项式零点命令roots()该命令用于求多项式P(x) = a1x n + a2 x n-1 + … + a n x + a n+1的全部零点。

例如z3– 1 = 0的三个零点,只需用命令:roots([1 0 0 -1]),可得ans =-0.5000 + 0.8660i-0.5000 - 0.8660i1.0000(2)绘伪彩色图命令pcolor()该命令主要用于绘制矩阵色图,根据矩阵中元素数据的大小不同绘不同颜色。

常常与命令shading interp结合使用效果会更好。

在MATLAB命令窗口中键入help pcolor,可获得英文帮助信息。

2.例题3所用MATLAB程序及注释:X=roots([1,0,0,-1]); %利用MATLAB命令求三次方程的根r1=X(1);r2=X(2);r3=X(3);h=0.02;N=1+4/h; %确定网格步长及网格点规模z0(N,N)=0;z1=z0;z2=z0;z3=z0; %定义四个大矩阵为全零矩阵t=(-2:h:2)+eps;[x,y]=meshgrid(t); %确定网格点坐标z=x+y*i;for j=1:Nfor k=1:Np=z(j,k); %提取迭代初始点for n=1:10p=p-(p-1/p^2)/3; %牛顿迭代操作endif abs(p-r1)<0.01z1(j,k)=1; %确定收敛到第一个根的初始点elseif abs(p-r2)<0.01z2(j,k)=1; %确定收敛到第二个根的初始点elseif abs(p-r3)<0.01z3(j,k)=1; %确定收敛到第三个根的初始点elsez0(j,k)=1; %确定不收敛的初始点end end endZ=z0+2*z1+3*z2+4*z3; figure(1)pcolor(x,y,Z),shading interp %绘牛顿迭代法收敛域 figure(2)pcolor(x,y,z0),shading interp %绘牛顿迭代法不收敛域课程设计实验题目1.牛顿迭代法解复方程z n + 1 = 0的收敛域问题。

实验目的:了解Newton 迭代法解复方程z n+ 1 = 0(n ≥3)时收敛域的结构。

实验原理:Newton 迭代法可以用于求解复数方程z n + 1 = 0,例如对 z 6 + 1 = 0,该方程在复平面上六个根分别是 选择中心位于坐标原点,边长为4的正方形内的任意点作初始值进行迭代,将不收敛的初值点归为第一类,再把收敛到六个根的初值归为另外六类,分别以不同颜色做图。

对充分多的初始点进行实验,绘出牛顿迭代法对该方程的收敛域彩色图。

2.牛顿迭代法计算隐函数值实验实验目的:了解隐函数存大定理与牛顿迭代法之间的联系。

实验原理:隐函数存在定理叙述为:如果f (x ,y )及),(y x f y '皆在(x 0,y 0)附近连续,而且f (x 0,y 0) = 0,0),(00≠'y x f y则在(x 0,y 0)的附近,方程f (x ,y ) = 0恰有一个连续解y =y (x )。

相关文档
最新文档