数值分析求解非线性方程根的二分法、简单迭代法和牛顿迭代法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告一:实验题目
一、 实验目的
掌握求解非线性方程根的二分法、简单迭代法和牛顿迭代法,并通过数值实验比较两种方法的收敛速度。
二、 实验内容
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) = 0
r = 0:0.01:1;
y = r + exp(r) - 2
plot(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>0
return ;
end
for k=1:100
c=(a+b)/2;
yc= c + exp(c) - 2;
if abs(yc)<=delta
a=c;
b=c;
elseif yb*yc>0
b=c;
yb=yc;
else
a=c;
ya=yc;
end
if abs(b-a) num=k; %num为迭代次数 break; end end c=(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:1000 y0=func(p0); dy0=diff(func([p0 p0+1e-8]))/1e-8; p1=p0-y0/dy0; err=abs(p1-p0); p0=p1; if(err num=k;%num为迭代次数 break; end end c=p0; 第2题: 由题意得到算式: 计算调用函数:[c,num]=newton(@func2,0.02,1e-8) 程序:先用画图法估计出大概零点位置在0.02附近。画图程序: function Test2() % f(x) 示意图, f(x) = 200000*(1+x).^10-2160*12*10; f(x) = 0 r = linspace(0,0.06, 100); y = 200000*(1+r).^10-2160*12*10; plot(r, y); grid on 调用函数: function[y]=func2(r) y=200000*(1+r).^10-2160*12*10; end 牛顿迭代法算法程序: function [c,num] =newton(func,p0,delta) %Input -func是运算公式 % -p0是零点值 % -delta是允许误差 %Output -c牛顿迭代法最后计算所得零点值 % -num是迭代次数 num=-1; for k=1:1000 y0=func(p0); dy0=diff(func([p0 p0+1e-8]))/1e-8; p1=p0-y0/dy0; err=abs(p1-p0); p0=p1; if(err num=k; break; end end c=p0; 第3题:求最小正数解 计算调用函数:[c,num]=newton(@func3, 1 ,1e-8) 程序:先用画图法估计出最小正解位置在1到2之间画图程序: function Test3() % f(x) 示意图, f(x) = cot(x)-(x.^2-1)./(2.*x); f(x) = 0 ezplot('cot(x)-(x.^2-1)./(2.*x)',[-6,6]); grid on 调用函数: function[y]=func3(x) y=cot(x)-(x.^2-1)./(2.*x); end 牛顿迭代法算法程序: function [c,num] =newton(func,p0,delta) %Input -func是运算公式 % -p0是零点值 % -delta是允许误差 %Output -c牛顿迭代法最后计算所得零点值 % -num是迭代次数 num=-1; for k=1:1000 y0=func(p0); dy0=diff(func([p0 p0+1e-8]))/1e-8; p1=p0-y0/dy0; err=abs(p1-p0); p0=p1; if(err num=k; break;