算法,计算方法报告.doc"/>
matlab杜利特尔算法,计算方法报告.doc
计算方法报告.doc
目 录
实验一 数值稳定性实验1
实验二 非线性方程求根的数值解法3
实验三 线性方程组的数值解法(一)5
实验四 线性方程组的数值解法(二)8
实验五 分段插值和拉格朗日插值实验11
实验名称: 实验一 数值稳定性实验实验内容:设
(1)从尽可能精确的近似值出发,利用递推式
计算的近似值。
(2)从较粗糙的估计值出发,利用递推式
计算的近似值。
(3)分析所得结果的可靠性以及出现这种现象的原因。实验过程:
初步计算,由已知递推式,可计算得的近似值。
如下:
s=log(6)-log(5);
n=0;
fprintf('I(%g)=%f\n',n,s);
for i=1:20
s=-5.*s+1./i;
n=i;
fprintf('I(%g)=%f\n',n,s);
end
执行结果:
由积分估值得
.
取,得,我们粗略取,再由已知递推式,可计算得的近似值。如下:
s=(1/126+1/106)./2;
n=20;
fprintf('I(%g)=%f\n',n,s);
for i=20:-1:1
s=-s./5+1./(5*i);
n=i-1;
fprintf('I(%g)=%f\n',n,s);
end
执行结果:
实验结果分析:
对照上面的计算结果,可以看出,方案(2)从较粗糙的估计值出发,就得到相当精确的值(误差不超过);而方案(1)得到的估计值与(2)差别很大。实际上,经(1)计算的,即计算的结果不可靠。
记,则,即比扩大了倍。当用方案(1)计算时,尽管初值相当精确,由于误差传播是逐步扩大的,因而计算的结果不可靠;反之,用方案(2)计算时,尽管较大,但是由于误差逐步缩小,故可以用近似。而,计算的就相当精确了。
实验内容: 求方程在区间上的近似值,要求误差不超过。
(1)利用二分法;
(2)取初值,利用简单迭代法;
(3)取初值,利用牛顿迭代法。实验过程:
二分法求解
Matlab代码如下:
function [f]=fac1(x)
f=exp(x)+10.*x-2;
输入程序:
%初始化数据;
a=0;b=1.5;t=Inf;k=0;
s1=fac1(a);s2=fac1(b);
if s1.*s2>0 %检查端点函数值是否同号;
disp('区间[a,b]内无零点或者无法确定\n');
else while abs(t-(a+b)/2.)>1e-6
t=(a+b)/2.;
if fac1(t)==0
break;
elseif fac1(t).*fac1(a)<0
b=t;
else a=t;
end
k=k+1;
fprintf('x(%g)=%f\n',k,t);
end
end
执行结果(截屏):
(2)简单迭代法求解
Matlab代码如下:
function [f]=fac2(x)
f=(2-exp(x))./10;
输入程序:
%初始化数据;
a=1.3;
k=0;
while abs(a-fac2(a))>1e-6
t=fac2(a);
a=t;t=a;
k=k+1;
fprintf('x(%g)=%f\n',k,t);
end
执行结果(截屏):
(3)Newton迭代法
如下:
function [f]=fac1(x)
f=exp(x)+10.*x-2;
function [f]=dfac1(x)
f=exp(x)+10;
输入程序:
%初始化数据;
a=1.3;
t=Inf;
k=0;
fprintf('x(%g)=%f\n',k,a);
while abs(fac1(a)/dfac1(a))>1e-6
t=a-fac1(a)/dfac1(a);
a=t;
k=k+1;
fprintf('x(%g)=%f\n',k,a);
end
执行结果(截屏):
实验结果分析:
分析以上结果,可以得到,方程的根在附近。其中,用Newton迭代法只迭代了3次,就达到误差不超过的近似零点值,收敛速度明显优于另外两种方法。
针对此问题的简单迭代法求根的方法收敛慢的情况,我们可以采用Aitken加速方法或Steffensen迭代法,对原方法加以改进,使其加速收敛,此处不予给出。
实验内容:求解线性方程组
并比较计算结果精度(方程组精确解为)
(1
更多推荐
matlab杜利特尔算法,计算方法报告.doc
发布评论