- 76
- 0
- 约2.07千字
- 约 3页
- 2020-05-25 发布于云南
- 举报
自适应Simpson积分算法(MATLAB及C++实现代码)
(计算数学课用)
在CSDN论坛中找到了却要金币,无奈之下自己写了一份。
对于类似问题,改一下积分函数和区间即可。
针对问题:数学上已经证明了
0
成立,所以可以通过数值积分来求π的近似值。
试利用自适应Simpson算法计算积分近似值。
C++版:(直接复制粘贴在VC++6.0即可运行)
/*用自适应Simpson积分方法计算积分值*/
#includeiostream
#includecmath
int n=0; //设置全局变量n,用来记录最高迭代次数,避免递归一直进行下去。
double pi=3.141592653589793238462643 ; //设置近似精确值,用以比较
double e1=0.00001 ; //设置误差容限为10^-5
double 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设置误差容限为e1\n误差为:pi-tendl;
return 0;
}
//子函数1(积分函数)
double f(double x)
{return 4/(1+x*x);}
//子函数2(迭代函数)
double Simpson (double A,double B,double e,double S)
{double h,S1,S2;
h=(B-A)/2;
n++; //统计迭代次数
if(n500) {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,e/2,S2); //递归调用
}
MATLAB版: (两个函数文件加一个脚本文件)
1.编写积分函数文件:
function y =f(x)
y=4./(1+x.^2);
end
2.编写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
end
3.编写脚本调用文件
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++计算时字节长度
您可能关注的文档
- 组工干部要谨防“三种心理”坚持“四下功夫”时刻保持良好的精神状态和工作作风.doc
- 组成原理A卷答案.docx
- 组织行为学复习提纲DOC.doc
- 细石混凝土找平层.docx
- 细菌的致病性与感染练习题.doc
- 终止解除劳动合同证明书完整版.doc
- 综合性学习天下国家PPT课件.pptx
- 综合教程1unit13课文翻译.doc
- 网上订购火车票系统uml类图时序图状态图协作图活动图对象图用例图.docx
- 网站负责人委托书.docx
- 河北盐山中学等校2025-2026学年上学期高三一模化学试卷(含解析).docx
- 河北正定中学2025-2026学年高一上学期期末考试物理试卷(含解析).docx
- 河北张家口市怀安县2025-2026学年第一学期期末教学综合评价八年级地理试卷(含解析).docx
- 河南安阳市殷都区2025-2026学年第一学期期末教学质量检测七年级地理试卷(含解析).docx
- 河南安阳市滑县2025一2026学年第一学期期末学业质量监测八年级地理试题(含解析).docx
- 河南安阳市林州市2025-2026学年上学期期末考试高一政治试题(含解析).docx
- 河南焦作市武陟县第一中学2025-2026学年高一上学期1月月考语文试卷(含解析).docx
- 河南济源市2025-2026学年上学期期末学业质量调研七年级历史试卷(含解析).docx
- PICC导管并发症的紧急处理与护理.pptx
- 河南鹤壁市2025-2026学年高二上学期期末考试生物试题(含解析).docx
原创力文档

文档评论(0)