numerische Integration?
-
Hi Leute! Ich soll mithilfe der Simpson-Formel eine numerische Integration über die Funktion x3+3x2 machen. Laut einem Graphenprogramm lautet der Flächeninhalt im Intervall [-3; 0] 6,75 FE. Ich bekomme aber 666
raus. Da kann was nicht stimmen. Ich weiß aber leider auch nicht so genau was...
#include<stdio.h> double funktion_gerade(double *gerade, double breite_intervalle, double anzahl_intervalle) { int i, j = 2; double x = 0, summe_2 = 0; for(i=0; i<anzahl_intervalle; i=i+1) { gerade[i] = j*j*j - 3*j*j; j = j + 2; summe_2 = summe_2 + gerade[i]; } return summe_2; } double funktion_ungerade(double *ungerade, double breite_intervalle, double anzahl_intervalle) { int i, j = 1; double x = 0, summe_1 = 0; for(i=0; i<anzahl_intervalle; i=i+1) { ungerade[i] = j*j*j - 3*j*j; j = j + 2; summe_1 = summe_1 + ungerade[i]; } return summe_1; } int main () { double breite_intervalle, anzahl_intervalle; double ungerade[1000], gerade[1000], summe_1, summe_2, yn, flaeche; printf("------Numerische Integration nach Simpson------\n\n"); printf("Funktion y = f(x) = x^3+3x^2\n\n\n"); printf("Breite h eingeben (nur gerade Zahlen!): h = "); scanf("%lf", &breite_intervalle); printf("Stützstelle n eingeben (nur gerade Zahlen!): n = "); scanf("%lf", &anzahl_intervalle); summe_2 = funktion_gerade(gerade, breite_intervalle, anzahl_intervalle); summe_1 = funktion_ungerade(ungerade, breite_intervalle, anzahl_intervalle); yn = anzahl_intervalle*anzahl_intervalle*anzahl_intervalle + 3*anzahl_intervalle*anzahl_intervalle; flaeche = (breite_intervalle / 3) * (yn + 4*summe_1 + 2*summe_2); return 0; }
-
Damit man das nachvollziehen kann, sollten wir die Werte wissen die du eingibst.
Und deine Funktionen unterscheiden sich an nur einer Stelle. Daraus kann man eine Funktion machen.
-
Die Werte für die ich im Graphenprogramm mir die Fläche hab berechnen lassen waren von [-3;0]. In meinem Programm hab ich h=1 und n=20.
-
Ich hab dann mal aus den beiden Funktionen eine gemacht:
#include<stdio.h> double funktion(double *array, double breite_intervalle, double anzahl_intervalle, int var) { int i; float summe = 0; for(i=0; i<anzahl_intervalle; i=i+1) { array[i] = var*var*var + 3*var*var; var = var + 2; summe = summe + array[i]; } return summe; } int main () { double breite_intervalle, anzahl_intervalle; double ungerade[1000], gerade[1000], summe_ungerade, summe_gerade, yn, flaeche; int j, k; printf("------Numerische Integration nach Simpson------\n\n"); printf("Funktion y = f(x) = x^3+3x^2\n\n\n"); printf("Breite h eingeben (nur gerade Zahlen!): h = "); scanf("%lf", &breite_intervalle); printf("Stützstelle n eingeben (nur gerade Zahlen!): n = "); scanf("%lf", &anzahl_intervalle); j = 1; summe_ungerade = funktion(ungerade, breite_intervalle, anzahl_intervalle, j); k = 2; summe_gerade = funktion(gerade, breite_intervalle, anzahl_intervalle, k); yn = anzahl_intervalle*anzahl_intervalle*anzahl_intervalle + 3*anzahl_intervalle*anzahl_intervalle; flaeche = (breite_intervalle / 3) * (yn + 4*summe_ungerade + 2*summe_gerade); return 0; }
Beim ersten Beitrag diesen Thread von mir hat sich auch noch ein Fehler eingschlichen. Am besten guckt ihr euch den Code oben durch... Aufgabe ist immer noch durch die Simpson-Formel den Flächeninhalt unterhalb des Graphen der Funktion x3+3x2 berechnen zu lassen.
-
Hi!
Ich hab jetzt noch weiter an meinem Programm gearbeitet. Ich hab allerdings die Funktion zu (x-4)3+3(x-4)2 geändert. Das Intervall soll sein [1;4].
#include<stdio.h> double funktion(double *array, double n, int var, int a, double h) { int i, x; double summe = 0; for(i=0; i<n; i=i+1) { x = a + var*h; array[i] = (x-4)*(x-4)*(x-4) + 3*(x-4)*(x-4); var = var + 2; summe = summe + array[i]; } return summe; } double funktionswert(double var) { double y; y = (var-4)*(var-4)*(var-4) + 3*(var-4)*(var-4); return y; } int main () { double a, b, n; double ungerade[1000], gerade[1000], h, summe_ungerade, summe_gerade, y0, yn, flaeche; int j, k; printf("------Numerische Integration nach Simpson------\n\n"); printf("Funktion y = f(x) = x^3+3x^2\n\n\n"); printf("Intervall eingeben:\n\n"); printf("a = "); scanf("%lf", &a); printf("b = "); scanf("%lf", &b); printf("angegebenes Intervall: [%lf ; %lf]\n\n", a, b); printf("Anzahl der Teilintervalle n eingeben (nur gerade Zahlen!): n = "); scanf("%lf", &n); h = (b-a) / n; j = 1; summe_ungerade = funktion(ungerade, n, j, a, h); k = 2; summe_gerade = funktion(gerade, n, k, a, h); flaeche = (h/3) * (funktionswert(0) + funktionswert(n) + 4*summe_ungerade + 2*summe_gerade); printf("A = %lf", flaeche); return 0; }
-
Hallo,
kann man die Funktion funktion auch rekursiv realisieren?
Wie würde das gehen? Ich hab jetzt eine Stunde überlegt weiß aber nicht wie...
Danke