非线性方程实验举例及程序
实验三:非线性方程求根 实验目的与要求:理解并掌握二分法、不动点迭代、牛顿切线法及弦截法解非线性方程求根 的原理,掌握相应的算法原理,通过计算机解决实验问题 例1用“二分法”求方程x = 0.5sinx + l的近似根(误差小于KT ) o 问题分析: 容易知道该方程在[1,2]内有且仅有一个实数根,现运用“二分法”来求解。 matlab运行及结果显示: f=inline( x・0.5*sin(x)・T); a=l; b=2; dlt=1.0e-5; k=l; while abs(b-a)>dlt c=(a+b)/2; iff(c)==0 break; elseif f(c)*f(b)dlt c=(a+b)/2; iff(c)==O break; elseif f(c)*f(b)vO a=c; else b=c; end fprintf(,k=%d,x=%.4f\n\k,c); k=k+l; end k=l,x=1.0000 k=2,x=1.5000 k=3,x=1.2500 k=4,x=l.3750 k=5,x=l.4375 k=6,x=l.4063 k=7,x=l.4219 k=8,x=1.4141 k=9,x=1.4180 k=10,x=1.4160 k=ll,x=1.4150 k=12,x=1.4146 k=13,x=l.4143 k=14,x=1.4142 k=15,x=1.4142 例2用“不动点迭代法”求方程x-e- = 0的近似根(误差小于IO“)。 问题分析: 容易知道该方程在[0,1]内有且仅有一个实数根,现运用“不动点迭代法”来求解。 初始值气=0.5,相对误差容限£ = 10一8,程序如下: 运行及结果显示: eps=10A(-8);dx=l;x0=0.5;k=0; while(dx>eps) k=k+l; x=exp(-x0); dx=abs(x-xO)/(l+abs(x)); xO=x; end 29 0.5671 练习:用“不动点迭代法”求方程x = 0.5sinx + l的近似根(误差小于IO“)。 问题分析: 容易知道该方程在[1,2]内有且仅有一个实数根,现运用“不动点迭代法“来求解。 运行及结果显示: eps=10A(-5);dx=l;x0=0.5;k=0; while(dx>eps) k=k+l; x=0.5*sin(x0)+l; dx=abs(x-x0)/( l+abs(x)); x0=x; end 1.4987 f=inline(,0.5*sm(x)+l,); df=inline(,0.5*cos(x)*); a=l; b=2; dlt=1.0e-5; [x,y]=fminbnd(-abs(df(x)),l?2); i=-y; xO=x; xl=f(xO); k=l; while abs(xl-xO)>(l-l)*dlt k=k+l; x2=f(xl); xO=xl; xl=x2; fprintf(*k=%d x=%.5f\n\k,xl); end 例3用“切线法”求方程x = 0.5sinx + l的近似根(误差小于KT )。 问题分析: 容易知道该方程在内有且仅有一个实数根,现运用“切线法”来求解。 运行及结果显示: f=inline( x・0.5*sin(x)・T); df=inline(,l-0.5*cos(x)*); d2f=inline( 0.5*sin(x) ); a=l; b=2; dlt=1.0e-5; iff(a)*d2f(a)>0 x0=a; else x0=b; end m=min(abs(df(a)),abs(df(b))); k=0; while abs(f(xO))>m*dlt k=k+l; xl=x0-f(x0)/df(x0); x0=xl; fprintf(*k=%d x=%.5f\n ,k,x0); end k=l x=l.54858 k=2 x=l.49933 k=3 x=1.49870 任务: L求方程f(x) = ” —X —1 = 0在X = 1.5附近的根(精度=!乂10一8),取吒=1,叼=2 2.求方程x = e— 在x = 0.5附近的根(精度= ^xl0 8),取X。=1,叼=2