数值作业:变步长梯形求积算法计算积分C语言实现
来源:互联网 发布:php中switch case语句 编辑:程序博客网 时间:2024/05/10 10:48
变步长的梯形公式计算积分.算法基本分析:输入a,b(积分上下限),n为积分区间等分数,eps为计算精度,我这里1/2e-6,代表0.5乘以10的负6次方.变步长梯形求积算法计算积分,本题目取的例子为数值书131面的例子2,f(x)= sin(x)/x,下面给出代码:
ps:略微更新纠正一下,复合梯形公式和复合simpson公式是不一样的:
复合梯形公式:
复合simpson公式(这个我们数值书131面有算法描述):
我这个就是梯形公式,一张别人写的算法描述:
我写的代码逻辑比较模糊,当时懒得修改:网上有一篇别人写的梯形公式算法逻辑比较清晰,可以看看:http://www.cnblogs.com/quantumplan/archive/2014/03/07/3586429.html
/******************************************** > File Name: Ladder.c > Author:chendiyang > School:WUST_CST_1501班 > Myblog:www.chendsir.com > Mail:1441353519@qq.com > Created Time: 2017年05月5日 星期五 21时19分21秒 ************************************************************************/ #include <stdio.h> #include <math.h> //本题目取的例子为数值书131面的例子2,f(x)= sin(x)/x #define m 100 //积分区间等分数,偶数不宜过大 #define a 0.000000001 //分母是0,a计算的时候不能为0,所以我们只能无限接近于0,否则会计算不出值 #define b 1.0 //积分上限 #define eps 0.5e-6 //计算的精度 double f(double x)//我们的积分函数,如果是其他的就在return里面改 { return sin(x)/x;//值得注意的是以e为底的指数函数如何表示呢,C语言用exp()函数表示 } //比如以e为底的指数函数e的-x*x,则exp(-x*x)表示 int main() { int n=m; int i; double T,H,T1,T2; double h=(b-a)/n;//积分步长 T=(f(a)+f(b))/2; for(i=1;i<n;i++) T+=f(a+h*i); T*=h; T2=T; T1=T2+100; do { T1=T2; for(i=0,H=0;i<n;i++) H+=f(a+h*i+h/2); H*=h; T2=(T1+H)/2; h=h/2; n=n*2; }while(fabs(T1-T2)>3*eps); printf("T=%lf\n",T2); return 0; }
运行结果:
结果和书上的是一样的,只不过书上的精确度更高些.
0 0
- 数值作业:变步长梯形求积算法计算积分C语言实现
- 变步长梯形求数值积分
- 数值作业:龙贝格算法计算积分C语言实现
- 计算方法之用变步长梯形求积公式求定积分
- 自动选步长的梯形算法计算定积分
- 用 梯形法,矩形法,辛普生法,变步长梯形法,求积分
- 变步长辛普森求数值积分
- 变步长梯形法
- 数值积分C语言算法
- PID算法的C语言实现七 梯形积分的PID优化
- 变步长梯形求解微分方程
- 数值计算数值积分实现
- 变步长复化梯形法求积
- PID算法的C语言实现八 变积分的PID优化
- c语言实现求定积分
- 数值作业:二分法求方程的根之C语言实现代码
- 数值作业:二分法求方程的根之C语言实现代码
- C语言之数值计算--级数算法
- 《设计模式之禅》读书笔记-策略模式
- tensorflow下对MNIST数据集进行识别的程序代码
- JavaScript入门
- idea
- linux线程(创建,等待,终止)
- 数值作业:变步长梯形求积算法计算积分C语言实现
- hdu1452Happy 2004(乘性函数+费马小定理+求逆元)
- 关于android studio的混淆操作
- 使用spring、springmvc和hibernate开发博客(一)——搭建框架
- VMware-启动显示内存不足。
- 第一次写博客
- 安装Googel chrome并卸载Firefox
- 实现 一个满足你特殊癖好的 正则.md
- Scrapy入门(二)创建Scrapy项目