《实验5 非线性方程求根及其MATLAB实现》由会员分享,可在线阅读,更多相关《实验5 非线性方程求根及其MATLAB实现(18页珍藏版)》请在金锄头文库上搜索。
1、.,分类数学实验之,方程求近似实根问题,.,考虑方程 f (x) = 0 求根分为两步: ()先确定某个根的近似值; ()再将初始近似值加工成满足精度要求的结果。,.两分法迭代(理论基础:零点定理),设f (x)Ca, b,f (a)f (b) 0。区间(a, b)就是方程 根的存在区间,再用下面的方法改善根的精度。,方程求根数值算法的基本思想,取a, b的中点x0=(a+b)/2,若f (x0)=0,则x0即是根;,否则,f (a)f (x0) 0,令a1 = a,b1 = x0(取a, b的左半部);,f (x0)f (b) 0,令a1 = x0,b1 = b(取a, b的右半部)。,.,
2、a,b,f(a) f(a+b)/2),f(b),f(x),x,y,.,将上述做法重复n次,得到n个小区间,且 bn-an = (b-a)/2n , a, b,.两分法迭代,当n足够大时即可达到满意的精度。,.,例1 求方程 x 3 + 1.1x 2 + 0.9x 1.4 = 0 的一个实根。使误差不超过10-3,.两分法迭代,解:()首先观测图形,作f(x)的图像:,ezplot(x3 + 1.1*x2 + 0.9*x- 1.4),x=-1:0.01:1; y=x.3+1.1.*x.2+0.9.*x-1.4; %函数表达式 figure; plot(x,y,LineWidth,2) %画出图形
3、 hold on; y1=zeros(size(x); %y10 plot(x,y1,r,LineWidth,4);,.,bisect.m 关于此程序的解释见“方程求根的代码解释”一文,()按两分法的思想,进行迭代求根。,为了使得程序具有通用性,将方程的表达式写成 一个函数:,function y=myequation(x); y=x.3+1.1.*x.2+0.9.*x-1.4;,这样修改y的表达式,即可求出其他方程的实根。,(3)运行二分法的程序:,.,两分法迭代的加速:,a,b,f(a) f(a+b)/2),f(b),f(x),x,y,c,以f(a),f(b)的连线在x轴的交点作为新的出
4、发点。但此方法不一定能真正加速。 原理请详见教材p191。,程序:fastbisect.m,.,.不动点迭代,称满足方程 f(x)=x的点x为函数f的不动点. 求函数f的不动点。可以从一个初始点x0出发,以格式 xn+1=f(xn)进行迭代; x1 =f(x0),x2 =f(x1),xk+1 =f(xk), 得到x0,x1,x2,xn,. 如果该数列是收敛的,则,.,将方程 f (x) = 0 化为等价方程 x =(x) (2) 取某个定数x0,做数列xn,其中, x1 =(x0),x2 =(x1),xk+1 =(xk), (3) 设(x)连续,且,a就是方程f (x) = 0的根。,a就是函
5、数的一个不动点,即 a =(a),等价于 f (a) = 0,.,y=f(x),x0,f(x0),x1= f(x0),f(x1),x2= f(x1),y=x,x,收敛的迭代:,.,发散的迭代:,x0,.,.不动点迭代,解:可将方程写成下三种形式:,x = 14 x 2 ,function f=iterfun(x) % f=14-x.2; % f=14./(x+1); f=x-(x.2+x-14)./(2*x+1);,(1)将三种迭代形式写成函数存起来:,(2)演示程序 使用的程序:iter.m,.,.不动点迭代,收敛性 蛛网图,一般地,若函数(x)在含不动点的某邻域内一阶导 数连续,且,则存在
6、一个邻域:|-x|,对任何的x0, 其迭代序列必收敛。,高级例子iterexample2.m 请同学们自己消化,.,3.牛顿迭代法,记a, b为方程 f (x) = 0的根的存在区间, f (a)与f (b)异号,且对于每个xa, b, f (x)0,f (x)保持符号不变。,取x0a, b,对f (x)用微分中值定理,近似地,有 f (x)p (x) = f (x0) + f (x0)(x - x0),令p (x) = 0,得到f (x) = 0的近似根,记为x1=,为改善根的精确程度,反复实施这一过程,得到牛顿迭代公式:,.,xk+1就是从线性方程 f (xk) + f (xk)(x xk
7、) = 0 (1) 中解得的根x.,以点(xk , f (xk)为切点,曲线y = f (x)的切线 y = f (xk) + f (xk)(x xk) (2),方程(2)与 y=0相联立,得到与x轴的交点,该交点 即xk+1,.,x*,x0,x0,f(x0),x1,x1,f(x1),x2,.,例3 求方程,在 x0 = 2附近的近似实根。 准确到小数点后4位数字,解:,迭代公式为:,计算步骤如下:,(1)选x0=2,按照迭代公式计算x1; (2)若|x1-x0|0.00001 x0=x1; fun,dfun=fun0(x0); x1=x0-fun/dfun; i=i+1; end,disp(the solution is x1=) x1 disp(the iter time is ) i,newtuniter.m,