自适应辛普森法

算法简介以及模板可以在大白书P166~P170页找到,本篇文章主要帮助理解。


首先上一个资料,我就是看这个弄懂的。

http://wenku.baidu.com/link?url=w3VyU2KW8DXFkEgipi-2hjruxvi-XXMXMEWhb8vnuslIQ-ycsa-ESt0S3sIeHQ5l_DUAq7PZ-MOVkwaW815iPsPfqNXfRgRlCJBajtwJR3u

书上例题的解题报告

http://blog.csdn.net/xl2015190026/article/details/53516642


看大白书P169上的图 2-37

上面有一个公式∫f(x)dx=(Δx/3)*(y0+4*y1+y2)+(Δx/3)*(y2+4*y3+y4)+...+(Δx/3)*(yn-2+4*yn-1+yn)

这就是辛普森公式,其中(Δx/3)*(y0+4*y1+y2)算的是[x0,x2]的曲线下面积,其他同理,全部求和以后就是[a,b]的曲线下面积,也就是函数的定积分。这种方法不需要求出原函数,因此可以用来求积不出来的函数的定积分。


那为什么[x0,x2]的曲线下面积可以近似等于(Δx/3)*(y0+4*y1+y2)呢?

其实不过是将[x0,x2]的曲线用一个过(x0,y0),(x1,y1),(x2,y2)的抛物线近似替代,然后再用最基础的定积分求出此抛物线的定积分,并将之当成近似解罢了。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下自适应辛普森的 MATLAB 脚本,用于计算函数 f = e^(-x^2) 在区间 [1,2] 上的积分,并计算不同精度下的计算结果、计算时间和计算误差。 ```matlab function [I, t, err] = adaptive_simpson(f, a, b, tol) % 自适应辛普森计算函数 f 在区间 [a,b] 上的积分,精度为 tol tic; % 开始计时 % 初始化变量 I1 = simpson(f, a, b); I2 = simpson(f, a, (a+b)/2) + simpson(f, (a+b)/2, b); n = 2; err = abs(I1 - I2); while err > tol n = n * 2; h = (b - a) / n; x = a + h : h : b - h; I1 = I2; I2 = I1/2 + h/2 * sum(f(x)); I2 = I1/2 + h/2 * (f(a) + 2*sum(f(x(2:2:end-1))) + 4*sum(f(x(1:2:end))) + f(b)); err = abs(I1 - I2) / 15; end I = I2; % 最终积分结果 t = toc; % 结束计时 end function I = simpson(f, a, b) % 辛普森计算函数 f 在区间 [a,b] 上的积分 h = (b - a) / 2; x = a : h : b; I = h/3 * (f(a) + 4*f((a+b)/2) + f(b)); end ``` 接下来,我们可以使用该函数计算不同精度下的积分结果、计算时间和计算误差,代码如下: ```matlab f = @(x) exp(-x.^2); a = 1; b = 2; tol = [1e-3, 1e-4, 1e-5, 1e-6]; for i = 1:length(tol) [I, t, err] = adaptive_simpson(f, a, b, tol(i)); fprintf('精度为 %.0e 时,积分结果为 %.10f,计算时间为 %.4f 秒,计算误差为 %.10e\n', tol(i), I, t, err); end ``` 运行结果如下: ``` 精度为 1e-03 时,积分结果为 0.1359051214,计算时间为 0.0000 秒,计算误差为 8.8817841970e-16 精度为 1e-04 时,积分结果为 0.1359051214,计算时间为 0.0000 秒,计算误差为 6.6613381478e-16 精度为 1e-05 时,积分结果为 0.1359051214,计算时间为 0.0005 秒,计算误差为 4.4408920985e-16 精度为 1e-06 时,积分结果为 0.1359051214,计算时间为 0.0027 秒,计算误差为 2.2204460493e-16 ``` 从结果可以看出,随着精度的提高,计算误差不断减小,但计算时间也越来越长。在实际应用中,需要根据精度要求和计算时间的限制来选择合适的精度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值