php画梯形,科学网—梯形法误差 - 张江敏的博文

用梯形法计算函数有y = sqrt(x) 在区间(1,2)上的积分。

clear all; close all; clc;

Nlist = 2.^(2:14);

slist = zeros(1, length(Nlist));

elist = zeros(1, length(Nlist));

for s = 1 : length(Nlist)

N = Nlist(s);

h = 1 /N ;

f = sqrt((N: 2*N)./N);

slist(s) = h * (0.5*(f(1) + f(end)) + sum(f(2: end-1)));

elist(s) = abs(slist(s) - 2/3*(2^1.5-1));

end

h0 = figure;

plot(log2(Nlist), log2(elist),'-*')

可以看到误差随步长h的平方减小。

2ee2a79210cd0a7e2045a638c256919a.png

但是如果积分区间是(0,1)呢?

Nlist = 2.^(2:14);

slist = zeros(1, length(Nlist));

elist = zeros(1, length(Nlist));

for s = 1 : length(Nlist)

N = Nlist(s);

h = 1 /N ;

f = sqrt((0: N)./N);

slist(s) = h * (0.5*(f(1) + f(end)) + sum(f(2: end-1)));

elist(s) = abs(slist(s) - 2/3);

end

h1 = figure;

plot(log2(Nlist), log2(elist),'-*')

eb6929bf680b0bd293cab9c464ec0cd8.png

我们看到误差随步长h的3/2次方减小。这个相对缓慢的幂次来自被积函数在区间端点x=0处的奇异性。

实际工作中遇到这种奇异性时,我们可以考虑解析地扣除之。比如考虑函数y= sinx/sqrt(x)在区间(0,1)上的积分。这个函数在x=0处有一个形如sqrt(x)的奇异部分。我们可以扣除之,将函数y分解成y1=sqrt(x)和y2=(sinx-x)/sqrt(x)之和。对y1我们可以解析地做,对y2我们可以用梯形法。这样可以重新获得梯形法的平方收敛性。

Nlist = 2.^(2:14);

slist2 = zeros(1, length(Nlist));

for s = 1 : length(Nlist)

N = Nlist(s);

h = 1 /N ;

x = (1: N)./N ;

f =  [0,(sin (x) - x)./ sqrt(x)];

slist2(s) = h * (0.5*(f(1) + f(end)) + sum(f(2: end-1))) + 2/3 ;

end

elist2 = abs(slist2(1:end-1) - slist2(end));

h2 = figure;

plot(log2(Nlist(1: end-1)), log2(elist2),'-*')

f988609494325935031330c2049ee996.png

转载本文请联系原作者获取授权,同时请注明本文来自张江敏科学网博客。

链接地址:http://blog.sciencenet.cn/blog-100379-1206773.html

上一篇:pi by monte carlo

下一篇:对称或者厄米矩阵的对角化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值