求代数方程的近似根(解).
第2章方程的近似解法

第二章 方程求根在许多实际问题中,常常会遇到方程f(x)=0求解的问题。
当f(x)为一次多项式时,f(x)=0称为线性方程,否则称为非线性方程。
对于非线性方程,由于f(x)的多样性,求其根尚无一般的解析方法可以使用,因此研究非线性方程的数值解法是十分必要的。
法、迭代法、牛顿法及割线法。
这些方法均是知道根的初始近似值后,进一步把根精确化,直到达到所要求的 精度为止。
也即求非线性方程根的数值方法。
第一节 第一节 增值寻根法与二分法2.1.1 增值寻根法设非线性方程f(x)=0的根为*x ,增值寻根法的基本思想是,从初始值0x 开始,按规定 的一个初始步长h 来增值。
令 1n x +=n x +h(n=0,1,2,…),同时计算f(1n x +)。
在增值的计算过程中可能遇到三种情形:(1) f(1n x +)=0,此时1n x +即为方 程的根*x 。
(2) f(n x )和f(1n x +)同符号。
这说明区间[n x , 1n x +]内无根。
(3) f(n x )和f(1n x +)异号,f(n x )·f(1n x +)<0此时当f(x)在区间[n x , 1n x +]上连续时,方程f(x)=0在[n x , 1n x +] 一定有根。
也即我们用增值寻根法找到了方程根的存在区间,n x 或1n x +均可以视为根的近似值。
下一步就是设法在该区间内寻找根 *x 更精确的近似值,为此再用增值寻根法 把n x 作为新的初始近似值,同时把步长缩小,例如选新步长1100h h =,这 样会得到区间长度更小的有根区间,从而也得到使f(x)n x ,作为*x 更 精确的近似值,若精度不够,可重复使用增值寻根法,直到有根区间的长度|1n x +-n x |<ε(ε为所要求的精度)为止。
此时f(n x )或f(1n x +)就可近似认为是零。
n x 或1n x +就是满足精度的方程的近似根(如图2-1).2—1例1 用增值寻根法求方程f(x)=324x x +-10=0的有根区间。
第七讲 MATLAB中求方程的近似根(解)

第七讲 MATLAB 中求方程的近似根(解)教学目的:学习matlab 中求根命令,了解代数方程求根求解的四种方法,即图解法、准解析法、数值方法以及迭代方法,掌握对分法、迭代法、牛顿切法线求方程近似根的基本过程;掌握求代数方程(组)的解的求解命令.教学重点:求方程近似解的几种迭代方法,代数方程(组)的解的求解命令的使用方法.利用所学的编程知识,结合具体的实例,编制程序进行近似求根.掌握相关的代数方程(组)的求解命令及使用技巧.教学难点:方程的近似求解和非线性方程(组)的求解.一、问题背景和实验目的求代数方程0)(=x f 的根是最常见的数学问题之一(这里称为代数方程,主要是想和后面的微分方程区别开.为简明起见,在本实验的以下叙述中,把代数方程简称为方程),当)(x f 是一次多项式时,称0)(=x f 为线性方程,否则称之为非线性方程.当0)(=x f 是非线性方程时,由于)(x f 的多样性,尚无一般的解析解法可使用,但如果对任意的精度要求,能求出方程的近似根,则可以认为求根的计算问题已经解决,至少能满足实际要求.同时对于多未知量非线性方程(组)而言,简单的迭代法也是可以做出来的,但在这里我们介绍相关的命令来求解,不用迭代方法求解.通过本实验,达到下面目的:1. 了解对分法、迭代法、牛顿切线法求方程近似根的基本过程;2. 求代数方程(组)的解.首先,我们先介绍几种近似求根有关的方法: 1. 对分法对分法思想:将区域不断对分,判断根在某个分段内,再对该段对分,依此类推,直到满足精度为止.对分法适用于求有根区间内的单实根或奇重实根.设)(x f 在],[b a 上连续,0)()(<⋅b f a f ,即 ()0f a >,()0f b <或()0f a <,()0f b >.则根据连续函数的介值定理,在),(b a 内至少存在一点 ξ,使()0f ξ=.下面的方法可以求出该根:(1) 令0()/2x a b =+,计算0()f x ;(2) 若0()0f x =,则0x 是()0f x =的根,停止计算,输出结果0x x =.若 0()()0f a f x ⋅<,则令1a a =,10b x =,若0()()0f a f x ⋅>,则令10a x =,1b b =;111()/2x a b =+.……,有k a 、k b 以及相应的()/2k k k x a b =+.(3) 若()k f x ε≤ (ε为预先给定的精度要求),退出计算,输出结果()/2k k k x a b =+; 反之,返回(1),重复(1),(2),(3).以上方法可得到每次缩小一半的区间序列{[,]}k k a b ,在(,)k k a b 中含有方程的根. 当区间长k k b a -很小时,取其中点()/2k k k x a b =+为根的近似值,显然有2111()/2()/(2)()/2k k k k k k x b a b a b a ξ+---≤-=-==-以上公式可用于估计对分次数k .分析以上过程不难知道,对分法的收敛速度与公比为12的等比级数相同.由于1021024=,可知大约对分10次,近似根的精度可提高三位小数.对分法的收敛速度较慢,它常用来试探实根的分布区间,或求根的近似值. 2. 迭代法a) 松弛法:由方程()0f x =构造一个等价方程()x x φ=.则迭代方程是:1(1)()k k k k k x x x ωωφ+=-+,1/(1'())k k x ωφ=-,其中'()1x φ≠.松弛法的加速效果是明显的 (见附录4),甚至不收敛的迭代函数经加速后也能获得收敛.b) Altken 方法:松弛法要先计算'()k x φ,在使用中有时不方便,为此发展出以下的 Altken 公式:(1)()k k x x φ= ;(2)(1)()k k x x φ=;(2)(2)(1)2(2)(1)1()/(2)k k k k k k k x x x x x x x +=---+, ,2,1,0=k这就是Altken 公式,它的加速效果也是十分明显的,它同样可使不收敛的迭代格式获得收敛(见附录5).3. 牛顿(Newton)法(牛顿切线法)()0f x =是非线性方程其迭代公式为:1(()/'())k k k k x x f x f x +=- ,2,1,0=k即为牛顿法公式.牛顿法的缺点是:(1)对重根收敛很慢;(2)对初值0x 要求较严,要求0x 相当接近真值*x .因此,常用其他方法确定初值0x ,再用牛顿法提高精度. 以下是本实验中的几个具体的实验 具体实验1:对分法先作图观察方程:3310x x -+=的实根的分布区间,再利用对分法在这些区间上分别求出根的近似值.程序如下: function [y,p]=erfen()clc, x=[];a=[];b=[]; a(1)=1;b(1)=2; i=1;x(i)=(a(i)+b(i))/2; e=abs(f(x(i))); ezplot('x^3-3*x+1',[a(1),b(1)]);hold on, plot([a(i),b(i)],[0,0]) while e>10^(-5)plot([a(i),a(i)],[0,100],[x(i) x(i)],[0 100],[b(i) b(i)],[0 100]),pause(0.5) if f(a(i))*f(x(i))<0a(i+1)=a(i);b(i+1)=x(i);x(i+1)=(a(i+1)+b(i+1))/2; elsea(i+1)=x(i);b(i+1)=b(i);x(i+1)=(a(i+1)+b(i+1))/2; ende=abs(f(x(i)));i=i+1; endy=x(i);p=[a;x;b]' function u=f(x) u=x^3-3*x+1; end end图形如下:结果为:1.5321具体实验2:普通迭代法采用迭代过程:1()k k x x φ+=求方程3310x x -+=在 0.5 附近的根,精确到第 4 位小数.构造等价方程:3(1)/3x x =+用迭代公式: 31(1)/3k k x x +=+, ,2,1,0=k 具体实验3:迭代法的加速1——松弛迭代法3()(1)/3x x φ=+,2()'x x φ=,21/(1)k k x ω=-迭代公式为31(1)(1)/3k k k k k x x x ωω+=-++clc;x=[];w=[]; x(1)=1;w(1)=1/(1-x(1)); for i=1:10w(i)=1/(1- x(i)); x(i+1)=(1-w(i))*x(i)+ w(i)*(x(i)^3+1)/3; end x另外有程序可以参考,详见参见附录4. 具体实验4:迭代法的加速2——Altken 迭代法迭代公式为:(1)3(1)/3k k x x =+,(2)(1)3(1)/3k k x x =+(2)(2)(1)2(2)(1)1()/(2)k k k k k k k x x x x x x x +=---+, ,2,1,0=k%(符号计算)syms x fx gx;gx=(x^3+1)/3;fx=x^3-3*x+1; disp('k x x1 x2') x=0.5;k=0; ffx=subs(fx, 'x', x); while abs(ffx)>0.0001;u=subs(gx, 'x', x);v=subs(gx, 'x', u);disp([num2str(k), ' ', num2str(x), ' ', num2str(u), ' ', num2str(v)]) x=v-(v-u)^2/(v-2*u+x);k=k+1;ffx=subs(fx, 'x', x); enddisp([num2str(k), ' ', num2str(x), ' ', num2str(u), ' ', num2str(v)]) %(数值计算)function [y,p]=althken() % 求方根的迭代程序 clc,format long e , x(1)=6; i=1;p=[];ezplot('x^3-3*x+1',[x(1)-9,x(1)+1]);hold on plot([x(1)-20,x(1)+2],[0,0]) while abs(f(x(i)))>=10^(-5) plot(x(i),0,'*')t1=phi(x(i));t2=phi(t1); x(i+1)=t2-(t2-t1)^2/(t2-2*t1+x(i)+eps); p=[p;[i, x(i),t1,t2]]; i=i+1; pause(0.1) endp,y=x(i), i, format function u=phi(x) u=(x^3+1)/3; endfunction u=f(x) u=x^3+1-3*x; end end具体实验5:牛顿法用牛顿法计算方程3310x x -+=在-2到2之间的三个根. 提示:3()31f x x x =-+,2'()33f x x =-迭代公式:2321(31)/(33)k k k k k x x x x x +=--+-function [y,p]=newton() % 求方根的迭代程序 clc,format long e , x(1)=6; i=1; p=[]; ezplot('x^3-3*x+1',[x(1)-9,x(1)+1]);hold on plot([x(1)-20,x(1)+2],[0,0]) while abs(f(x(i)))>=10^(-5)plot(x(i),0,'*'), x(i+1)=x(i)-f(x(i))/(df(x(i))+eps); p=[p;[i, x(i)]]; i=i+1; pause(0.1) endformat short , p,y=x(i), i, function u=df(x) u=3*x^2-3; endfunction u=f(x) u=x^3+1-3*x; end end 结果:结果为: 1.5321※进一步思考:用迭代法求3的平方根. 迭代公式为1(3/)/2n n n x x x +=+. 编写M 函数文件My_sqrt.m, 求3正的平方根x . 要求误差小于510-.仅要求写出源程序.试使用以上介绍的迭代法来相互比较 参考程序:function y=my_sqrt(a) % 求方根的迭代程序if nargin~=1|~isa(a,'double') , error('输入数字为一个正数!'),end if a<0, error('输入数字为正数!'), endif a>0format long e , x(1)=0; x(2)=1; i=1; while abs(x(i+1)-x(i))>=10^(-5)i=i+1;x(i+1)=1/2*(x(i)+a/(x(i)+eps));endy=x(i+1);i,format end现在我们简单介绍图解法如何来求解一元方程和二元方程的根: 例:exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)=0.5>>ezplot('exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5',[0 5]) >>hold on, line([0,5],[0,0])验证:t=3.5203 >>syms x; t=3.5203;vpa(exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5) ans =-.43167073997540938989914138801396e-4例::x^2*exp(-x*y^2/2)+exp(-x/2)*sin(x*y)=0y^2 *cos(y+x^2) +x^2*exp(x+y)=0>> ezplot('x^2*exp(-x*y^2/2)+exp(-x/2)*sin(x*y)')>> hold onezplot('y^2 *cos(y+x^2) +x^2*exp(x+y)')具体的结果请大家自己下来运行二、关于直接利用函数(命令)求解方程及简介(1) solve('f(x)'),f(x)为一个具体的表达式.(2) roots(A),A为某个多项式按x降幂排列的系数矩阵(3) fzero('f(x)', x0),f(x)为一个具体的表达式,x0为一个具体的数值(4) linsolve(A,b),A为一方程组的系数矩阵,b为方程组右端的常数矩阵.1.单变量的多项式方程求根:命令格式:roots(A)例:x^3-6*(x^2)-72*x-27=0;>>p=[1 -6 -72 -27]>>r=roots(p)r=12.1229-5.7345-0.38842. 多项式型方程的准解析解法命令格式:[x,…]=solve(eqn1,eqn2,…)例:x^2+y^2-1=00.75*x^3-y+0.9=0>>syms x y;>> [x,y]=solve('x^2+y^2-1=0', '75*x^3/100-y+9/10=0')检验:>>[eval('x.^2+y.^2-1'), eval('75*x.^3/100-y+9/10')]具体结果就请大家下来自己运行3. 线性方程组的求解例:求线性方程组b⋅的解,已知m=[1 2 3 4 5;2 3 4 5 6;3 4 5 6 7 8;4 5 6 7 8 ;5 6 7 8 0],m=xb=[1;2;3;4;5]for i=1:5for j=1:5m(i, j)=i+j-1;endendm(5, 5)=0;b=[1:5]'; linsolve(m, b)4. 非线性方程数值求解(1)单变量非线性方程求解在MATLAB中提供了一个fzero函数,可以用来求单变量非线性方程的根.该函数的调用格式为:z=fzero('fname',x0,tol,trace)其中fname是待求根的函数文件名,x0为搜索的起点.一个函数可能有多个根,但fzero 函数只给出离x0最近的那个根.tol控制结果的相对精度,缺省时取tol=eps,trace•指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0.例:求f(x)=x-10x+2=0在x0=0.5附近的根.步骤如下:(a) 建立函数文件funx.m.function fx=funx(x)fx=x-10.^x+2;(b)调用fzero函数求根.z=fzero('funx',0.5)z = 0.3758(2)非线性方程组的求解对于非线性方程组F(X)=0,用fsolve函数求其数值解.fsolve函数的调用格式为: X=fsolve('fun',X0,option)其中X为返回的解,fun是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定.最优化工具箱提供了20多个选项,用户可以使用optimset命令将它们显示出来.如果想改变其中某个选项,则可以调用optimset()函数来完成.例如,Display 选项决定函数调用时中间结果的显示方式,其中‘off’为不显示,‘iter’表示每步都显示,‘final’只显示最终结果.optim set(‘Display’,‘off’)将设定Display 选项为‘off’. 例: 求下列非线性方程组在(0.5,0.5) 附近的数值解.(a) 建立函数文件myfun.m . function q=myfun(p) x=p(1);y=p(2);q(1)=x-0.6*sin(x)-0.3*cos(y);q(2)=y-0.6*cos(x)+0.3*sin(y); (b) 在给定的初值x0=0.5,y0=0.5下,调用fsolve 函数求方程的根. x=fsolve('myfun',[0.5,0.5]',optimset('Display','off')) x = 0.6354 0.3734将求得的解代回原方程,可以检验结果是否正确,命令如下: q=myfun(x) q = 1.0e-009 * 0.2375 0.2957 可见得到了较高精度的结果.精品案例:螺旋线与平面的交点问题:螺旋线与平面相交的情况多种多样, 根据螺旋线与平面方程的不同可以相交, 也可以不相交. 在相交的情况下, 可以交于一点, 也可以交于好多点. 对于各种相交的情况, 要求其交点的坐标并不是一件容易的事. 本次实验就以此为背景讨论下面的具体问题:已知螺旋线的参数方程为4cos ,4sin ,,08x y z θθθθπ===≤≤.平面的方程为:0.520x y z ++-=. 求该螺旋线与平面的交点. 要求:1)求出所有交点的坐标;2)在同一图形窗口画出螺旋线、平面和交点. 实验过程: 1.1 问题分析可以采用多种方法求螺旋线与平面的交点坐标, 包括fsolve 等. 先对方程化简,减少变量个数,使用图解方法求方程的根.再分别画出螺旋线,平面,及其交点. 1.2 算法描述与分析先对方程化简,减少变量个数,再利用fsolve, 选择适当的初值, 求其数值解;再分别会出图形;最后对图形作出必要的修饰. 1.3 源程序及注释将螺旋线的参数方程代入平面方程后可得: 等价变形得 : 建立下面M 文件intersect_point.m %使用图解法求交点,并且三维图 %画图确定解的个数和大概位置 theta=0:0.01:8*pi;y1=4*(cos(theta)+sin(theta)); y2=2-0.5*theta;plot(theta,y1,theta,y2) %画出两个函数的图形%画螺旋线%theta=0:pi/100:8*pi; x=4*cos(theta); y=4*sin(theta); z=theta;figure %新建图形窗口plot3(x,y,z) %画含有参数的空间曲线 hold on %透明的画平面%x1=-5:0.1:5; %取值和螺旋线的范围[-4,4]有关. y1=x1;[X1 Y1]=meshgrid(x1,y1);%网格化,画曲面 Z1=4-2*X1-2*Y1;surf(X1,Y1,Z1) %或者使用mesh(X1,Y1,Z1)25.0sin 4cos 4=-++θθθθθθ5.02sin 4cos 4-=+shading flatalpha(0.5) %设置透明度alpha('z') %设置透明度方向%求交点坐标,为避免变量混淆和覆盖,这里用t 代替theta%i=1for n=[2,5,9,11] %根据画图确定解的大概位置作为初值t(i)=fsolve(inline('4*cos(t)+4*sin(t)+0.5 *t-2'),n)%选择不同初值求交点 x0(i)=4*cos(t(i));y0(i)=4*sin(t(i));z0(i)=t(i);i=i+1;endplot3(x0,y0,z0,'ro')1.4 测试结果(写清输入输出情况)从图形可见在 内与三角曲线有4个交点.交点坐标为:theta 的数值解为:t=[2.1961 5.3759 9.1078 11.1023]四个交点的近似坐标为:x0 =[-2.3413 2.4635 -3.8007 0.4261]y0 =[3.2432 -3.1514 1.2468 -3.9772] z0 =[2.1961 5.3759 9.1078 11.1023]1.5 调试和运行程序过程中产生的问题及采取的措施求交点的时候会出现重根和漏根的情形,通过选择适当的初值避免了上述情况.1.6 对算法和程序的讨论、分析, 改进设想及其它经验教训solve 函数只能求解一个数值解,不能全部求出;用fsolve 函数好; 为了满足更好的视觉πθ80≤≤效果,可以对图形进行进一步的修饰.习题1.已知多项式323)(2345+++-=x x x x x f2.解方程组:sin()0x x y ye +-=(1)22x y -= (2)3.求解方程: ex x x =)cos( 4.求解多项式方程 0189=++x x5.求下列代数方程(组)的解:(1) 510x x -+=(2) 230x y += ①2431x y += ②6.选择适当的迭代过程,分别使用:(1)普通迭代法;(2)与之相应的松弛迭代法和 Altken 迭代法.求解方程0133=+-x x 在 1.4 附近的根,精确到4位小数,请注意迭代次数的变化.7.分别用对分法、普通迭代法、松弛迭代法、Altken 迭代法、牛顿切法线等5种方法,求方程 sin()t x x ⋅= 的正的近似根,10≤<t .(建议取 5.0=t .时间许可的话,可进一步考虑 25.0=t 的情况.)五、附录为供近似求根的算法附录1:对分法程序(fulu1.m )syms x fx; a=0;b=1;fx=x^3-3*x+1;x=(a+b)/2;k=0;ffx=subs(fx, 'x', x);if ffx==0;disp(['the root is:', num2str(x)])else disp('k ak bk f(xk)')while abs(ffx)>0.0001 & a<b;disp([num2str(k), ' ', num2str(a), ' ', num2str(b), ' ', num2str(ffx)]) fa=subs(fx, 'x', a);ffx=subs(fx, 'x', x);if fa*ffx<0b=x;elsea=x;endk=k+1;x=(a+b)/2;enddisp([num2str(k), ' ', num2str(a), ' ', num2str(b), ' ', num2str(ffx)])end注:实验时,可将第 2 行的 a、b 改为其它区间端点进行其它实验.附录2:普通迭代法(fulu2.m)syms x fx gx; gx=(x^3+1)/3;fx=x^3-3*x+1; disp('k x f(x)')x=0.5;k=0; ffx=subs(fx, 'x', x);while abs(ffx)>0.0001;disp([num2str(k), ' ', num2str(x), ' ', num2str(ffx)]);x=subs(gx, 'x', x);ffx=subs(fx, 'x', x);k=k+1;enddisp([num2str(k), ' ', num2str(x), ' ', num2str(ffx)])附录3:收敛/发散判断(fulu3.m)syms x g1 g2 g3 dg1 dg2 dg3;x1=0.347;x2=1.53;x3=-1.88;g1=(x^3+1)/3;dg1=diff(g1, 'x');g2=1/(3-x^2);dg2=diff(g2, 'x');g3=(3*x-1)^(1/3);dg3=diff(g3, 'x');disp(['1 ', num2str(abs(subs(dg1, 'x', x1))), ' ', ...num2str(abs(subs(dg1, 'x', x2))), ' ', num2str(abs(subs(dg1, 'x', x3)))]) disp(['2 ', num2str(abs(subs(dg2, 'x', x1))), ' ', ...num2str(abs(subs(dg2, 'x', x2))), ' ', num2str(abs(subs(dg2, 'x', x3)))]) disp(['3 ', num2str(abs(subs(dg3, 'x', x1))), ' ', ...num2str(abs(subs(dg3, 'x', x2))), ' ', num2str(abs(subs(dg3, 'x', x3)))])附录4:松弛迭代法(fulu4.m)syms fx gx x dgx;gx=(x^3+1)/3;fx=x^3-3*x+1;dgx=diff(gx, 'x');x=0.5;k=0;ggx=subs(gx, 'x', x);ffx=subs(fx, 'x', x);dgxx=subs(dgx, 'x', x);disp('k x w')while abs(ffx)>0.0001;w=1/(1-dgxx); disp([num2str(k), ' ', num2str(x), ' ', num2str(w)]) x=(1-w)*x+w*ggx;k=k+1;ggx=subs(gx, 'x', x);ffx=subs(fx, 'x', x);dgxx=subs(dgx, 'x', x);enddisp([num2str(k), ' ', num2str(x), ' ', num2str(w)])附录5: Altken 迭代法(fulu5.m)syms x fx gx; gx=(x^3+1)/3;fx=x^3-3*x+1;disp('k x x1 x2') x=0.5;k=0;ffx=subs(fx, 'x', x);while abs(ffx)>0.0001;u=subs(gx, 'x', x);v=subs(gx, 'x', u);disp([num2str(k), ' ', num2str(x), ' ', num2str(u), ' ', num2str(v)]) x=v-(v-u)^2/(v-2*u+x);k=k+1;ffx=subs(fx, 'x', x);enddisp([num2str(k), ' ', num2str(x), ' ', num2str(u), ' ', num2str(v)])附录6:牛顿法(fulu6.m)syms x fx gx;fx=x^3-3*x+1;gx=diff(fx, 'x');x1=-2;x2=0.5;x3=1.4;k=0;disp('k x1 x2 x3')fx1=subs(fx, 'x', x1);fx2=subs(fx, 'x', x2);fx3=subs(fx, 'x', x3);gx1=subs(gx, 'x', x1);gx2=subs(gx, 'x', x2);gx3=subs(gx, 'x', x3);while abs(fx1)>0.0001|abs(fx2)>0.0001|abs(fx3)>0.0001;disp([num2str(k), ' ', num2str(x1), ' ', num2str(x2), ' ', num2str(x3)])x1=x1-fx1/gx1;x2=x2-fx2/gx2;x3=x3-fx3/gx3;k=k+1;fx1=subs(fx, 'x', x1);fx2=subs(fx, 'x', x2);fx3=subs(fx, 'x', x3);gx1=subs(gx, 'x', x1);gx2=subs(gx, 'x', x2);gx3=subs(gx, 'x', x3);enddisp([num2str(k), ' ', num2str(x1), ' ', num2str(x2), ' ', num2str(x3)])。
exp03w代数方程的近似根.ppt

)2
f ( x0 ) f '( x0 )( x x0 ) @P ( x)
令:P( x) 0
x
x0
f ( x0 ) f '( x0 )
( f '( x0 ) 0)
牛顿法迭代公式
牛顿迭代公式
x
x0
f ( x0 ) f '( x0 )
xk 1
xk
f ( xk ) f '( xk )
牛顿法的收敛速度
则称该迭代法在 x* 附近局部收敛。
定理 1:设 x* =(x*),的某个 邻域 内连续,且对 x 都有 |’(x)|q< 1, 则对 x0 ,由迭 代 xk+1 = (xk) 得到的点列都收敛。
定理 2:如果定理 1 的条件成立,则有如下估计
|
xk
x*
|
qk 1q
|
x1
x0
|
|
xk
x*
|
1
1 ),又源自xkak2bk
,所以
|
xk
|
1 2
(bk
ak )
1 2
1 2
(bk1
ak1 )=L
=
1 2k1
(b a)
0(k ) 对分法总是收敛的
但对分法的收敛速度较慢
通常用来试探实根的分布区间, 或给出根的一个较为粗糙的近似。
迭代法
基本思想
构造 f (x) = 0 的一个等价方程:x ( x)
牛顿法是目前求解非线性方程 (组) 的主要方法
牛顿的缺点
对重根收敛速度较慢(线性收敛) 对初值的选取很敏感,要求初值相当接近真解 在实际计算中,可以先用其它方法获得真解的一个粗 糙近似,然后再用牛顿法求解。
牛顿拉普森迭代法原理

牛顿拉普森迭代法原理一、引言牛顿拉普森迭代法(Newton-Raphson iteration method)是一种用于求解方程近似解的数值方法。
它的原理是基于牛顿法和拉普森法的思想,通过不断迭代逼近方程的根。
二、牛顿拉普森迭代法的原理牛顿拉普森迭代法的核心思想是通过不断迭代逼近方程的根。
具体步骤如下:1. 选择一个初始近似解x0;2. 假设f(x)是一个连续可导的函数,求出f(x)在x0处的导数f'(x0);3. 计算方程的切线方程,即通过(x0, f(x0))点并且斜率为f'(x0)的直线;4. 求出切线方程与x轴的交点,作为新的近似解x1;5. 重复步骤2-4,直到达到预设的精度要求。
三、牛顿拉普森迭代法的优点牛顿拉普森迭代法具有以下几个优点:1. 收敛速度快:相比于其他迭代法,牛顿拉普森迭代法通常收敛速度更快,特别是当初始近似解离真实解较近时。
2. 高精度:通过不断迭代逼近,可以达到较高的精度要求。
3. 广泛适用:牛顿拉普森迭代法不仅适用于求解代数方程,也适用于求解一些特殊的函数方程,如三角函数方程等。
四、牛顿拉普森迭代法的应用牛顿拉普森迭代法在实际问题中有着广泛的应用。
以下是几个典型的应用场景:1. 方程求解:牛顿拉普森迭代法可以用于求解非线性方程的近似解。
例如,可以通过迭代逼近求解多项式方程、指数方程等。
2. 优化问题:牛顿拉普森迭代法可以用于求解优化问题的极值点。
例如,在最小二乘法中,可以使用该方法求解最佳拟合曲线的参数。
3. 物理模拟:牛顿拉普森迭代法可以用于模拟物理系统的行为。
例如,可以通过迭代逼近求解自由落体运动中的位置、速度等参数。
五、牛顿拉普森迭代法的注意事项在使用牛顿拉普森迭代法时,需要注意以下几点:1. 初始近似解的选择:初始近似解的选择对迭代结果的精度和收敛速度有着重要影响,需要根据实际问题合理选择。
2. 收敛性判断:在迭代过程中,需要判断迭代结果是否达到了预设的收敛要求,以避免无限迭代或者迭代结果不满足要求的情况。
代数方程的牛顿迭代法

7-18-19-代数方程的牛顿迭代法牛顿迭代法(Newton's method)是一种用于数值求解代数方程的迭代方法,通常用于找到方程的根。
它的基本思想是通过不断逼近方程的根,直到满足某个精度要求。
下面是使用牛顿迭代法求解代数方程的一般步骤:
假设要求解方程 f(x) = 0。
1. 选择一个初始猜测值 x₀,通常选择接近根的值。
2. 计算 f(x₀) 和 f'(x₀),其中 f'(x₀) 是 f(x) 的导数。
3. 计算下一个近似根的值:x₁ = x₀ - f(x₀) / f'(x₀)。
4. 重复步骤 2 和 3,直到满足停止条件,如达到指定精度或经过一定数量的迭代。
数学表示为: xᵢ₊₁ = xᵢ - f(xᵢ) / f'(xᵢ)
这个迭代过程将不断逼近方程的根,直到满足精度要求。
下面是一个示例,假设要解方程f(x) = x² - 4 = 0,其中我们知道根是 x = 2。
我们使用牛顿迭代法来逼近这个根:
1. 初始猜测值 x₀ = 3。
2. 计算 f(x₀) = 3² - 4 = 5 和 f'(x₀) = 2 * 3 = 6。
3. 计算下一个近似根:x₁ = 3 - 5 / 6 = 2.1667。
4. 重复步骤 2 和 3,直到达到所需的精度或迭代次数。
不断迭代,最终我们会得到x ≈ 2,它是方程的根。
请注意,牛顿迭代法的有效性和收敛性取决于初始猜测值的选择,以及方程 f(x) 和它的导数 f'(x) 的性质。
有时可能需要多次尝试不同的初始猜测值来确保收敛到正确的根。
Matlab 求代数方程的近似解

x*
即 x* ( x*)
( x*)
f ( x*) 0
注:若得到的点列发散,则迭代法失效!
迭代法收敛性判断
如果存在 x* 的某个 邻域 =(x*- , x* + ), 使 定义: 得对 x0 开始的迭代 xk+1 = (xk) 都收敛, 则称该迭代法在 x* 附近局部收敛。 设 x* =(x*),的某个邻域 内连续,且对 定理 1: x 都有 |’(x)|q< 1, 则对 x0 ,由迭 代 xk+1 = (xk) 得到的点列都收敛。
f 是符号表达式,也可以是字符串 默认变量由 findsym(f,1) 确定
>> syms x >> f=sin(x)+3*x^2; >> g=diff(f,x) >> g=diff('sin(x)+3*x^2','x')
Matlab 解方程函数
roots(p):多项式的所有零点,p 是多项式系数向量。 fzero(f,x0):求 f=0 在 x0 附近的根,f 可以使用
inline、字符串、或 @,但不能是方程或符号表达式!
linsolve(A,b):解线性方程组。 solve(f,v):求方程关于指定自变量的解,f 可以是用
得到一个迭代序列
k = 0, 1, 2, ... ...
xk k 0
f (x) = 0 f (x) 的零点
等价变换
x = (x)
(x) 的不动点
迭代法的收敛性
收敛性分析
若 ,假设 (x) 连续,则 xk x * xk 收敛,即lim k
数学问题:解决复杂方程的常用方法

数学问题:解决复杂方程的常用方法引言解决复杂方程是数学中重要的任务之一。
无论是在纯粹的理论研究还是实际应用中,我们经常需要找到方程的解。
本文将介绍一些常用的方法来解决复杂方程。
1. 代数ic方法代数ic方法是通过代数运算对方程进行求解的一种方法。
下面列出了三种经典的代数ic方法:1.1 因式分解法因式分解法适用于具有明显因子项的多项式方程。
首先,我们观察方程是否可以进行因式分解,并将其写成多个乘积形式,然后令每个因子等于零,再求解得到方程的根。
例子:考虑如下方程:x^2 - x = 0 我们可以将该方程因式分解为 x(x-1) = 0,并得到两个根x=0和x=1。
1.2 全等变换法全等变换法是通过对等价关系进行变换来简化或转换方程的求解过程。
通过使用合适的等价变换规则,我们可以将复杂的方程转化为简单易解的形式。
例子:考虑如下非线性方程:x^2 + 4x + 4 = 0 通过将方程进行平移,我们得到(x+2)^2 = 0,从而解得唯一根x=-2。
1.3 系数比较法系数比较法是通过观察多项式方程的系数之间的关系来求解方程。
通过比较系数,我们可以获得一些等式或不等式,然后根据这些关系求解方程。
例子:考虑如下二次方程:ax^2 + bx + c = 0 通过比较系数的大小和符号,我们可以推导出判别式D=b^2-4ac的值与方程根的关系。
如果D>0,则有两个实根;如果D=0,则有一个实根;如果D<0,则有两个复数根。
2. 数值近似法当遇到无法用代数方法直接求解的复杂方程时,我们可以利用数值近似法来获取近似解。
以下是几种常见的数值近似方法:2.1 迭代法迭代法是一种逐步逼近真实解的方法。
它基于初始猜测,并使用递归公式反复迭代直到满足预设精度要求为止。
例子:考虑如下非线性方程:f(x)=0 我们可以选择一个初始猜测值x_0,并使用递归公式x_{n+1}=g(x_n)进行迭代,直到达到预设的精度要求。
方程求根的数值方法

方程求根的数值方法数值方法是一种求解方程根的近似方法,它通过一系列计算和迭代来逼近方程的根。
这些方法常用于无法通过代数方法求得解析解的复杂方程,或者是当方程没有明确的解析解时。
在这篇文章中,我们将讨论三种常用的数值方法:二分法、牛顿法和割线法。
二分法是一种基于零点定理的根查找方法。
零点定理指出,如果一个函数在区间[a,b]的两个端点处取得正负值,那么这个函数在这个区间内至少存在一个根。
二分法的基本思想是将区间二分,并判断根是否在分割后的子区间内。
具体步骤如下:1.选择一个初始区间[a,b],使得f(a)和f(b)异号。
2.计算区间中点c=(a+b)/23.如果f(c)等于0或者f(c)的绝对值小于给定的误差限,那么c是近似的根。
4.如果f(c)和f(a)异号,那么根在左半区间[a,c]内;否则,根在右半区间[c,b]内。
5.重复步骤2到4,直到找到满足条件的近似根。
二分法的优点是简单易懂,收敛速度较快;缺点是每次迭代只能减少一半的区间长度。
牛顿法是一种迭代法,通过对函数f(x)的一阶导数进行线性逼近,来求得方程f(x)=0的根。
具体步骤如下:1.选择一个初始近似根x0。
2.计算函数f(x)在x=x0处的导数f'(x0)。
3.计算线性逼近方程的解x1=x0-f(x0)/f'(x0)。
4.如果f(x1)的绝对值小于给定的误差限,那么x1是近似的根。
5.否则,令x0=x1,重复步骤2到4,直到找到满足条件的近似根。
牛顿法的优点是收敛速度快,通常是二次收敛;缺点是对于一些特殊的函数,可能会出现发散或者陷入局部最优解的情况。
割线法是对牛顿法的改进,它通过将区间的两个端点连接起来,构建一条割线来逼近方程的根。
具体步骤如下:1.选择两个初始近似根x0和x1,使得f(x0)和f(x1)异号。
2.计算割线的斜率k=(f(x1)-f(x0))/(x1-x0)。
3.计算线性逼近方程的解x2=x1-f(x1)/k。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主要内容
本实验讨论的数值算法
对分法 不动点迭代法
不动ห้องสมุดไป่ตู้迭代一般形式 松弛加速迭代法
牛顿迭代法
8
不动点迭代法
基本思想 构造 f (x) = 0 的一个等价方程:x 从某个近似根 x0 出发,计算
( x)
xk 1 ( xk )
得到一个迭代序列
k = 0, 1, 2, ... ...
11
k
迭代法收敛性判断
q 越小,迭代收敛越快
’(x*) 越小,迭代收敛越快
以上所给出的收敛性定理中的条件的验证都比较 困难,在实际应用中,我们常用下面不严格的判别 方法:
当有根区间 [a, b] 较小,且对某一 x0[a, b] ,
|’(x0)| 明显小于 1 时,则我们就认为迭代收敛 例:用不动点迭代法求 x3 - 3x + 1 = 0 在 [0, 1] 中的解。
例:用对分法求 x3 - 3x + 1 = 0 在 [0, 1] 中的解。(fuluA.m)
6
对分法收敛性
收敛性分析
根据上面的算法,我们可以得到一个每次缩小一半的 区间序列 {[ak , bk ]} ,在 (ak , bk ) 中含有方程的根。 设方程的根为 x* (ak , bk ) ,又 xk
基本思想
将有根区间进行对分,判断出解在某个分段内,然后 再对该段对分,依次类推,直到满足给定的精度为止
数学原理:介值定理
设 f(x) 在 [a, b] 上连续,且 f(a) f(b)<0,则由介值定 理可得,在 (a, b) 内至少存在一点 使得 f()=0
适用范围
求有根区间内的 单重实根 或 奇重实根
加权系数 wk 的确定:令 ’(x)=0 得
w 1 1 '( x )
wk
1 1 '( xk )
13
松弛迭代法
松弛法迭代公式:
wk 1 , 1 '( xk )
'( xk ) 1
xk 1 (1 wk ) xk wk ( xk )
松弛法具有较好的加速效果 甚至有些不收敛的迭代,加速后也能收敛
缺点:每次迭代需计算导数 例:用松弛迭代法求 x3 - 3x + 1 = 0 在 [0, 1] 中的解。
(fuluD.m)
14
主要内容
本实验讨论的数值算法
对分法 不动点迭代法
不动点迭代一般形式 松弛迭代法
数学实验
实验三
求代数方程的近似根(解)
1
代数方程近似求解
问题背景和实验目的
解方程(代数方程)是最常见的数学问题之一,也是 众多应用领域中不可避免的问题之一 目前还没有一般的解析方法来求解非线性方程,但如 果在任意给定的精度下,能够解出方程的近似解,则可 以认为求解问题已基本解决,至少可以满足实际需要 本实验主要介绍一些有效的求解方程的数值方法:对 分法,不动点迭代法 和 牛顿法。同时要求大家学会如何 利用Matlab 来求方程的近似解
x*
即 x* ( x*)
( x*)
f ( x*) 0
注:若得到的点列发散,则迭代法失效!
10
迭代法收敛性判断
如果存在 x* 的某个 邻域 =(x*- , x* + ), 使 定义: 得对 x0 开始的迭代 xk+1 = (xk) 都收敛, 则称该迭代法在 x* 附近局部收敛。
5
对分法
设 f(x) 在区间 [a,b] 内连续,且 f(a)f(b)<0。 对于给定的精度要求 ,若有 |f(z)|< ,则 z 就是我 们所需要的 f(x)=0 在区间 [a,b] 内的 近似根
具体步骤
(1) 令 x = (a+b)/2, 计算 f(x) (2) 若 |f(x)|< ,则停止计算,输出近似解 x (3) 若 f(a) · f(x) < 0,则令 b = x; 否则令 a = x (4) 返回第一步
xk k 0
f (x) = 0 f (x) 的零点
等价变换
x = (x)
(x) 的不动点
9
迭代法的收敛性
收敛性分析
若
xk x *,假设 (x) 连续,则 xk 收敛,即 lim k
lim xk 1 lim ( xk ) lim xk
k k k
(fuluB.m)
12
迭代法的加速
设迭代 xk+1 = (xk) ,第 k 步和第 k+1 步得到的近似 根分别为 xk 和 (xk) ,令
xk 1 (1 wk ) xk wk ( xk )
其中 wk 称为加权系数或权重。得新迭代 xk+1 = (xk)
( x ) (1 w) x w ( x )
2
相关概念
线性方程 与 非线性方程
f ( x) 0
如果 f(x) 是一次多项式,称上面的方程为线性方 程;否则称之为非线性方程
本实验主要讨论非线性方程的数值求解
3
主要内容
本实验讨论的数值算法
对分法 不动点迭代法
不动点迭代一般形式 松弛加速迭代法
牛顿迭代法
4
对分法
定理 : 已知方程 x =(x),且 (1) 对 x[a, b],有 (x)[a, b]; (2) 对 x[a, b],有|’(x)|q< 1;
则对 x0[a, b] ,由迭代 xk+1 = (xk) 得到的点列都 收敛,且
q | xk x* | | x1 x0 | 1 q
1 1 1 | xk x* | ( bk ak ) ( bk 1 ak 1 )= 2 2 2
ak bk ,所以 2
=
1
2
k 1
( b a)
0(k
)
对分法总是收敛的
对分法的收敛速度通常较慢 对分法通常用来试探实根的分布区间,或给出根的一 个较为粗糙的近似
7
牛顿迭代法
15
牛顿迭代法
基本思想:
用线性方程来近似非线性方程,即采用线性化方法 设非线性方程 f (x)=0 , f (x) 在 x0 处的 Taylor 展开为 f ''( ) 2
f ( x ) f ( x0 ) f '( x0 )( x x0 ) 2! ( x x0 )