rekursive methode
-
ne ich habe eine formel, die eingabe habe ich jez außen vor gelassen, und innerhalb der Methode
f(a, b, c, x) berechnet er den Wert der Funktion f(x) = ax2 + bx + c
und das wollte ich dann hier reinschreibenpublic void f (double a, double b, double c, double x){ }
und die ableitung dazu soll hier
public void fDerived(double a,double b,double c,double x)
oder hab ich das jetzt auch falsch verstanden
-
keine ahnung ob du das richtig verstanden hast. Du hast die Aufgabe vor dir, nicht wir. Aber wieso willst du die verschachteln.
Und vorallem wieso rekursiv?
-
das ist aufgabenstellung...
xi+1 = xi - f(xi)/f'(xi)
Schreiben Sie ein Programm Newton welches Nullstellen fur Polynome 2. Grades berechnet.
Diese Klasse soll 2 Methoden f(double a,double b, double c, double
x) und fDerived(double a, double b, double c, double x) haben. Die Methode
f(a, b, c, x) berechnet den Wert der Funktion f(x) = ax2 + bx + c, die Methode
fDerived(a,b,c,x) den der Ableitung von f(x). Die rekursive Methode heit
newtonRecursive(double a, double b,double c,double x, int i) Beim Start des
Programms werden folgende Werte (in der Reihenfolge) abgefragt:.....ich könnte es auch einfacher schreiben, nur dann fehlen mir trotzdem punkte auch wenn es funktionieren sollte, wird es dann nicht ganz annerkannt. deshalb bin ich über die rekursive methode verwirrt, ob es egal sein könnte wie sie eingesetzt wird
-
nein ist es nicht... und die siehst auch nicht so schwer aus...
Deine Methode soll auch nicht ableiten können sondern lediglich einige werte werte berechnen, bei der, so wie ichs grade verstehe, sich der neue wert immer aus dem alten weniger dem der Methoden zusammen setzt. Beide methoden müssen NICHT rekursiv sein. Steht doch expliziet drin das die rekursive anders heißt
-
ein fehler soll behoben werden. und zwar
static double fs(double x) { return 2*a*x+b; }
dort erkennt er die variablen a und b nicht die ich zuvor hier eingegeben habe.
wie kann man von dort aus auf die eingabe drauf zugreifen?public class Newton { double eps; static double f(double x) { double a = Double.parseDouble(JOptionPane.showInputDialog("a")); double b = Double.parseDouble(JOptionPane.showInputDialog("b")); double c = Double.parseDouble(JOptionPane.showInputDialog("c")); return a*x*x+b*x+c; } static double fs(double x) { return 2*a*x+b; } Newton(double eps) { this.eps = eps; } double newton(double x) { System.out.println(x); if (Math.abs(f(x)) <= eps) return x; else return newton(x - f(x) / fs(x)); } public static void main(String[] args) { Newton n = new Newton(0.00001); System.out.println(n.newton(1.0)); } }
-
ohne übergabe garnicht--- mach aus ab und c halt klassenvariablen
-
ok das hat geklappt mit den klassenvariablen, aber er fragt immer wieder nach a, b und c beim JOptionPane, das sollte es aber nur einmal....
-
das liegt daran das die funktion f() rekursiv aufgerufen wird. Also bei jedem rekursionschritt...
Musst die eingabe vor der rekursion machen...
-
ok nach einigem rumprobieren hat es funktioniert, danke.
die ergebnisse sind auch korrekt.
allerdings weiß ich noch immer nicht was dies bedeutet:Newton n = new Newton(0.00001);
in:
public static void main(String[] args) { Newton n = new Newton(0.00001); System.out.println(n.newton(1.0)); }
-
Das heißt, es wird ein neues Objekt der Klasse Newton angelegt.
Die zahl die in den Klammern wird an den constructor übergeben.
Der consturctor ist die Methode die den gleichen Namen wie die Klasse trägt.
Und diese Methode wird immer ausgeführt wernn man ein Objekt einer Klasse erzeugt...