Problem mit C++ Programm für die Uni...
-
Hallo,
hab hier ein Problem mit nem C++ Programm für die Uni. Es kommt immer ein Segmentation Fault.
Zum Programm: Es soll ein Romberg-Tableau erstellt werden und damit zusammen mit der Trapezregel eine Nährungsweise Bestimmung des Integrals einer vorgegebenen Funktion berechnet werden.
Hab schon ein bisschen Fehlersuche gemacht und festgestellt, dass auch etwas am Aufruf der Funktion f bzw. an deren Ausführung nicht stimmen kann.
Der Segmentation Fault kommt am Ende vom Programm, während die T[i][k] ausgegeben werden.
Vielleicht findet ihr ja was...
#include <iostream> #include <cmath> #include <iomanip> using namespace std; //Funktion für Integration double f(double x) { double ergebnis; ergebnis = (log(1.0+x))/(x*x*+1.0);//hier beliebige Funktion return ergebnis; } //Trapezregel, nährungsweise Integration von a bis b an n Auswertungspunkten double trapez(double a, double b, double n) { double erg; double h; double x; int i; //Stück für Stück die Trapezregel umsetzen... erg = 0.5*f(a);//Schritt 1 h = (b-a)/n;//Schrittweite errechnen x=a; for(i=0; i<n; i++)//Schritt 2 { x=x+h; erg+=f(x); } erg = erg + 0.5*f(b);//Schritt 3 erg = erg*h;//Schritt 4 return erg; } int main() { double a,b; double faktor; int k,i,n; const int imax=7; double T[imax+1][imax+1]; //Zweidimensionales Feld für Romberg-Tableaus //Einlesen der Integrationsgrenzen cout << "Gearbeitet wird mit der Funktion f(x)=(log(1+x))/(x^2+1)" << endl << endl; cout << "Bitte geben Sie die linke Integrationsgrenze(=a) ein: "; cin >> a; cout << "Bitte geben Sie die rechte Integrationsgrenze (=b) ein: "; cin >> b; cin.get(); n=1; //Aufsummieren der Trapeze for(i=0; i<=imax; i++) { T[i][0] = trapez(a,b,n); n*=2; } faktor=1; //Spaltenweise Berechnung der Nährungswerte for(k=0; k<=imax; k++) { faktor*=4; for(i=k; i<=imax; i++) { T[i][k] = T[i][k-1]+(T[i][k-1]-T[i-1][k-1])/(faktor-1); } } //Ausgabe for(i=0; i<=imax; i++) { for(k=0; k<=i; k++) { cout << setw(11) << setiosflags(ios::fixed|ios::right) << T[i][k]; } cout << endl; } getchar(); return 0; }
Danke schonmal fürs anschaun
-
for(k=0; k<=imax; k++) { faktor*=4; for(i=k; i<=imax; i++) { T[i][k] = T[i][k-1]+(T[i][k-1]-T[i-1][k-1])/(faktor-1); } }
Beim ersten Schleifendurchgang ist i und k = 0. Damit greifst du auf das Element T[0][-1] bzw. T[-1][-1] zu. Die existieren aber nicht.
-
ok, das wars...
ansonsten war noch nen Syntaxfehler bei der Funktion. Sowas kann man doch normal garnicht übersehen