![]() |
|
|
|||||||
| Allgemeine Java-Themen Allgemeine Themen, die nicht in andere Fachforen und nicht zu den Java Basics passen |
|
|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
| #1 (permalink) | |||||
|
Stammbenutzer
Kilobyte
Registriert seit: 12.11.2008
Fachbeiträge: 127
Abgegebene Danke: 8
Erhielt 0 Danke für 0 Beiträge
|
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... Geändert von L-ectron-X (01.06.2010 um 13:02 Uhr) Grund: verschoben, Titel angepasst |
||||
|
|
|
| #2 (permalink) | |||
|
Stammbenutzer
Team RPGenesis
Viertel Megabyte Registriert seit: 05.12.2009
Fachbeiträge: 304
Abgegebene Danke: 12
Erhielt 23 Danke für 23 Beiträge
|
Ich weiß nicht, kann auch sein das das dieser Rekursions zeug is, kenn mich damit nicht aus, aber mir kommen diese:
komisch vor, du returns nochmal den Funktionsaufruf - also wie gesagt, kann auch sein das du da irgendwas mit Rekursion machst, ansonsten ..
__________________
RPGenesis - Upcoming 2D RPG engine & editor |
||
|
|
|
| #3 (permalink) | |
|
Stammbenutzer
Kilobyte
Themenstarter
Registriert seit: 12.11.2008
Fachbeiträge: 127
Abgegebene Danke: 8
Erhielt 0 Danke für 0 Beiträge
|
Der Code von oben ist funktionsfähig ,er gibt mir eine richtige Nullstelle aus... ich brauche aber mehr, eigentlich alle Nullstellen der Funktionen.
Mit unterschiedlichen Intervallen funktioniert das leider nicht ! Geändert von Screen (31.05.2010 um 15:52 Uhr) |
|
|
|
| #4 (permalink) | |
|
Neuer Benutzer
byte
Registriert seit: 20.05.2010
Fachbeiträge: 9
Abgegebene Danke: 0
Erhielt 3 Danke für 3 Beiträge
|
Dein Problem ist, dass du davon ausgehst, dass auf dem Interval eine Nullstelle vorhanden ist. Ist keine vorhanden rufst du deine Methode immer weiter auf bis der Speicher nichtmehr ausreicht. Hier fehlt eine Abbruchbedingung.
|
|
|
|
| #5 (permalink) | |||||||||||||||||||
|
Stammbenutzer
Kilobyte
Themenstarter
Registriert seit: 12.11.2008
Fachbeiträge: 127
Abgegebene Danke: 8
Erhielt 0 Danke für 0 Beiträge
|
Wie könnte diese aussehen? So in der Art If( ErgebnisvonNullstellensuche== keine Zahl) { break ; } ..aber wie genau? Geändert von Screen (31.05.2010 um 16:01 Uhr) |
||||||||||||||||||
|
|
|
||||||||||||||||||
| #8 (permalink) | |
|
Neuer Benutzer
byte
Registriert seit: 20.05.2010
Fachbeiträge: 9
Abgegebene Danke: 0
Erhielt 3 Danke für 3 Beiträge
|
Naja spätestens wenn links und rechts gleich sind wird man nichts mehr finden
![]() Da du hier aber mit double werten rechnest müsstest du hier auch eine Genauigkeit mit einbeziehen. Allerdings müsste auch der return wert ein anderer sein, denn es gibt 2 Möglichkeiten: Nullstelle oder nichts. Ich würde hier also ein Double Objekt zurückgeben. |
|
|
|
| Danke sagt: |
Screen (31.05.2010)
|
| #10 (permalink) | |
|
Benutzer
int
Registriert seit: 04.08.2008
Fachbeiträge: 40
Abgegebene Danke: 1
Erhielt 1 Danke für 1 Beitrag
|
Du könntest einfach behaupten, dass wenn er 1000mal das Intervall halbiert hat und immer noch nicht in deinem Genauigkeitsbereich ist es keine Nullstelle gibt.
Jedoch ist das ein bisschen schwer zu Implementieren. Ein einfacher zähler, wie oft die Methode schon aufgerufen wurde würde vielleicht sogar auch Funktionieren, aber um es schön zu machen müsste man der Methode glaube ich einen Zähler als Parameter mitgeben, damit jede Verzweigung ihren eigenen Zähler bekommt. edit: Es sollte in dem Forum einen Knopf "Dummes Kommentar sofort unwiederruflich löschen und alle User die es gelesen haben aufspüren und zum Schweigen bringen lassen" geben. Denn natürlich hat sich dann nach diesen 1000 durchgängen der linke und der rechte Wert angenähert. Ich glaube ich sollte einfach nur noch Fern gucken wenn ich krank bin
Geändert von ne0n2005 (31.05.2010 um 16:14 Uhr) |
|
|
|
| #11 (permalink) | |
|
Benutzer
int
Registriert seit: 04.08.2008
Fachbeiträge: 40
Abgegebene Danke: 1
Erhielt 1 Danke für 1 Beitrag
|
Mein Vorhaben den Link zur Rekursion von google zu posten sollte auch bloß der reinen Belustigung dienen, denn früher kam dann immer eine Endlosschleife "Meinten sie: Rekursion". Aber irgendwie gibt es das nun leider nichtmehr.
|
|
|
|
| #12 (permalink) | |
|
Stammbenutzer
Kilobyte
Themenstarter
Registriert seit: 12.11.2008
Fachbeiträge: 127
Abgegebene Danke: 8
Erhielt 0 Danke für 0 Beiträge
|
Also Ich kann den Fehler vermeiden ,wenn ich die Bedingung:
die Nullstellensuche -Methode einbaue. Ich kann aber keine 0 ausgeben,wenn im Intervall keine Nullstelle ist Trotzdem habe ich jetzt nur eine Nullstelle :< Geändert von Screen (31.05.2010 um 16:18 Uhr) |
|
|
|
| #14 (permalink) | |
|
Benutzer
int
Registriert seit: 04.08.2008
Fachbeiträge: 40
Abgegebene Danke: 1
Erhielt 1 Danke für 1 Beitrag
|
Die Methode hat doch auch nur einen Rückgabewert, ich weiß jetzt gerade nicht mehr genau, aber müsste das dann nicht die zuletzt gefundene Nullstelle sein ? Also wenn der Stack dann irgendwann runterbricht und die Ergebnisse zurückliefert.
|
|
|
|
| #15 (permalink) | |
|
Stammbenutzer
Kilobyte
Themenstarter
Registriert seit: 12.11.2008
Fachbeiträge: 127
Abgegebene Danke: 8
Erhielt 0 Danke für 0 Beiträge
|
Ne klar...
Es stehen aber immer noch die Fragen offen: 1. Wie soll die Abbruchbedingung aussehen? bzw. der returnwert 2. Wie frage ich alle anderen Nullstellen des selben Intervalls ab? |
|
|
|
| #16 (permalink) | |
|
Stammbenutzer
Megabyte
Registriert seit: 21.06.2008
Fachbeiträge: 2.362
Abgegebene Danke: 4
Erhielt 366 Danke für 350 Beiträge
|
Nimm am besten als Rückgabewert
Double.MAX_VALUE; oder Double.MIN_VALUE; (größte oder kleinster double Wert) da an diesen Stellen keinen Nullstelle liegen kann.
|
|
|
|
| #17 (permalink) | |||
|
Benutzer
int
Registriert seit: 04.08.2008
Fachbeiträge: 40
Abgegebene Danke: 1
Erhielt 1 Danke für 1 Beitrag
|
ok vielleicht den Code hier oben garnicht so ernst nehmen. Beim schreiben ist mir glaub ich schon etwas unschönes aufgefallen: Undzwar interessierst du dich nur für die rechte Seite, und testest diese dann mit deinem Vorzeichenwechsel-Trick. Gibt es nun aber rechts vom Mittelpunkt 2 Nullstellen, so dass das Vorzeichen von f(mitte) und f(rechts) das gleiche ist, so suchst du links nach einer Nullstelle. Sollte es links keine geben, findest du garkeine. Ich glaube es wäre fast sinnvoll die Reukstion wie folgt aufzubauen: Wenn keine Nullstelle in der Mitte vorliegt und rechts nicht gleich links sind, dann rufe dich selbst noch einmal mit links und mitte UND mitte und rechts auf. Ich weiß ja nicht aus welchem bereich du anfangs mit rechts und links kommst, jedoch kann es glaube ich sein, dass es nicht immer fehlerfrei funktioniert zu schauen ob sich zwischen rechts und der mitte das vorzeichen gedreht hat. Geändert von ne0n2005 (31.05.2010 um 16:52 Uhr) |
||
|
|
|
| #18 (permalink) | |||
|
Stammbenutzer
Kilobyte
Themenstarter
Registriert seit: 12.11.2008
Fachbeiträge: 127
Abgegebene Danke: 8
Erhielt 0 Danke für 0 Beiträge
|
Hallo
Ich habe das Problem teilweise gelöst. Die Methode f gibt einen doublewert ,also die lösung einer funktion zurück. Wie könnte ich dieser Methode aber eine Funktion übergeben? Ich habs mit dme Douple-Parse versucht, das geht aber nicht. Wie kann ich z.B. 1*Math.pow(x, 4)+2 diese Funktion dieser MEthode übergeben,damit sie das Ergebnis zurückliefert? z.b. ich gebe mit der Scannermethode eine Gleichung ein, es ist aber ein String. Darum kann ich die Funktion der Methode f nicht übergeben,damit sie das Ergebnis mit dme x zurücklifert.
Wie mache ich das? return "x*x-2"; geht nicht ! return Double.parseDouble("x*x-2") geht nicht! Wie gebe ich nun der Methode eine Funktion? |
||
|
|
|
| #20 (permalink) | |
|
Benutzer
int
Registriert seit: 04.08.2008
Fachbeiträge: 40
Abgegebene Danke: 1
Erhielt 1 Danke für 1 Beitrag
|
Hey, fuktioniert die rekursive Suche der Nullstellen denn jetzt, weil ich war jetzt der Meinung, dass sie z.B. für f(x) = x²-1 nicht gehen sollte, wenn du die Suche mit (-500,200) aufrufst.
|
|
|
|
|
| Themen-Optionen | Thema durchsuchen |
| Ansicht | |
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Brauche ganz dringed Hilfe | LittleTina | Java Basics - Anfänger-Themen | 2 | 13.02.2007 11:54 |
| Brauche Hilfe bei Begriffserklärung | thadre | Java Basics - Anfänger-Themen | 1 | 05.02.2007 21:52 |
| BRAUCHE DRINGEND HILFE IST WIRKLICH WICHTIG | GAST | Jobbörse | 16 | 12.01.2007 13:25 |
| Brauche Hilfe, Rekussion umkehr Aufgabe. | abi | Java Basics - Anfänger-Themen | 1 | 26.10.2006 14:11 |
| Uni-Aufgabe - brauche Hilfe | apfelkuchen | Java Basics - Anfänger-Themen | 15 | 19.03.2005 13:22 |
| Lesezeichen |
|
|