Nullstellen berechnen mit Intervallhalbierung?
-
Hi Leute!
Ich hab wieder eine mathematisches Problem, dass ich mithilfe eines C-Programms lösen möchte. Ich will von einer Funktion die Nullstellen besitzt, den Ort der Nullstelle(n) mithilfe der Intervallhalbierung berechnen lassen. Hier seht ihr meinen Anfang des Codes:
#include<stdio.h> #include<math.h> float funktion(float x) { float y; y = log(x); return y; } int main() { float a, b, i; printf("Berechnung von Nullstellen mit Intervallhalbierung\n\n\n"); printf("Intervall eingeben:\n\n"); printf("a = "); scanf("%f", &a); printf("b = "); scanf("%f", &b); printf("Intervall = [%f;%f]", a, b); b = (a+b); while() { if((funktion(a) <= 0) && (funktion(b) > 0)) { b = (a+b)/2; } else { a = b; b = a + b; } } return 0; }
Das Programm tut zwar schon irgendwie sowas was ich will, aber die Abbruchbedingung in der while-Schleife ist mir leider nicht klar. Außerdem brauch noch eine Abfrage, wenn die Vorzeichen umgekehrt sind, sprich die Funkion von a ein pos. Vorzeichen hat und die Funktion von b ein neg. Vorzeichen...
-
Die Abbruchbedingung sollte sein wenn a == b bzw. wenn sich a und b um einen kleinen Betrag unterscheiden.
Noch ein paar Anmerkungen:
- Du gibst ein Intervall ein; also von a bis b.
- Dann rechnest du b=a+b; Das sieht nach Intervalllänge aus.
- Nach a = b; b = a + b; ist b == 2*b. Also außerhalb vom Intervall.
- der log(x) ist ein bisschen unschön bei x = 0;Tipp: Du musst den Funktionswert an den Stellen a, b und (a+b)/2 miteinander vergleichen und dann je nach Ergebnis a oder b auf (a+b)/2 setzen.