自适应Simpson积分算法MATLAB及C实现代码[共3页]

上传人:哈**** 文档编号:138071712 上传时间:2020-07-13 格式:DOCX 页数:3 大小:14.95KB
返回 下载 相关 举报
自适应Simpson积分算法MATLAB及C实现代码[共3页]_第1页
第1页 / 共3页
自适应Simpson积分算法MATLAB及C实现代码[共3页]_第2页
第2页 / 共3页
自适应Simpson积分算法MATLAB及C实现代码[共3页]_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《自适应Simpson积分算法MATLAB及C实现代码[共3页]》由会员分享,可在线阅读,更多相关《自适应Simpson积分算法MATLAB及C实现代码[共3页](3页珍藏版)》请在金锄头文库上搜索。

1、自适应Simpson积分算法(MATLAB及C+实现代码) (计算数学课用)在CSDN论坛中找到了却要金币,无奈之下自己写了一份。对于类似问题,改一下积分函数和区间即可。针对问题:数学上已经证明了0141+x2dx=成立,所以可以通过数值积分来求的近似值。试利用自适应Simpson算法计算积分近似值。C+版:(直接复制粘贴在VC+6.0即可运行)/*用自适应Simpson积分方法计算积分值*/#include#includeint n=0; /设置全局变量n,用来记录最高迭代次数,避免递归一直进行下去。double pi=3.141592653589793238462643 ; /设置近似精确

2、值,用以比较double e1=0.00001 ; /设置误差容限为10-5double f(double); /要积分的函数 double Simpson (double,double,double,double); / 迭代函数using namespace std;/主函数 int main() double a=0,b=1,t,h,S;/积分区间 h=(b-a)/2; S=h/3*(f(a)+f(b)+4*f(a+b)/2); /第一次Simpson公式积分值 t=Simpson(a,b,e1,S); cout积分值为:tendl; cout最大迭代次数为:nendl; cout设置误

3、差容限为e1n误差为:pi-t500) cout方法有误,跳出递归endl; return 0; S1=h/6*(f(A)+f(A+h)+4*f(A+h/2); / 在A,(A+B)/2 区间上计算Simpson积分值 S2=h/6*(f(A+h)+f(B)+4*f(A+3/2*h); / 在(A+B)/2,B 区间上计算Simpson积分值 if(fabs(S-S1-S2)15*e) return S1+S2; /如果满足误差容限要求 ,就以S1+S2作为此时对应区间上的函数的近似值else return Simpson(A,(A+B)/2,e/2,S1)+Simpson(A+B)/2,B,

4、e/2,S2); /递归调用 MATLAB版: (两个函数文件加一个脚本文件)1.编写积分函数文件:function y =f(x)y=4./(1+x.2);end2.编写Simpson 迭代函数文件function y = Simpson( A,B,e,S )h=(B-A)/2;S1=h/6*(f(A)+f(A+h/2)+4*f(A+h/2);S2=h/6*(f(A+h)+4*af(A+3/2*h)+f(B);if abs(S-S1-S2)10*e y= S1+S2;else y=Simpson(A,(A+B)/2,e/2,S1)+Simpson(A+B)/2,B,e/2,S2);end e

5、nd3.编写脚本调用文件tic clear; a=0; b=1; %积分区间e=0.0000001; %误差容限h=(b-a)/2; S=h/3*(f(a)+f(b)+4*f(1/2*(a+b); %第一次Simpson积分值t=Simpson(a,b,e,S) %最终自适应方法积分值abs(pi-t) %实际误差e %设置的误差容限toc %返回所用时间亲测可用。这两个代码本质上是一样的。我先用C+语言写好,然后又换用成MATLAB语言。MATLAB好像可以把误差容限调到10-7以下,而C+ 则只能到10-5左右。原因不甚了解,猜测可能是由于C+计算时字节长度不够,导致精度不够,要递归调用很多次才能达到所需精度。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号