如何在C中实现无限极限的梯形积分?

时间:2015-03-16 21:20:26

标签: c integration infinity

我正在尝试创建一个c程序,将sin(x)/ sqrt(x)整合到0和Infinity之间。我通过切断端点来使用梯形法则,因为函数趋于无穷大。

然而,返回的总数太高,我不知道为什么。这是代码:

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

double func(double u)
{ double a;
  a = ((sin(u))/(sqrt(u)));
  return a;}

void main()
    {
    int i, N;
    double sum, u, a, b, h, Fa, Fb, F;

    printf("Enter value of N\n");
    scanf("%d" ,&N);

    a=0.01;
    b=1000;

    h=(b-a)/(N-1);

    sum=0;
    F=func(a);
    u=a;

    for(i=0; i<N; i++)
    {
            sum=sum+F;
            u=u+h;
            F=fabs(func(u));
    }

    Fa=func(a);
    Fb=func(b);

    sum=sum-(0.5*Fa)-(0.5*Fb);
    sum=sum*h;

    printf("I: %lf\n", sum);
}

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

工作示例:http://ideone.com/Xibrov

只需删除行fabs中的F=fabs(func(u));

您最后应使用int main(void)return 0;而不是void main()

答案 1 :(得分:0)

您的问题在线

F=fabs(func(u));

您实际想要整合func的是

F=func(u);

在这种情况下我相信问题是fabs(func(u))在无穷大时是不可积的,所以你的算法会分歧。