# Intervallhalbierung - mehrere Nullstellen?



## ano0nym (1. Jul 2011)

Hallo,

ich habe eine Frage zur Intervallhalbierung.
Und zwar, wie kann man, wenn überhaupt möglich, mehrere Nullstellen einer Funktion mit Hilfe dieses Verfahrens berechnen lassen?

Zum Beispiel bei der Funktion x*x-2
Die Nullstellen sind x1 = 1,41 und x2 = -1,41 

Wähle ich nun zum Beispiel das Intervall [-3;3] so wird x2 ausgegeben.
Ändere ich das Intervall in [0;5] wird x1 ausgegeben. 

Ich hätte nun aber gerne, dass mir beide Nullstellen bei einem Durchgang ausgegeben werden. (Bsp: Bei einem Intervall von [-5;5])

Danke schonmal


----------



## njans (1. Jul 2011)

ich habe keien Ahnung, welches Verfahren du da benutzt und wie deine Implementation davon ist. 
ohne Code kann dir hier wohl keiner helfen ^^


----------



## ano0nym (1. Jul 2011)

```
public class Funktion {
    
    double a = 0;             
    double b = 5;      
    double m;                 
    

    double f(double x){
        return (x*x-2);
    }

   
    void intervallhalbierung(double a, double b)    {

      while (b - a > 1e-10) {         

            m = (a + b) / 2;          

            if (f(a)* f(m) < 0)       
                b = m;                
            else
                a = m;               
        }
    }
}
```


hilft dir / euch das weiter?


----------



## radical_edward (1. Jul 2011)

Kannst du das Programm ganz posten? will hier nicht antworten und dann läuft es nicht.


----------



## ano0nym (1. Jul 2011)

[Java]
public class Testklasse {

  public static void main(String[] args) {
    Funktion myfkt = new Funktion();
    myfkt.intervallhalbierung(myfkt.a,myfkt.b);       

    System.out.println("Die Nullstelle der Funktion lautet" + " " + myfkt.m);
  }
}
[/Java]


----------



## Plastagen (1. Jul 2011)

Dein Problem liegt ganz einfach daran, dass m nur die erste Nullstelle enthält, die die Funktion besitzt. 
Sobald du deine Genauigkeit erreicht hast, wird die while-Schleife verlassen. 
Deine Funktion testet also gar nicht mehr, ob es noch eine weitere Nullstelle gibt.


----------



## SlaterB (1. Jul 2011)

die Frage hat doch ziemlich wenig mit dem Code zu tun und das Problem ist auch nicht wann eine Schleife aufhört sondern grundsätzlich ein mathematisches

für quaadratische Funktionen könnte man die Ableitung bilden, dort die nur eine Nullstelle finden und dann exakt ein Intervall links und ein Intervall rechts davon bilden,
in jedem müsste ne Nullstelle sein,

wenn man allerdings ableiten kann, wozu dann überhaupt so umständlich Nullstellen suchen?
halbwegs erfolgreich könnte man auch mit dem Verfahren selber nach Minima/ Maxima suchen und dann eben links oder rechts davon weiter,
dann muss nur noch das Wissen vorausgesetzt werden dass es eine quadratische Funktion ist


----------



## ano0nym (1. Jul 2011)

danke euch 



Plastagen hat gesagt.:


> Deine Funktion testet also gar nicht mehr, ob es noch eine weitere Nullstelle gibt.



wie könnte ich das denn deiner meinung nach testen? 





SlaterB hat gesagt.:


> für quaadratische Funktionen könnte man die Ableitung bilden, dort die nur eine Nullstelle finden und dann exakt ein Intervall links und ein Intervall rechts davon bilden,
> in jedem müsste ne Nullstelle sein,



das klingt logisch  allerdings stellt sich bei mir die frage: wie bilde ich in java die ableitung einer funktion?


----------



## Marcinek (1. Jul 2011)

ano0nym hat gesagt.:


> Zitat: SlaterB
> 
> Beitrag anzeigen
> 
> ...



Sorry, aber das ist überhaupt nicht logisch. Mittels der 1. Ableitung kann man lokale Wendestellen / Maxima, Minima finden, aber gewiss keine Nullstellen.

Klar, wenn du eine Gefunden hast, dann kannst du wenigstens dein erstes Inervall geschickt setzten, aber eine Garantie hast du da nicht


----------



## Plastagen (2. Jul 2011)

ano0nym hat gesagt.:


> wie könnte ich das denn deiner meinung nach testen?


Beschäftige dich doch einfach mal mit Funktionen.^^ 
Eine Funktion kann maximal so viele Nullstellen haben, von welchen Grad sie ist, also eine Funktion 2.Grades, hat maximal 2 Nullstellen usw. 

Ich habe damals einen Nullstellenrechner in C++ implementiert, wie genau ich das dort gemacht hatte, weiß ich allerdings nicht mehr. Müsste ich den Quellcode irgendwo hervorkramen.^^

Wenn du eine gefunden hast kannst du auch per Polynomdivision, das Restpolynom bilden und dort wieder nach einer Nullstelle suchen. 
Du kannst das Newtonverfahren anwenden.

Kommt ganz drauf an, welche Funktionen dein Programm alles unterstützen soll. Nur die eine spezielle Funktion (x*x) oder auch andere?

Wie gesagt les dir mehr über Funktionen und Nullstellen durch.^^


----------



## SlaterB (2. Jul 2011)

Marcinek hat gesagt.:


> Sorry, aber das ist überhaupt nicht logisch. Mittels der 1. Ableitung kann man lokale Wendestellen / Maxima, Minima finden, aber gewiss keine Nullstellen.


äh ja, denn das ist ja genau das Ziel, die Wendestelle zu finden um exakt zwei Intervalle links und rechts zu definieren, um beide Nullstellen zu finden,
für Nullstellen dann die Intervallhalbierung,

wie gesagt brauch man auch nicht unbedingt die Ableitung, mit Intervallhalbierung kann man auch nach kleinsten/ größten Wert suchen

an sich ist das Ganze aber sowieso nicht gerade automatisch, an sich muss sowieso irgendjemand erstmal ein gutes Intervall wählen,
wenn die Nullstellen bei x1 = 1,41 und x2 = -1,41  sind, was soll man dann machen wenn das Intervall nur [0,1] ist?
oder wenn [0,5], dann ist die zweite auch nicht zu finden

bei [-3;3] hat man am Anfang zwei positive y-Werte, irgendwann in der Mitte einen negativen,
diese Information kann man auch direkt nutzen um zu erkennen, dass sowohl links als auch rechts weitergesucht werden kann


----------



## Logaff (3. Jul 2011)

also ich würde mir dazu erst mal folgendes überlegen: 
-die Anzahl der Nullstellen ist max. = dem Grad der Funktion
-denn Nullstellen Satz von Bonzano


----------



## KonradN (9. Mai 2022)

JavaExperte10.000 hat gesagt.:


> mit so h*rensöhnen wie dir kann hier niemand etwas anfangen...


Also erst einmal ist der Thread, auf den Du reagierst über 10 Jahre alt ...

So Beleidigungen gehören hier auch nicht ins Forum - daher bitte nicht wundern, wenn Deine Antworten und auch meine Antwort relativ schnell gelöscht wird. Und eine Beleidigung eines Users, der um 4 Jahre nicht mehr aktiv ist, dürfte auch kaum etwas bringen.

Und generell kann es sehr schwer sein, auf Fragen richtig zu antworten, da sehr oft Informationen fehlen. Und da kann man dann nur freundlich nachfragen. Und das hat njans da getan. Wieso Dir das so massiv aufstösst, dass Du dafür extra einen Account erstellst um dann nur eine Beleidigung los zu werden, bleibt zumindest mir unverständlich.

Wenn du ein Problem hast, dass in die gleiche Richtung geht wie das Problem des TE hier im Thread, dann erstelle doch einfach einmal ein eigenen Thread und formuliere da einfach Deine Frage / Problem. Und sei dabei bitte etwas verständnisvoller wenn andere versuchen in Ihrer Freizeit Dir zu helfen.


----------

