数值分析求解非线性方程根的二分法、简单迭代法和牛顿迭代法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告一:实验题目
一、 实验目的
掌握求解非线性方程根的二分法、简单迭代法和牛顿迭代法,并通过数值实验比较两种方法的收敛速度。 二、 实验内容
1、编写二分法、牛顿迭代法程序,并使用这两个程序计算02)(=-+=x
e x x
f 在[0, 1]区间的解,要求误差小于 4
10- ,比较两种方法收敛速度。
2、在利率问题中,若贷款额为20万元,月还款额为2160元,还期为10年,则年利率为多少?请使用牛顿迭代法求解。
3、由中子迁移理论,燃料棒的临界长度为下面方程的根,用牛顿迭
代法求这个方程的最小正根。
4、用牛顿法求方程
的根,精确至8位有效数字。比较
牛顿迭代法算单根和重根的收敛速度,并用改进的牛顿迭代法计算重根。
三、 实验程序
第1题:
02)(=-+=x
e x x
f 区间[0,1] 函数画图可得函数零点约为0.5。
画图函数:
f un cti on Te st1()
% f(x ) 示意图, f(x) = x + exp (x) - 2; f(x) = 0 r = 0:0.01:1; y = r + e xp(r) - 2 p lot(r, y); gri d on
二分法程序:
计算调用函数:[c,n um ]=bisec t(0,1,1e-4)
fu ncti on [c,num ]=bisect (a,b,de lt a) %Inp ut –a,b 是取值区间范围 % -de lta 是允许误差
%O utput -c牛顿迭代法最后计算所得零点值 % -num 是迭代次数 ya = a + exp(a) - 2; yb = b + e xp(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)<delta
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([p0p0+1e-8]))/1e-8;
p1=p0-y0/dy0;
err=abs(p1-p0);
p0=p1;
if(err<delta)
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) = 0r =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;
fork=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<delta)
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牛顿迭代法最后计算所得零点值