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.


Anmelden zum Antworten