Hallo
Ich benutze eine Klasse um Nullstellen zu suchen. Ein Intervall wird halbiert ,bis Nullstellen gefunden werden.
Das Problem ist hier,dass ich nur eine Nullstelle finden kann, auch wenn die Funktion mehrere hat.
Mit verschiedenen Intervallen habe ich das ausprobiert, sollte aber im Intervall keine Nulstelle liegen bekomme ich eine Fehlermeldung: java.lang.StackOverflowError
Könnte mir jemand verraten, wie ich mehrere Nullstellen abfragen kann? Oder wie ich diesen Fehler vermeiden kann,wenn ich Intervalle ohne Nullstellen abfrage?
Bei z.B n.sucheNullstelle(-100,-90); gibt es den Fehler von java.lang.StackOverflowError
Ich kann aber nicht wissen, ob zwischen -100 und -90 einer ist oder nicht..sollte keiner vorhandne sein, stürzt das Prog ab.
Help pls...
Ich benutze eine Klasse um Nullstellen zu suchen. Ein Intervall wird halbiert ,bis Nullstellen gefunden werden.
Das Problem ist hier,dass ich nur eine Nullstelle finden kann, auch wenn die Funktion mehrere hat.
Mit verschiedenen Intervallen habe ich das ausprobiert, sollte aber im Intervall keine Nulstelle liegen bekomme ich eine Fehlermeldung: java.lang.StackOverflowError
Könnte mir jemand verraten, wie ich mehrere Nullstellen abfragen kann? Oder wie ich diesen Fehler vermeiden kann,wenn ich Intervalle ohne Nullstellen abfrage?
Java:
// Die Nulstellensuche
public class Nullstellensuche {
/**
* Die (stetige) Funktion für die Nullstellen gesucht werden sollen.
*/
private Funktion funktion;
/**
* Genauigkeit, mit der Nullstellen von <code>funktion</code> berechnet werden
* sollen.
*/
private double genauigkeit = 0.000001;
/**
* Erzeugt eine neue Nullstellensuche mit der gegeben
* stetige reelwertigen <code>funktion</code>. Die Nullstelle
* kann nährungsweise bis zur angegeben <code>genauigkeit</code>
* berechnet werden.
*
* @param funktion eine <code>stetige</code> Funktion
*/
public Nullstellensuche(Funktion funktion, double genauigkeit) {
this.funktion = funktion;
this.genauigkeit = genauigkeit;
}
/**
* Sucht eine Nullstelle in dem gegeben Intervall [links, rechts] und
* findet sie auch, wenn die Vorzeichen von f(links) und f(rechts) verschieden sind,
* dass heisst, wenn f(links) * f(rechts) < 0 sind.
*/
public double sucheNullstelle(double links, double rechts) {
double mitte = (links + rechts) / 2.0;
if ( Math.abs( funktion.f(mitte) ) < genauigkeit ) {
return mitte;
} else if ( funktion.f(mitte) * funktion.f(rechts) < 0 ) {
return sucheNullstelle(mitte, rechts);
} else {
// man überzeuge sich hier, dass f(mitte) * f(links) < 0 gelten muss!
return sucheNullstelle(links, mitte);
}
}
}
Java:
//Die Funktion
public double f(double x) {
return 2*Math.pow(x, 4)-1;
}
Java:
// Die Abfrage der Nullstellen
double r= n.sucheNullstelle(-100,0);
b= Math.round(r*100)/100.0);
System.out.println(b);
double r2= n.sucheNullstelle(0,100);
b2= Math.round(r2*100)/100.0);
System.out.println(b2);
Bei z.B n.sucheNullstelle(-100,-90); gibt es den Fehler von java.lang.StackOverflowError
Ich kann aber nicht wissen, ob zwischen -100 und -90 einer ist oder nicht..sollte keiner vorhandne sein, stürzt das Prog ab.
Help pls...
Zuletzt bearbeitet von einem Moderator: