Nullstellen Bisecverfahren
-
Irgendwie hab ich grad einen vogel und seh nicht was ich falsch mache.
double bisec(const double a, const double b){ double c = (a+b)/2 ; for(int k=0;k<100;++k){ if (testfunction(c)==0) break; else if (testfunction(c)*testfunction(a)<0) c = (a+c)/2; else if (testfunction (c)*testfunction(b)<0) c = (c+b)/2; } return c; }Ich habe ganz einfache funktionen ausprobiert, wo es schon nach wenigen schritten eigentlich die nullstele sein sollte, aber da kommt bei mir immer schwachsin, ich seh grad überhaupt nicht, was ich falsch mache

-
Fließkommazahlen prüft man nicht mit operator== auf Gleichheit.
-
Der Fehler liegt im Wesentlichen darin, dass a und b nicht verändert werden. Damit bleibt das Intervall immer gleich groß und der Wert von c hüpft dort zwar hin und her, nähert sich aber nie der Nullstelle.
- beseitige das const vor a und b im Aufruf.
- verschiebe die Berechnung von c in die Schleife, hinter Zeile 5
- ersetze c = (a+c)/2 (Zeile 13) durch b=c; und c = (c+b)/2; (Zeile 16) durch a=c;
-
oh man danke, ich bin auch blöd