簡體   English   中英

與c的數值積分

[英]numerical integration with c

我必須對文本文件中的一組數據點進行數值積分。

我的數據點看起來像

0.5   0.479425539
1     0.841470985
1.5   0.997494987
2     0.909297427
2.5   0.598472144
3     0.141120008
3.5   -0.350783228
4     -0.756802495
4.5   -0.977530118
5     -0.958924275  

我的嘗試是

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

double trapezoidalRule (double size, double *x, double *y)
{
    double sum = 0.0,increment;
    int k;
    for (k=1; k<size; k++)
    {
        increment = 0.5 * (x[k]-x[k-1]) * (y[k]+y[k-1]);
        sum += increment;
    }
    return sum;
    _getch();
}
int main ( int argc, char * argv[])
{
    char*  fileName = argc > 1 ? argv[1] : "C:\\Users\\g\\Desktop\\test.txt";
    FILE*  inputFile = fopen (fileName, "r");
    int  k;
    double size,*x, *y;
    double integral;
    if ( inputFile ==NULL)
    {
        fprintf (stderr, "Open failed for %s\n", fileName);
        exit(666); 
    }
    fscanf (inputFile, "%d", &size);
    printf (" Number of points: %d\n", size);

    x = (double *) calloc (size, sizeof(*x));
    y = (double *) calloc (size, sizeof(*y));

    for (k=0; k< size; k++)
        fscanf (inputFile, "%lg%lg" , x+k, y+k);
    integral = trapezoidalRule (size, x, y);
    printf ("Integral:", "\n", integral);
    printf ("\n");
    //printf ("check: ","\n", x[size-1], log(x[size-1]) );
    _getch();
}

但是我沒有得到所需的輸出...我想不出什么錯...它應該計算整數值,但不是...點數也是錯誤的...它只是取第一個數字,而不是計算點數...請幫助...

我認為您離解決方案不遠。 該公式至少看起來不錯。

您的代碼中最大的錯誤可能是數據中缺少要讀取的點數。 因此,您的代碼可能會讀取“ 0.5”作為點數。 然后,k上的循環僅適用於k = 0(然后k = 1> 0.5),這可能就是為什么只有一個點的原因。 為了使其正常工作,我進行了以下更改:

  • 在數據文件的開頭添加點數。
  • 更改大小類型為int size
  • 打印整數printf ("Integral: %lg \\n", integral);的值printf ("Integral: %lg \\n", integral);

那使它對我有用。

(大的修改,因為它已被改名為C而不是C ++)

您不應使用%d讀取雙精度值,而應使用格式說明符%lf 我也不明白為什么size是雙倍的。 看來它只能是一個非負整數,因此在這里最好用unsigned最好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM