关于牛顿迭代法的课程设计实验指导共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
通过改进初始点的选择方法,提 高迭代过程的成功率和收敛速度。
在迭代过程中引入阻尼因子,以 避免迭代过程在鞍点处停滞不前。
根据迭代过程中的误差信息,自 适应地调整步长,以提高收敛速 度和稳定性。

牛顿迭代法实验报告

牛顿迭代法实验报告
2.迭代:对k=1,2,…,N,做:
1)x1=x0-F0/F0’,
2)计算F1=f(x1);F1’=f’(x1)
3)若F1’=0,则输出“方法失败”并结束。
3.控制:若|x1-x0|<EPS或|F1|<DELTA,则输出近似解x1和迭代次数k并结束;否则,x0=x1;F0=F1;F0’=F1’。
4.k>N时输出“经N次迭代无满足要求的近似解”结束。
输入DELTA:1e-7
输入N:100
x(1)=3.000000 x(2)=2.200000 x(3)=1.830151 x(4)=1.737795 x(5)=1.732072
最终结果为1.732051Press any key to continue
六、分析和讨论
1.输入不同的初值x0,迭代次数的变化情况
四、实验步骤
1)完成牛顿迭代法的程序设计及录入;
2)完成程序的编译和链接,并进行修改;
3)用书上的例子对程序进行验证,并进行修改;
4)分别输入两组不同的根的误差限,观察运算次数的变化;
5)分别取不同的初时值x0,观察运算结果的变化;
6)完成实验报告。
五、实验结果
1.经编译、链接及例子验证结果正确的源程序:
#include<stdio.h>
#include<math.h>
float f(float x)
{
float a;
a=x*x*x+x*x-3*x-3;
return a;
}
float f1(float x)
{
float b;
b=3*x*x+2*x-3;
return b;
}

实验三牛顿迭代法

实验三牛顿迭代法

实验三牛顿迭代法的算法、验证相关题目的收敛速度【实验目的】1.了解牛顿迭代法的基本概念。

2.了解牛顿迭代法的收敛性和收敛速度。

3.学习、掌握MATLAB 软件的有关命令。

【实验内容】牛顿切线法的MATLAB 主程序现提供名为newtonqx.m 的M 文件:function [k,xk,yk,piancha,xdpiancha]=newtonqx(x0,tol,ftol,gxmax )x(1)=x0;for i=1:gxmaxx(i+1)=x(i)-fnq(x(i))/(dfnq(x(i))+eps);piancha=abs(x(i+1)-x(i));xdpiancha=piancha/(abs(x(i+1))+eps);i=i+1;xk=x(i);yk=fnq(x(i));[(i-1)xkykpianchaxdpiancha]if (abs(yk)<ftol)&((piancha<tol)|(xdpiancha<tol))k=i-1;xk=x(i);[(i-1)xkykpianchaxdpiancha]return ;endendif i>gxmaxdisp('请注意:迭代次数超过给定的最大值gxmax 。

')k=i-1;xk=x(i);[(i-1)xkykpianchaxdpiancha]return ;end[(i-1),xk,yk,piancha,xdpiancha]';例2.6.5求113,要求精度为610-.解.方法1用牛顿迭代公式(2.12)计算.设x =,则01132=-x ,记113)(2-=x x f ,x x f 2)('=.由牛顿迭代公式得,kk k k x x x x 211321--=+,即)(k k k x x x 113211+=+)321,0( ,,,其中=k 取初始值100=x ,计算结果列入表2-12.因为,迭代次数k =4时,偏差34x x -810-<,满足精度510-,所以,≈11310.63015.方法2用牛顿切线法的MATLAB 主程序计算.分别建立名为fnq.m 和dfnq.m 的M 文件function y=fnq(x)y=x^2-113;function y=dfnq(x)y=2*x;在MATLAB 工作窗口输入程序>>[k,xk,yk,piancha,xdpiancha]=newtonqx(10,1e-5,1e-5,100)运行后,将输出的结果列入下表2-13.迭代k =4次,得到精度为510-的结果≈11310.63015.练习题:用牛顿迭代法求方程013223=+-x x 在9.04.00和-=x 的近似根,要求误差不超过310-。

牛顿迭代法

牛顿迭代法

实验十七 牛顿迭代法【实验目的】1. 了解牛顿迭代法的基本概念。

2. 了解牛顿迭代法的收敛性和收敛速度。

3. 学习掌握MATLAB 软件有关的命令。

【实验内容】用牛顿迭代法求方程0123=-++x x x 的近似根,误差不超过310-。

【实验准备】1.牛顿迭代法原理设已知方程0)(=x f 的近似根0x ,则在0x 附近)(x f 可用一阶泰勒多项式))((')()(000x x x f x f x p -+=近似代替.因此, 方程0)(=x f 可近似地表示为0)(=x p .用1x 表示0)(=x p 的根,它与0)(=x f 的根差异不大.设0)('0≠x f ,由于1x 满足,0))((')(0100=-+x x x f x f 解得)(')(0001x f x f x x -= 重复这一过程,得到迭代格式 )(')(1n n n n x f x f x x -=+ 这就是著名的牛顿迭代公式,它相应的不动点方程为)(')()(x f x f x x g -=. 2. 牛顿迭代法的几何解析 在0x 处作曲线的切线,切线方程为))((')(000x x x f x f y -+=。

令0=y ,可得切线与x 轴的交点坐标)(')(0001x f x f x x -=,这就是牛顿法的迭代公式。

因此,牛顿法又称“切线法”。

图17.1 牛顿迭代法3.牛顿迭代法的收敛性 计算可得2)]('[)(")()('x f x f x f x g -=,设*x 是0)(=x f 的单根,有0)(',0)(**≠=x f x f ,则 0)]('[)(")()('2****=-=x f x f x f x g , 故在*x 附近,有1)('<x g .根据不动点原理知牛顿迭代法收敛.4.牛顿迭代法的收敛速度定理(牛顿法收敛定理) 设)(x f 在区间],[b a 上有二阶连续导数,且满足0)()(<b f a f ,)("x f 在],[b a 上不变号,)('x f 在],[b a 上不等于0,令,)("max ,)(min x f M x f m bx a b x a ≤≤≤≤== 有Mm a b 2<-.则对任意],[0b a x ∈,牛顿迭代格式收敛于0)(=x f 在],[b a 中的唯一实根*x ,并且: (1) .12,2*02*<-=≤-x x m M q q M m x x n n (2) .221*--≤-n n n x x mM x x (3) )('2)(")(lim **2**1x f x f x x x x nn n =--+∞→,牛顿迭代法为2阶收敛. 5.迭代过程的加速对不动点方程)(x g x =,它导出的迭代过程有可能发散,也可能收敛得非常缓慢.这时,我们有没有办法改进不动点方程,让迭代过程收敛得快一些呢?(1) 一个简单办法 注意到x x =和)(x g x =都是不动点方程,他们的加权平均x x g x h )1()()(λλ-+=也是不动点方程,而且)(x h 与)(x g 有完全相同的不动点.适当选取λ的值,可以使发散的迭代过程变得收敛,使收敛慢的迭代过程变得收敛迅速.(2)加速的原因 在下面的实验中我们可以看到,)(x h 在不动点*x 附近的导数值在很大程度上决定了迭代过程的收敛性.)('x h 的绝对值越小,收敛性越好.因此,选择λ使得0)('=x h .计算得到理想的λ值为)('11x g -=λ,相应可计算出)('1)(')()(x g x xg x g x h --=. (3) λ的选取 由于理想的λ值为)('11x g -=λ,当)('x g 变换不大时可以取)('0x g 近似计算λ.(4) 回到牛顿迭代法的讨论 为求解方程0)(=x f ,可以使用不动点方程)(x f x x +=,相应的迭代函数为)()(x f x x g +=.对)(x g 进行加速)(')()]('1[1)]('1[)]([)('1)(')()(x f x f x x f x f x x f x x g x xg x g x h -=+-+-+=--=, 所以,牛顿迭代法是对基本迭代格式进行加速的结果.6. 迭代的MATLAB 命令MATLAB 中主要用for, while 等控制流命令实现迭代.【实验方法与步骤】练习1 用牛顿迭代法求方程0123=-++x x x 在5.0=x 附近的近似根,误差不超过310-.牛顿迭代法的迭代函数为1231)(')()(223++-++-=-=x x x x x x x f x f x x g , 相应的MA TLAB 代码为:>>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用牛顿迭代法求方程)0(2>=a a x .的近似正实根,由此建立一种求平方根的计算方法.由计算可知,迭代格式为)(21)(x a x x g +=.,在实验12的练习4种已经进行了讨论. 练习3用牛顿迭代法求方程1=x xe 的正根.牛顿迭代法的迭代函数为,)1(1)(')()(x x ex xe x x f x f x x g +--=-= 如果取初值为00=x ,相应的MA TLAB 代码为:>>clear;>>x=0.0;>>for i=1:6>>x=x-(x*exp(x)-1)/((x+1)*exp(x))>>end可算得迭代数列的前6项1, 0.6839, 0.5775, 0.5672, 0.5671, 0.5671,说明迭代是收敛的.如果取初值为100=x ,相应的MA TLAB 代码为:>>clear;>>x=10.0;>>for i=1:20>>x=x-(x*exp(x)-1)/((x+1)*exp(x))>>end可算得迭代数列的前20项为9.0909, 8.1900, 7.2989, 6.4194, 5.5544, 4.7076, 3.8844, 3.0933, 2.3487, 1.6759,1.1195, 0.7453, 0.5902, 0.5676, 0.5671, 0.5671, 0.5671, 0.5671, 0.5671, 0.5671说明迭代是收敛的.如果取初值为10-=x ,或5.10-=x ,可算得(MATLAB 代码略去)迭代数列是发散的.请根据函数图形分析原因,练习4求方程x e x -=在5.0=x 附近的根,精确到510-.先直接使用x e x g -=)(的迭代格式, 相应的MA TLAB 代码为:>>n=0; eps=1.0e-5; x=0.5;>>while abs(x-exp(-x))>eps>>p(-x); n=n+1;>>end>>x, n结果为x= 0.5671, n = 17,说明迭代17次后达到精度要求.为加快收敛速度,用x x g x h )1()()(λλ-+=构造迭代格式,由实验的预备知识中可知取625.0)5.0('11≈-=g λ, 相应的MA TLAB 代码为: >>n=0; eps=1.0e-5; x=0.5;>>while abs(x-0.625*exp(-x)-0.375*x)>eps>>x=0.625*exp(-x)+0.375*x; n=n+1;>>end>>x, n结果为x= 0.5671, n = 3,说明迭代3次后达到精度要求..练习5对练习中方程x e x -=,用加快后的迭代格式)('1)(')()(x g x xg x g x h --=求在5.0=x 附近的根,精确到510-. 计算可得xxe e x x g x xg x g x h --++=--=1)1()('1)(')()(, 相应的MATLAB 代码为: >>n=0; eps=1.0e-5; x=0.5;>>while abs(x-(x+1)*exp(-x)/(1+exp(-x)))>eps>>x=(x+1)*exp(-x)/(1+exp(-x)); n=n+1;>>end>>x, n结果为x= 0.5671, n =2,说明迭代2次后达到精度要求.【练习与思考】1. 用牛顿迭代法求方程1ln =x x 的近似根.2. 为求出方程013=--x x 的根,在区间]2,1[内使用迭代函数进行迭代,记录迭代数据,问迭代是否收敛?对迭代进行加速,对比加速前的数据,比较加速效果.3. 使用在不动点*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 x 练习2 用牛顿迭代法求方程 a(a 0) 的近
实验十七 牛顿迭代法
练习1 用牛顿迭代法求方程 x x x 1 0 3 在x=0.5附近的近似根,误差不超过 10 。 牛顿迭代法的迭代函数为
3 2
f ( x) x x x 1 g ( x) x x 2 f ( x) 3x 2 x 1
3 2
实验十七 牛顿迭代法Fra bibliotek数学实验
实验十七 牛顿迭代法
河西学院数学系
实验十七 牛顿迭代法
【实验目的】 1.了解牛顿迭代法的基本概念。 2.了解牛顿迭代法的收敛性和收敛速度。 3.学习、掌握MATLAB软件的有关命令。
实验十七 牛顿迭代法
【实验内容】 用牛顿迭代法求方程 x3 x2 x 1 0 的近似根,误 差不超过 103 。 【实验准备】 1.牛顿迭代法原理 2.牛顿迭代法的几何解析 3.牛顿迭代法的收敛性 4.牛顿迭代法的收敛速度 5.迭代过程的加速 6.迭代的MATLAB命令 MATLAB中主要用for,while等控制流命令实现迭代。
似正实根,由此建立一种求平方根的计算 方法。 1 a 由计算可知,迭代格式为 g ( x) ( x ) 2 x 在实验12的练习4中已经进行了讨论。
【练习与思考】

实验4 牛顿迭代法

实验4 牛顿迭代法

实验4 牛顿迭代法求方程的一个实根一、算法描述参数说明:x 双精度实型变量指针。

在该指针指向的变量中存放迭代初值;返回时在该指针指向的变量中存放终值。

eps 双精度实型变量。

控制精度要求。

js 整型变量。

最大迭代次数f 无类型函数指针变量。

指向计算方程左端函数f(x)值极其导数值f’(x)的函数。

该函数由用户自编,其形式为void f(x, y)double x, y[2];{ y[0]=f(x)的表达示;y[1]=f’(x)的表达示;return;}本函数返回一个整型标志值。

若返回的标志值小于0,则表示在出现了f’(x)=0的情况,函数中将输出信息“err”;若返回的标志值等于最大迭代次数,则表示还未满足精度要求,此时返回的实根终值只作为参考;若返回的标志值大于或等于0且小于最大迭代次数,则表示正常返回。

#include “stdio.h”#include “math.h”int newt(x, eps, js, f)int js;double *x, eps;void (*f)();{ int k;l;double y[2], d, p, x0, x1;l=js; k=1; x0=*x;(*f)(x0, y); /*计算f(x0)与f’(x0)*/d=eps+1.0;while ((d>=eps)&&(l!=0)){ if (fabs(y[1])+1.0==1.0){ printf(“err\n”); return(-1); }x1=x0-y[0]/y[1]; /*迭代计算x1=x0-f(x0)/f’(x0)*/(*f)(x1, y); /*计算f(x1)与f’(x1)*/d=fabs(x1-x0); p=fabs(y[0]);if (p>d) d=p;x0=x1;l=l-1;}*x=x1;k=js-l;return(k);}二、用牛顿迭代法求方程f(x)=x3-x2-1=0在x0=1.5附近的一个实根。

数值分析4牛顿迭代法课件

数值分析4牛顿迭代法课件

x1
x0
f ( x0 ) f ( x0 )
x*
x0 x1
x1比x0更接近于x*
02:12
4/25
应用——求正数平方根算法
设C > 0, x C
x2 – C = 0
令 f(x) = x2 – C , 则
xn1
xn
xn2 C 2 xn
f ( x) 2x
xn1
1 2 [xn
C ]
xn
02:12
5/25
1.414213562373095 2.22e-016
1.414213562373095 2.22e-016
02:12
6/25
收敛性: (1) 符合不动点框架
(2) 从序列收敛的角度(单调有界序列)
xn1
2
1 2 [xn
2 xn
]
2
1
[ 2
xn
2 xn
]2
1 2 xn
( xn
2 )2
只要x0 0, xn 2 (n 1) (有界)
x0, x1, x2,···, xn, ···
02:12
3/25
设 x*是方程 f(x)=0 的根, x0是x*的近似值。
在 x0 附近对函数做局部线性化
化难为易
f ( x) f ( x0 ) f ( x0 )( x x0 )化繁为简
f(x) = 0
f ( x0 ) f ( x0 )( x x0 ) 0
代入牛顿迭代格式
xn1
xn
f (xn ) f ( xn )
x1 x0
xn1
xn
f
( xn
f (xn ) ) f ( xn1 )

用牛顿迭代法求方程的近似解教学设计

用牛顿迭代法求方程的近似解教学设计

用牛顿迭代法求方程的近似解一.内容与内容解析本节课内容是人教版选修2-2第一章第二节探究与发现的内容,教学内容是用牛顿迭代法求方程的近似解。

在本节课中,在学生会用二分法求方程近似解的基础上,通过探究和发现,使学生能借助导数研究函数,利用切线逼近函数,进而理解迭代法的含义和作法,培养学生逼近的思想,以直代曲的思想,同时强化算法思想。

本节课通过Leonardo方程的求近似解问题,复习和巩固二分法求方程近似解的思想,步骤和算法,并借助导数和切线理解牛顿迭代法的“以直代曲” 思想和逼近思想,并分析整理牛顿迭代法的步骤和算法,并用牛顿迭代法解决实际问题。

在教学中,通过借助图形计算器的探究,以及问题引导的方式,培养学生分析问题,探究问题和合作解决问题的能力,借助二分法的复习培养学生类比的思想,同时体会知识的联系和应用。

本节课中给出的Leonardo方程有丰富的历史背景,练习中的开普勒方程又有实际背景,通过本节课的例子可以培养学生对数学的热爱以及强烈的求知欲望,对古代数学家坚忍不拔的毅力的学习以及对数学在实际生活中的巨大作用的认识都能使学生更加肯于钻研,并产生对数学的巨大兴趣。

教学重点:牛顿迭代法的迭代思想和过程。

二、目标和目标解析1.复习和巩固用二分法求方程的近似解二分法求方程的近似解是高中数学必修教材中的内容,和方程与函数的零点的关系一起,作为函数的性质的应用部分,是学生联系实际的重要内容,本节课以求Leonardo方程作为引入和研究对象,联系和复习二分法是顺理成章的,也能够将学习过的内容再现和升华。

2.探究并总结牛顿迭代法求方程的近似解牛顿迭代法是中学生能够接受的一种较简单的迭代方法,而且十分有效,但如果脱离图形计算器,也是非常困难的。

本节课的核心就是通过探究和实践,使学生能够完全理解牛顿迭代法的迭代原理,并能够通过图形计算器进行实际应用,提高了学生解决实际问题的能力。

3.培养学生利用图形计算器进行复杂计算和图形功能探究解决问题的能力。

(完整word版)c++求解非线性方程组的牛顿顿迭代法

(完整word版)c++求解非线性方程组的牛顿顿迭代法
}
void inv_jacobian(float yy[N][N],float inv[N][N])
{float aug[N][N2],L;
int i,j,k;
cout<<"开始计算雅克比矩阵的逆矩阵:"<<endl;
for (i=0;i<N;i++)
{ for(j=0;j<N;j++)
aug[i][j]=yy[i][j];
ff(x0,y0);//计算雅克比矩阵jacobian
ffjacobian(x0,jacobian);//计算雅克比矩阵的逆矩阵invjacobian
inv_jacobian(jacobian,invjacobian);//由近似解向量x0计算近似解向量x1
newdundiedai(x0, invjacobian,y0,x1);//计算差向量的1范数errornorm
yy[0][0]=2*x-2;
yy[0][1]=-1;
yy[1][0]=2*x;
yy[1][1]=8*y;
cout<<"雅克比矩阵是:"<<endl;
for( i=0;i<N;i++)
{for(j=0;j<N;j++)
cout<<yy[i][j]<<" ";
cout<<endl;
}
cout<<endl;
{ for(j=0;j<N2;j++)
cout<<aug[i][j]<<" ";
  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 )。

相关文档
最新文档