微积分近似计算公式:中点、梯形、辛普森

微积分近似计算公式,可以帮助我们在不了解积分原函数的情况下,即无法采用牛顿-莱布尼茨公式求解微积分,可以采用一些近似计算公式来获得近似结果:

中点公式:

function res = mid(f,a,b)
    res = (b - a) * feval(f, 0.5 * (a + b));
end

梯形公式:

function res = trapz(f,a,b)
    res = 0.5 * (b - a) * (feval(f,a) + feval(f,b));
end

辛普森公式:

function res = simpson(f,a,b)
    res = 1 / 6 * (b - a) * (feval(f,a) + 4 * feval(f,0.5 * (a + b)) + feval(f,b));
end

在以上公式的基础上,采用定步长分段来近似计算微积分结果:

复合中点公式:

function res = fmid(f,a,b,n)
    h = (b - a) / n;
    x = linspace(a + h / 2,b - h / 2,n);
    y = feval(f,x);
    res = h * sum(y);
end

复合梯形公式:

function res = ftrapz(f,a,b,n)
    h = (b - a) / n;
    x = linspace(a,b,n + 1);
    y = feval(f,x);
    res = 0.5 * h * (y(1) + 2 * sum(y(2:n)) + y(n + 1));
end

复合辛普森公式:

function res = fsimpson(f,a,b,n)
    h = (b - a) / n;
    x = linspace(a,b,2 * n + 1);
    y = feval(f,x);
    res = (h / 6) * (y(1) + 2 * sum(y(3:2:2 * n - 1)) + 4 * sum(y(2:2:2 * n)) + y(2 * n + 1));
end

我们采用一个简单测试函数,来验证一下近似公式的精度:

function test
    a = 2;
    b = 20;
    f = @(x) x.^(-1);
    n = 50;
    true_val = log(b) - log(a);
    mid_val = mid(f,a,b);
    trapz_val = trapz(f,a,b);
    simpson_val = simpson(f,a,b);
    fmid_val = fmid(f,a,b,n);
    ftrapz_val = ftrapz(f,a,b,n);
    fsimpson_val = fsimpson(f,a,b,n);
end

精度如下:

true2.302585092994046
mid1.636363636363637
trapz4.950000000000000
simpson2.740909090909091
fmid2.301256120284895
ftrapz2.305249476494972
fsimpson2.302587239021587

复合辛普森公式的近似精度还是比较高的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值