000
13.06.2013, 11:45 Uhr
chiral
|
Hallo zusammen!
Ich soll ein Programm schreiben, das mithilfe der Bisektionsmethode die Nullstelle einer streng monoton steigenden Funktion wie folgt berechnet: 1. Setzel=a und r=b. 2. Teste, ob [l, r] eine Nullstelle entha ̈lt. Wenn nicht: Abbruch. 3. Teste, ob r − l < ε ist. Wenn ja, dann ist das Lo ̈sungsintervall gefunden. 4. Sonst teile [l, r] in der Mitte und setze das Verfahren mit beiden Teilintervallen rekursiv bei (2) fort. Das soll mit folgender signatur geschehen: void bisection(std::vector <double >& interval , double eps);
Mein Versuch sieht nun so aus:
C++: |
void Tbisection(std::vector <double >& interval, double eps) { double l; double r; l = interval[0]; r = interval[1]; cout << "l = " << l << endl; cout << "r = " << r << endl; //cout << "f(l) = " << f(l) << endl; //cout << "f(r) = " << f(r) << endl; if (f(l) < 0 && f(r) > 0) { if (r - l < eps) { interval[0] = l; interval[1] = r; cout << "Die Nullstelle liegt im Interval: [" << interval[0] << "," << interval[1] << "]" << endl; return; } else { double a = (r - l)/2; vector<double> inta(2); inta[0] = l + a; inta[1] = r; Tbisection(inta, eps); vector<double> intb(2); intb[0] = l; intb[1] = r - a; Tbisection(intb, eps); } } else { cout << "Das Interval enthält keine Nullstellen."; } }
|
Mein Problem ist nun, dass die Funktion das Interval zwar findet, jedoch die Berechnung nicht stoppt sondern die Rekursion weiterführt. Vielleicht kann mir jemand weiterhelfen.. Dieser Post wurde am 13.06.2013 um 14:14 Uhr von FloSoft editiert. |