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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值