c语言龙贝格积分法实验报告,数值作业:龙贝格算法计算积分C语言实现

本文介绍了一篇关于使用C语言实现龙贝格算法计算定积分的数值作业。作者通过代码展示了如何根据Romberg算法计算定积分,并与变步长的Simpson算法进行比较。在调试过程中,作者因一个中文空格问题耗费了一小时,最终得出正确结果,强调了编程中细节的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数值作业:龙贝格算法计算积分C语言实现

数值作业:龙贝格算法计算积分C语言实现

根据Romberg算法计算定积分,和变步长的Simpson算法的输入都一样.算法基本分析:输入a,b(积分上下限),n为积分区间等分数,eps为计算精度,我这里1e-7,代表0乘以10的负7次方.本题目取的例子为数值书137面的例子2,f(x)= sin(x)/x,下面给出代码:

/********************************************

> File Name: Dragon.c

> Author:chendiyang

> School:WUST_CST_1501班

> Myblog:www.chendsir.com

> Mail:[email protected]

> Created Time: 2017年05月6日 星期六 12时33分10秒

************************************************************************/

#include

#include

#define N 20

#define MAX 10 //数组存的最大行数

#define a 0.0000001 //积分下限

#define b 1.0 //积分上限

#define eps 1e-7 //精度

double f(double x)//所求积分公式

{

return sin(x) / x;

}

double computeT(double aa, double bb, long int n)//复化梯形公式

{

int i;

double sum, h = (bb - aa) / n;

for (i = 1; i < n; i++)

sum += f(aa + i * h);

sum += (f(aa) + f(bb)) / 2;

return (h * sum);

}

double f2(double x)

{

return x*x;

}

int main()

{

int i;

long int n = N,m = 0;

double T[MAX + 1][2];

T[0][1]=computeT(a,b,n);

n*= 2;

for (m = 1; m < MAX; m++)

{

for (i = 0; i < m; i++)

{

T[i][0] = T[i][1];

}

T[0][1]=computeT(a,b,n);

n *= 2;

for (i = 1; i <= m; i++) //T的m(h)

T[i][1] = T[i - 1][1] + (T[i - 1][1] - T[i - 1][0]) / (pow(2, 2 * m) - 1);

if ((T[m - 1][1] < T[m][1] + eps) && (T[m - 1][1] > T[m][1] - eps))

{

printf("计算的数为:%lf\n", T[m][1]); //输出

return 0;

}

}

printf("此题没有解...\n");

return 0;

}

运行结果:

a4fd2cf6348b85037f0950ea387e0209.png

可见计算的结果是正确的,然而中间因为一个小小的中文空格替换问题,调试了整整一小时,等发现错在哪之后,才拍大腿,恍然大悟,脑子一直在想我TM到底错在哪了.虽然烦,以前一位学长说程序员们基本都是吾日三省吾身的,每当Debug的时候,感触最深..

纸上得来终觉浅,绝知此事需躬行.

数值作业:龙贝格算法计算积分C语言实现相关教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值