Romberg积分法计算定积分(C语言)

原创 2012年03月30日 18:48:49

/*
-------------Romberg积分法计算定积分-------
参考教材:《数值分析》李乃成,梅立泉,科学出版社
    《计算方法教程》第二版 凌永祥,陈明逵*/

//误差界eps%被积函数为f(x)=(x^3+sin(x))/x;积分区间为[0.3,0.8]

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int main(void)
{
/* int i,j,n;

 float *d=(float *)malloc(sizeof(float)*N);
 float *x=(float *)malloc(sizeof(float)*N);
 float *y=(float *)malloc(sizeof(float)*N);
 float *u=(float *)malloc(sizeof(float)*N);

 free(a);free(b);free(c);free(d);free(x);free(y);free(l);
 
 return 0;
*/

 double b=0.8;
 double a=0.3;
 double h=0.0; //
 double eps=1.0e-5;//误差界eps
 int kmax=20; //最大递推次数
 double T1=0.0,S1=0.0,C1=0.0,R1=0.0,T2=0.0,S2=0.0,C2=0.0,R2=0.0;
 double sum;
 double *x,*fx;
 int i;
 h=b-a;
 T1=h/2*((pow(a,3)+sin(a))/a+(pow(b,3)+sin(b))/b);
 printf("T1:%13.12f\n",T1);
 for(int k=0;k<kmax;k++)
 {
  h=(b-a)/(pow(2,k+1));
  x=(double *)malloc(sizeof(double)*int(pow(2,k)));
  for(i=0;i<pow(2,k);i++)
  {
   x[i]=a+(2*i+1)*h;
  }
  fx=(double *)malloc(sizeof(double)*int(pow(2,k)));
  sum=0.0;
  for(i=0;i<pow(2,k);i++)
  {
   fx[i]=(pow(x[i],3)+sin(x[i]))/x[i];
   sum+=fx[i];
  }
  T2=T1/2+sum*h;
  printf("T2:%13.12f\n",T2);
  S2=T2+(T2-T1)/3;
  printf("S%d:%13.12f\n",int(pow(2,k)),S2);
  if(k<2)
  {
   if(k==1)
   {
    C2=S2+(S2-S1)/15;
    printf("C1:%13.12f\n",C2);
   }
  }
  else
  {
   C2=S2+(S2-S1)/15;
   printf("C%d:%13.12f\n",int(pow(2,k-1)),C2);
   R2=C2+(C2-C1)/63;
   printf("R%d:%13.12f\n",int(pow(2,k-2)),R2);
   if(fabs(R2-R1)<eps)
    break;
   R1=R2;
  }
 T1=T2;S1=S2;C1=C2;

  free(x);free(fx);
 }
 printf("所求积分I=%13.12f\n",R2);

 return 0;
}

Romberg求积分算法

// Integral-romberg方法求积分.cpp : 定义控制台应用程序的入口点。 // /* romberg方法求积分 方法也称为逐次分半加速法。它是在梯形公式,simpson公式和newt...
  • u012852986
  • u012852986
  • 2014年12月27日 22:37
  • 2081

c语言实现积分的方法

复化梯形公式,复化抛物线公式和Romberg求积法的算法程序: 以下程序均定义误差限为1*10^-5; 1)复化梯形公式: #include  #include  #define...
  • The_King_Cloud
  • The_King_Cloud
  • 2012年06月07日 14:37
  • 6624

龙贝格积分(Romberg)(C++)

  • 2009年10月31日 17:35
  • 133KB
  • 下载

Romberg法求定积分

1 实验题目:2 算法组织:2.1 算法原理:由梯形算法可以推得:,这里h为2n个区间的步长,即h = (b - a) / 2n;如果有2^n个相同的子区间,则上式变为:,这里hn为2^n个区间的步长...
  • lichengyu
  • lichengyu
  • 2009年11月24日 12:47
  • 4065

Romberg积分法计算定积分(Matlab程序)

%Romberg积分法计算定积分 %参考教材:《数值分析》李乃成,梅立泉,科学出版社 %《计算方法教程》第二版 凌永祥,陈明逵 clear;clc;close all; format long...
  • zhangchao3322218
  • zhangchao3322218
  • 2012年03月30日 18:48
  • 6944

Romberg积分法求解数值积分

  • 2010年01月09日 01:18
  • 516B
  • 下载

数值积分 matlab代码

  • 2010年04月20日 18:45
  • 89KB
  • 下载

C语言实现龙贝格积分

《数值分析》实验习题2 用Romberg算法求下列积分,允许误差eps=0.00001 /****************************************************...
  • LuYiXianSheng
  • LuYiXianSheng
  • 2017年12月08日 20:54
  • 151

C语言求定积分

一.写一个用矩形法求定积分的函数,求sin(x)在(0,1)上的定积分。 #include  #include  float jifen(float a,float b) {int i,l; ...
  • yx891020
  • yx891020
  • 2014年02月27日 16:58
  • 1732

Romberg积分法计算定积分(C语言)

/* -------------Romberg积分法计算定积分------- 参考教材:《数值分析》李乃成,梅立泉,科学出版社     《计算方法教程》第二版 凌永祥,陈明逵*/ //误差界e...
  • zhangchao3322218
  • zhangchao3322218
  • 2012年03月30日 18:48
  • 4265
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Romberg积分法计算定积分(C语言)
举报原因:
原因补充:

(最多只允许输入30个字)