numerische integration mit c

Habe ich zu tun, numerische integration für eine Reihe von Datenpunkten aus einer text-Datei.

meine Daten Punkte Aussehen

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  

mein Versuch

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

aber ich bin nicht immer die erforderliche Leistung... ich kann nicht Bild, was ist falsch... Es shud Wünsche, berechne den ganzzahligen Wert, aber seine nicht... auch keine der Punkte ist falsch...es ist einfach nur die erste Zahl, nicht mitgerechnet die keine Punkte... pls help...

  • warum startet Ihr nicht mit einer sehr trivialen test-Eingang (z.B. 0 0; 1 1), wo Sie das Ergebnis wissen, und starten Sie das Debuggen auf die Eingaben.
  • Sind Sie sicher, dass die printf ("Integral:", "\n", integral); Zeile korrekt ist? Ich sehe keine format-Bezeichner im format-parameter "Integral:".
  • Das ist sicherlich nicht C++ - code.
  • So starten Sie mit, warum die tag dies als C++, wenn es kein C++ - code drin? Außerdem, warum verwenden Sie ein double für die Größe (das führt zu deinem problem mit size als fscanf wird gesagt, zu Lesen eine ganze Zahl ist).
  • Bessere Nutzung Simpsons " - Regel, es ist viel genauer für äquidistante Punkte. Wo kommen die Punkte her? Es gibt bessere Methoden, aber Sie wählen die Punkte selbst...
InformationsquelleAutor user2024645 | 2013-01-30
Schreibe einen Kommentar