Romberg-Verfahren
-
Hallo,
weiß jemand wo ich den Quellcode für das Romberg-Verfahren finde?Vielen dank, Jack
-
-
Danke, aber hab bisher keinen gescheiten Quellcode für C++ entdeckt.
Vielleicht könntest du mir einen genauen Link geben...danke!
-
Im Wikipedia-Artikel gibt es doch eine (ich glaube) C#- oder Java-Version des Algorithmus - da dürfte es für einen halbwegs gebildeten Programmierer nicht so schwer sein, das auf C++ zu übersetzen

-
Hmm...vielleicht kann mir jemand sagen, wo die Fehler in meiner Umsetzung liegen:
double Trapez(double l, int w) { double x = 0,I,h; int s=0; h = (b-a) / l; for (int i=1; i <= n-1; i++) { x = a + i * h; s = s + f(x); } I = (h/2) * ( f(a) + 2*s + f(b)); return I; } void Romberg() { double T[4] [4]; for (int i = 0; i <= m; i++) { T[i][0] = Trapez( (i+n), int(pow(2.,n+i)) ); } cout << endl; for (int k = 1; k <= m; k++) { for (int i = k; i <= m; i++) { T[i][k] = (( T[i][k-1]-T[i-1][k-1] ) /(pow(2.,2.*k)-1)); } } //Ausgabe der Iterationen for (int i = 0; i <= m; i++) { cout <<"T["<<i<<"]["<<i<<"]="<<T[i][i]; cout <<"\n"; } return; }PS: Ich habe nie behauptet, dass ich nur halbwegs programmieren kann

-
Erstens: Woher kommen 'm', 'a', 'b', 'n'? Du solltest alle verwendeten Variablen (a) deklariert und (b) vernünftig initialisiert haben.
Zweitens: Das Array T könnte möglicherweise etwas zu klein gewählt sein.
-
So, nochmal:
int m=3; double a=-10, b=10, n=3; //Intervall -10 bis 10, Parameter n=m=3 double f(double x) { double pi=3.141592654; return (1/sqrt(2*pi)*exp((-x*x)/2)); } double Trapez(double h, int w) { double temp = 0.; for (int v = 0.; v < w; v++) { temp += h * ( f(a+v*h) + f(a+(v+1)*h)) / 2; } return temp; } void Romberg() { double T[10] [10]; for (int i = 0; i <= m; i++) { T[i][0] = Trapez( (b-a)/(pow(2.,i)), int(pow(2.,i)) ); } cout << endl; for (int k = 1; k <= m; k++) { for (int i = k; i <= m; i++) { T[i][k] = (( T[i][k-1]-T[i-1][k-1] ) /(pow(2.,2.*k)-1)); } } //Ausgabe der Iterationen for (int i = 0; i <= m; i++) { cout <<"T["<<i<<"]["<<i<<"]="<<T[i][i]; cout <<"\n"; } return; }Ich weiss nur, dass das korrekte Ergebnis 1.0096446526939107 lauten müsste.
Wäre schön, wenn du den Fehler finden würdest.
-
Sag mir mal, woher der Compiler die Variable m kennen soll.