回 帖 发 新 帖 刷新版面

主题:[原创]龙贝格算法!!!!!大虾们都来看看!!

#include<stdio.h>
#include<math.h>
#define N 11
double function(double x)
{
    if(x==0)
    return 1;
    else
    return sin(x)/x;
}
main()
{
    int k,m,a,b,n;
    double h,r,T[N][N];
    double sum;
    printf("input a:\n");
    scanf("%d",&a);
    printf("input b:\n");
    scanf("%d",&b);
    printf("input r:\n");
    scanf("%lf",&r);
    T[0][0]=(b-a)*(function(a)+function(b))/2;/*计算T[0][0]*/
    for(k=1;k<=N;k++)     /*用复合梯形公式计算T[0][k]*/
    {
    n=pow(2,k-1);
    h=(b-a)/pow(2,k-1)*1.0;
    for(m=0;m<n;m++)
        {
        sum=0;
        sum+=function(a+m*h+h/2);
        }
    T[0][k]=T[0][k-1]/2+h/2*sum;
    }
    for(k=1;k<=N;k++)     /*龙贝格公式求第K行元素的值*/
    {
        for(m=1;m<=k;m++)
        {
        T[m][k-m]=(pow(4,m)*T[m-1][k-m+1]-T[m-1][k-m])/(pow(4,m)-1);
        if(fabs(T[k][0]-T[k-1][0])<r)
        break;
        }
    }
    printf("T[10][0]:%lf",T[10][0]);
}  走过路过都看一看啊,帮帮忙啊,很急的。重点看梯形公式部分啊!!!!谢谢了!!!

回复列表 (共6个回复)

沙发

看了2l回复幡然醒悟过来- -int最好不直接让编译器隐式转换float,做个*1.0会稳妥一些

板凳

pow函数定义中没有定义pow(int,int)类型,你要强制转换第一个参数为float或double或long double

3 楼

呵呵,辛苦你了。我更想知道,我梯形公式哪错了。我自己用草稿算结果应该是对的。为什么在VC上运行结果T[0][0]和T[0][1]是对的,T[0][2]和后面的结果都不对呢?你能帮我运行下吗?

4 楼

我复合梯形公式错了吗?为什么我自己按程序在草稿上演算能得到正确答案,在VC上运行确只有T[0][0]和T[0][1]正确,其他T[0][2],T[0][3]都错了啊。麻烦你重点帮我看梯形公式啊。我把运行结果截图了,发不上来。

5 楼

欧了,结贴了

6 楼

欧了,结贴了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册