Informatik Trapezregel programmieren?
Hallo zusammen,
ich sollte diese Funktion in C programmieren und komme da nicht mehr weiter.
Mein bisheriger Code sind folgendermaßen aus:
#include <stdio.h>
#include <math.h>
double f(int x)
{
double erg;
erg = exp(x)/x;
return erg;
}
double trapez(double a, double b, double n)
{
double xi;
double integral, h, i_n;
h = (b - a) / n;
for(int i = 0; i <= n; i++)
{
xi = a + i * h;
i_n = (h / 2) * (f(xi));
}
return i_n;
}
int main()
{
double a, b, n;
double integral;
printf("Geben Sie die Werte fuer a ein. \n");
scanf("%f", &a);
printf("Geben Sie die Werte fuer b ein. \n");
scanf("%f", &b);
printf("Geben Sie die Werte fuer n ein. \n");
scanf("%f", &n);
integral = trapez(a, b, n);
printf("%f", integral);
}
Wenn ich diesen Code mit a = 3, b = 4 und n = 5 aufrufe bekomme ich als Ausgabe nur
1.#INF00
Danke im Vorraus.
2 Antworten
da sind zu viele Fehler drin, um alles zu überblicken.
- f sollte keinen int, sondern double als Argument haben.
- dafür sollte n bei trapez int sein, kein double
- trapez hat einen double integral, verwendet den nicht
- trapez summiert auch nichts
da würde ich mal ein anfangen...
n sollte eine Ganzzahlvariable sein, also int und nicht double
In der Schleife wird i_n jedesmal neu berechnet und am Ende der letzte so berechnete Wert von der Funktion zurückgegeben. Das kann nicht stimmen; die Schleife sollte doch Flächeninhalte aufsummieren.
Die Schleife sollte von i=1 bis n gehen. In jedem Durchlauf berechnest du x = a+h*i und y=f(x). Du musst außerdem den Wert von y aus dem letzten Schleifendurchlauf (y_alt) aufbewahren. Aus h, y_alt und y kann die Fläche des Trapezes berechnet werden. Diese Flächen werden aufsummiert.
Vor der Schleife berechne y_alt = f(a) für das erste Trapez.
Wie kriege ich es so hin, dass ich dann die Funktionen bis x_n aufsummiere weil das x nach jedem neuen Aufruf der For-Schleife erst um eins erhöht wird.