Hallo ihrs,
ich muss eine Nullstelle berechnen und hab folgenden Code. Meine Frage ist, ob ich die Funktion -x^3+1 überall dahin schreiben muss wo ich eben "Funktion" geschrieben habe.
Code:
public class MyFunction {
private Funktion funktion;
private double genauigkeit=0.00001;
public Nullstellensuche(Funktion funktion, double genauigkeit) {
this.funktion = funktion;
this.genauigkeit = genauigkeit;
}
/**
* Berechnet die Nullstelle der Funktion f(x) = -x^3+1 durch binaere Suche.
*
* @param unten
* untere Grenze.
* @param oben
* obere Grenze.
*
* @return Nullstelle der Funktion f(x) = -x^3+1.
*/
protected int berechneNullstelle(int unten, int oben) {
// TODO
int mitte=(unten+oben)/2;
if ( Math.abs( funktion.f(mitte) ) < genauigkeit ) {
return mitte;
} else
if ( funktion.f(mitte) * funktion.f(oben) < 0 ) {
return berechneNullstelle(mitte, oben);
} else{
// man überzeuge sich hier, dass f(mitte) * f(links) < 0 gelten muss!
return berechneNullstelle(unten, mitte);
}
return Integer.MIN_VALUE;
}
// Main-Methode zum Testen.
public static void main(String[] args) {
MyFunction analysis = new MyFunction();
System.out.println("Nullstelle bei: x = "
+ analysis.berechneNullstelle(-1000, 1000));
}
}
der Klasse wird doch eine anscheinend beliebige Funktion übergeben,
dann wäre es falsch, in der Doku eine bestimmte Funktion anzugeben,
die am Ende gar nicht enthalten sein muss
Klassennamen Funktion + MyFunction deuten aber auf ein größeres Problem hin, wer soll da durchsehen?
deine main-Methode ruft übrigens Nullstellensuche() nicht auf, dann ist ja gar keine Funktion gesetzt?
Nustellensuche() sieht mir eher wie ein Kontruktor aus. Der Konstruktor muss immer so heißen wie die Klasse !
Überall dort wo du funktion hingeschrieben hast, greifst du auf eine Objektvariable des Typ Funktion zu. Funktion müsstes du als Klasse definiert haben. Schau mal nach ob du die findest und poste sie dann hier .
also ich hab jetzt mal den konstruktor rausgenommen und ihr jetzt mal der geänderte code und mein frage ist nur, muss ich in meinen code nicht irgendwo meine funktion (-x^3+1) eingeben
Code:
public class MyFunction {
private double genauigkeit=0.00001;
/**
* Berechnet die Nullstelle der Funktion f(x) = -x^3+1 durch binaere Suche.
*
* @param unten
* untere Grenze.
* @param oben
* obere Grenze.
*
* @return Nullstelle der Funktion f(x) = -x^3+1.
*/
protected int berechneNullstelle(int unten, int oben) {
// TODO
int mitte=(unten+oben)/2;
if ( Math.abs( funktion.f(mitte) ) < genauigkeit ) {
return mitte;
} else
if ( funktion.f(mitte) * funktion.f(oben) < 0 ) {
return berechneNullstelle(mitte, oben);
} else{
// man überzeuge sich hier, dass f(mitte) * f(links) < 0 gelten muss!
return berechneNullstelle(unten, mitte);
}
//return Integer.MIN_VALUE;
}
// Main-Methode zum Testen.
public static void main(String[] args) {
MyFunction analysis = new MyFunction();
System.out.println("Nullstelle bei: x = "
+ analysis.berechneNullstelle(-1000, 1000));
}
}
ja, musst du, und zwar muss das funktion-Objekt definiert sein, auf welches in berechneNullstelle zugriffen wird,
da war die alte Version schon lauffähiger
bevor du dich mit höheren Dingen wie Nullstellen beschäftigst, musst du doch erstmal eine Funktion haben?!
lange Zeit gab es bei dir eine Klasse Funktion, nun ist sie weg, da weiß niemand, was man davon halten soll,
im einfachsten Falle wäre die Funktion z.B.
public double f(double x) {
return -x*x*x+1;
}
nun schreibe doch erstmal ein funktionierendes Programm, welches den korrekten Funktionswert für ein paar x-Werte ausgibt,
dann hast du eine Grundlage..
Ich kann mich hier nur selbst zitieren. Ist diese Klasse irgenwie verschwunden oder hast du sie aufgegessen ? Wenn das nicht zutreffen sollte, dann poste das Ding doch einfach mal hier.
So ich hab nur das vorgegeben und soll da irgendwie die nullstelle berechnen, wie ihr ja seht hab ich kein plan wie ich das machen soll und das ganz soll ich iterativ und mit einer binär suche lösen
Code:
public class MyFunction {
/**
* Berechnet die Nullstelle der Funktion f(x) = -x^3+1 durch binaere Suche.
*
* @param unten
* untere Grenze.
* @param oben
* obere Grenze.
*
* @return Nullstelle der Funktion f(x) = -x^3+1.
*/
protected int berechneNullstelle(int unten, int oben) {
// TODO
return Integer.MIN_VALUE;
}
// Main-Methode zum Testen.
public static void main(String[] args) {
MyFunction analysis = new MyFunction();
System.out.println("Nullstelle bei: x = "
+ analysis.berechneNullstelle(-1000, 1000));
}
}
bevor du dich mit höheren Dingen wie Nullstellen beschäftigst, musst du doch erstmal eine Funktion haben?!
lange Zeit gab es bei dir eine Klasse Funktion, nun ist sie weg, da weiß niemand, was man davon halten soll,
im einfachsten Falle wäre die Funktion z.B.
public double f(double x) {
return -x*x*x+1;
}
nun schreibe doch erstmal ein funktionierendes Programm, welches den korrekten Funktionswert für ein paar x-Werte ausgibt,
dann hast du eine Grundlage..
du könnest nun ja sagen, dass du gar zu gar keine Ahnung hast,
aber zumindest solltest du deine Aufgabe und das Wort 'Nullstelle' solange komplett vergessen