4-龙贝格求积算法

作者在 2008-05-10 21:08:31 发布以下内容

#include "stdio.h"
#include "conio.h"
#include "math.h"
#define EPS 1e-6

double f(double x) { return 4/(1+x*x); }

double Romberg(double a,double b,double(*f)(double),double eps)
{
    int i , m , n=1 , j=1 ;
    double h , sum , p ;
    double T[10][10];

    h = (b-a)/2;
    T[0][0] = h*( f(a) + f(b) );
    printf("T(0,0)=%f\n",T[0][0]);

    do                                //Romberg算法
    {

         sum=0.0;
        for( i=1 ; i <= n ; i++ )
          sum = sum + f( a + ((2*i-1)*h) );

        T[j][0] = ( T[j-1][0]/2) + ( h*sum );
        printf("T(0,%d)=%f\n",j,T[j][0]);

        for( m=1 ; m <= j ; m++ )
        {
            p = pow( 4 , (double)(m) );

            T[j-m][m] = ( p * T[j-m+1][m-1] - T[j-m][m-1] ) / (p-1);
            printf("T(%d,%d)=%f",m,j-m,T[j-m][m]);
        }

        m--;
        h = h/2;
        n = n*2;
        j++;
       
    } while ( fabs( T[0][m] - T[0][m-1] ) > eps );
    return (T[0][m]);
}

main()
{
    printf("\n\n积分结果 =  %f\n", Romberg(0 , 1 , f , EPS));
}


 

大小: 1.04 KB
版本: V1.0
出品: 本站原创
来源: 本地
语言: 简体中文
授权: 免费
默认分类 | 阅读 766 次
文章评论,共0条
游客请输入验证码
文章分类
文章归档