如何在 C 中实现具有无限限制的梯形积分?

How to implement Trapezoidal Integration with Infinite Limits in C?

我正在尝试创建一个 c 程序来对 0 和无穷大之间的 sin(x)/sqrt(x) 进行积分。当函数趋于无穷大时,我通过切断端点来使用梯形规则。

但是返回的总金额太高,我不知道为什么。这是代码:

#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);
}

有什么想法吗?

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

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

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

您的问题在线

F=fabs(func(u));

您真正想要集成 func 的是

F=func(u);

在这种情况下,我认为问题在于 fabs(func(u)) 在无穷大处不可积,因此您的算法会发散。