#include < stdio.h >
#include < math.h >
#include < stdlib.h >
#define FMT "%-10.6g"
float f(float x) {
return pow(x, 1.5);
}
float Romberg(float a, float b, float eps) {
int i,
k;
long int kk;
float h,
*T1,
*T2,
t;
k = 0;
h = b - a;
T1 = (float * ) malloc(sizeof(float));
T2 = (float * ) malloc(2 * sizeof(float));
T1[0] = (f(a) + f(b)) * h / 2.0;
T2[0] = (T1[0] + h * f(a + h / 2.0)) / 2.0;
T2[1] = (4.0 * T2[0] - T1[0]) / 3.0;
k = 2;
h /= 2.0;
kk = 1;
printf(FMT, T1[0]);
printf("\n");
printf(FMT, T2[0]);
printf(FMT, T2[1]);
printf("\n");
while (fabs(T2[k - 1] - T1[k - 2]) >= eps) {
free(T1);
T1 = (float * ) realloc(T2, k * sizeof(float));
T2 = (float * ) malloc((k + 1) * sizeof(float));
t = 0.0;
kk *= 2;
for (i = 0; i < kk; i++) t += f(a + i * h + h / 2.0);
T2[0] = (T1[0] + h * t) / 2.0;
for (i = 1; i <= k; i++) {
t = pow(4.0, (float) i);
T2 = (t * T2 - T1) / (t - 1.0);
}
k++;
h /= 2.0;
for (i = 0; i < k; i++) {
printf(FMT, T2);
}
printf("\n");
}
t = T2[k - 1];
free(T1);
free(T2);
return t;
}
void main() {
float t;
printf("\n");
t = Romberg(0.0, 1.0, 1e-5);
printf("\nRomberg:\n");
printf(FMT, t);
}
Romberg
原创
©著作权归作者所有:来自51CTO博客作者mb643d15e043b20的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Romberg算法(Matlab实现)
目录1、概述2、代码3、结果4、讨论1、概述 在前面一章,我们已经梳理了Romberg算法的相关知识点
算法 matlab 开发语言 matlab代码 递推 -
Romberg算法(C语言实现)
目录1、概述2、代码3、结果1、概述2、
算法 c语言 开发语言 #include i++ -
Romberg算法(龙贝格求积公式C语言实现)
目录1、原理2、案例3、代码4、结果5、误差分析1、原理2、案例
算法 c语言 开发语言 #include i++ -
5 、 数值计算
5.1 定积分计算(Romberg) 5.2 多项式求根(牛顿法) 5.3 周期性方程(追赶法)
多项式 i++ 牛顿法 定积分 #define