Einzelnen Beitrag anzeigen
Alt 29.09.2012, 03:16   #1 (permalink)
Profi Overclocker
Mega Hyperaktiver Nerd
 
Benutzerbild von Profi Overclocker
 

Registriert seit: 12.12.2009
Beiträge: 7.616

Profi Overclocker ist ein wunderbarer AnblickProfi Overclocker ist ein wunderbarer AnblickProfi Overclocker ist ein wunderbarer AnblickProfi Overclocker ist ein wunderbarer AnblickProfi Overclocker ist ein wunderbarer AnblickProfi Overclocker ist ein wunderbarer Anblick

Standard [JAVA] Nullstelle(n) finden

Moin,
ich hoffe mal, ich finde hier ein paar Java fähigere als ich es bin ^^

Das zulösende Problem:
Es soll ein kleine Programm entstehen, welches von einer Ableitung (bis Grad eine Nullstelle bestimmt, dabei ist es unwichtig, wo diese liegt.
Mein Ansatz war es, dass man den exponent bzw. den Faktor eines Gliedes der Ableitung in Felder einträgt, hier liegt aber nicht mein aktuelles Problem, dass klappt soweit wie es soll.
Viel mehr ist es im Nachhinein eine Nullstelle zu finden, bzw. funktioniert dies nicht.
Wofür das ganze? Die Aufgabe wurde als Zusatz zwar im Mathe LK gestellt, weil wir des öfteren mal eine Nullstelle "erraten" müssen, was aber bei einigen Funktionen alles andere als gemütlich ist. (Hornerchema etc.)
Nun ist soweit bekannt, dass Nullstellen der Ableitung sich erraten lassen, indem man Teiler der Konstante verwendet. Dabei bilden der Positive als auch der Negative Betrag der Konstante die Spanne in welcher die Nullstellen liegen (deren X-Koordinate).

Um das ganze zu beschleunigen, soll eine Art binärsuche Programmiert werden.
Nach verteilung der Variablen und der gleichen, bekomme ich folgende Zeile raus, welche zum berechnen des Wertes für f'(x) geeignet ist. (In der GUI werden die Werte der Ableitung bereits schon eingetragen).

diese Laute wie folgt:
Zitat:
calc = (Math.pow(a,aa)*x) + (Math.pow(b,bb)*x) + (Math.pow(c,cc)*x) + (Math.pow(d,dd)*x) + (Math.pow(e,ee)*x) + (Math.pow(f,ff)*x) + (Math.pow(g,gg)*x) + (Math.pow(h,hh)*x) + i;
calc bildet dabei meine Variable zum speichern des Ergebnisses. i bildet die Konstante.

Nun zum eigentlichen Problem:
Ausgehen von einem Wert von 4000 für i ergibt sich die Spanne von -4000 bis +4000 für i (soll im späteren Verlauf eingegrenzt werden können, wenn zum Beispiel ein Wort >0 gesucht wird).
Folglich war mein Ansatz:
n = -4000
z = 4000
zuerst wurden diese Werte betrachtet, falls mit einem dieser sich eine Nullstelle ergab, war das Problem schon gelöst.
Danach began die "Suche".
Dazu nahm ich mit den Mittelwert beider Zahlen (0) und setzte ein. Je nach konstante war das Ergebnis enstprechend positiv oder negativ.

Nun wurde zuerst abgefragt, ob dieser Wert 0 entsprach (anfags natürlich nicht, tolleranz von 0.0001 war gegeben sowohl nach oben als auch nach unten). Sollte diese Bedingung im späteren Verlauf stimmen, wurde die abbruchbedingung der "While-Schleife" auf true gesetzt, die errechnete Koordinate in eine ausgabe Variable gespiechert etc.

Die nächste zu prüfende Bedingung war es, ob das Ergebnis durch einsetzen von 0 ober oder unterhalb von 0 lag.

lag es unterhalb (also zu niedrig) wurde n auf den zuvor berechneten Mittelwert gesetzt, andersherum lag das Ergebnis oberhalb wurde z auf den Mittelwert gesetzt. Soweit die Theorie. Nun sollte sie der Wert für calc immer weiter der 0 annähern, bis dieser im Tollerenzbereich lag.
Mein Problem jedoch war es, nie einen realistichen Wert zu erhalten. Der Wert lies sich beeinflussen etc. Ergebnisse stimmten leider nicht. (Einfach Funktionen und mit bsp. Geogebra gegengeprüft).

Beispielsweise f'(x)=2x^2-2, die Nullstellen wären ja dementsprechend 1 bzw. -1. Mein Ergebnis lag deutlich unterhalb bei 0.5.

Ich hoffe hier kann mir wer helfen
Wenn noch infos gebraucht werden, gerne melden^^

btw. das verwendete Prog. nennt sich "Java-Editor".

Main:
ASUS ROG MAXIMUS X FORMULA|Intel Core i9 9900k @ 5 GHz|DUAL AMD RX VEGA 64 @WATER
|Samsung 950 Pro NVMe M2 256 GB|BeQuiet DarkBase 900 Rev. 2|Corsair AX 1600i

Server:
ASUS Z6PE-D18|Intel Xeon X5670|Intel Xeon X5670|96GB RAM Hynix DDR3 1333 RDIMM ECC|HP P410 1GB FBWC|4x 2TB Curcial MX500


Geändert von Profi Overclocker (29.09.2012 um 19:00 Uhr)
Profi Overclocker ist offline   Mit Zitat antworten