二分法与牛顿迭代法解方程
- 格式:ppt
- 大小:210.50 KB
- 文档页数:13


计算方法上机实习报告[题目及目的要求]1.用二分法求方程0163=--x x 在[0,5]上根的近似值。
用牛顿迭代法求0133=--x x 在2=x 附近的实根。
2.完成史蒂芬森迭代加速法和割线法的子程序,并利用方程010423=--x x 对比对分法与一般迭代法。
[方法原理说明]1.二分法和牛顿迭代法:二分法是逐次把有根区间分半,舍弃无根区间而保留有根区间的一种逼近根的方法。
在这个过程中有根区间的长度以2的幂次方减少,当有根区间的长度小于给定的精度时,其中点就作为根的近似值。
牛顿迭代法的迭代格式为: 初值0x ()()k k k k x f x f x x '1-=+ (k=0,1,2....)显然,牛顿迭代格式能够迭代下去必须要求()k x f 的导数不能为0.当某个()0'=k x f 或很小时,迭代中断;当()k x f 满足一定条件时,牛顿迭代具有平方收敛速度。
该方法对初值0x 要求较高,若选取不当,则可能发散,若选取的好,则收敛很快。
2.史蒂芬森迭代加速法和割线法迭代法就是通过一个迭代格式进行反复迭代以产生一个序列。
若这个序列收敛于方程的根,就称这个迭代格式收敛。
史蒂芬森迭代加速法的迭代格式为()k k k k k k k x y z x y x x +---=+221()k k x f y = ,()k k y f z = (k=0,1,2....)割线法与牛顿迭代法一样,即在根的某个邻域内,()k x f 有直至二阶的连续导数,且()0'≠k x f ,则在邻域内选取初值10,x x ,迭代均收敛。
割线法的迭代格式为初值10,x x()()()()111--+---=k k k k k k k x x x f x f x f x x (k=2,3....)[计算步骤]1.二分法:1)给定a,b 及精度要求ep ; 2)计算x=(a+b )/2 及()k x f ;3)若b-a<ep ,则返回主程序,x 作为近似根,否则转4; 4)若()()0<a f x f ,则b x ⇒,否则a x ⇒; 5)转2。
实验报告一:实验题目一、 实验目的掌握求解非线性方程根的二分法、简单迭代法和牛顿迭代法,并通过数值实验比较两种方法的收敛速度。
二、 实验内容1、编写二分法、并使用这两个程序计算02)(=-+=x e x x f 在[0, 1]区间的解,要求误差小于 410- ,比较两种方法收敛速度。
2、在利率问题中,若贷款额为20万元,月还款额为2160元,还期为10年,则年利率为多少?请使用牛顿迭代法求解。
3、由中子迁移理论,燃料棒的临界长度为下面方程的根,用牛顿迭代法求这个方程的最小正根。
4、用牛顿法求方程的根,精确至8位有效数字。
比较牛顿迭代法算单根和重根的收敛速度,并用改进的牛顿迭代法计算重根。
第1题:02)(=-+=x e x x f 区间[0,1] 函数画图可得函数零点约为0.5。
画图函数:function Test1()% f(x) 示意图, f(x) = x + exp(x) - 2; f(x) = 0r = 0:0.01:1;y = r + exp(r) - 2plot(r, y);grid on 二分法程序:计算调用函数:[c,num]=bisect(0,1,1e-4)function [c,num]=bisect(a,b,delta)%Input –a,b 是取值区间范围% -delta 是允许误差%Output -c 牛顿迭代法最后计算所得零点值% -num 是迭代次数ya = a + exp(a) - 2;yb = b + exp(b) - 2;if ya * yb>0return;endfor k=1:100c=(a+b)/2;yc= c + exp(c) - 2;if abs(yc)<=deltaa=c;b=c;elseif yb*yc>0b=c;yb=yc;elsea=c;ya=yc;endif abs(b-a)<deltanum=k; %num为迭代次数break;endendc=(a+b)/2;err=abs(b-a);yc = c + exp(c) - 2;牛顿迭代法程序:计算调用函数:[c,num]=newton(@func1,0.5,1e-4) 调用函数:function [y] = func1(x)y = x + exp(x) - 2;end迭代算法:function[c,num]=newton(func,p0,delta)%Input -func是运算公式% -p0是零点值% -delta是允许误差%Output -c牛顿迭代法最后计算所得零点值% -num是迭代次数num=-1;for k=1:1000y0=func(p0);dy0=diff(func([p0 p0+1e-8]))/1e-8;p1=p0-y0/dy0;err=abs(p1-p0);p0=p1;if(err<delta)num=k;%num为迭代次数break;endendc=p0;第2题:由题意得到算式:计算调用函数:[c,num]=newton(@func2,0.02,1e-8)程序:先用画图法估计出大概零点位置在0.02附近。