TweakPC

Zurück   Computer Hardware Forum - TweakPC > Games und Software > Programmiersprachen

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29.09.2012, 02:16   #1 (permalink)
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 18:00 Uhr)
Profi Overclocker ist offline   Mit Zitat antworten
Alt 29.09.2012, 17:48   #2 (permalink)
The real MacGyver
 
Benutzerbild von Fakk-asrock
 

Registriert seit: 10.02.2005
Beiträge: 5.760

Fakk-asrock ist ein wunderbarer AnblickFakk-asrock ist ein wunderbarer AnblickFakk-asrock ist ein wunderbarer AnblickFakk-asrock ist ein wunderbarer AnblickFakk-asrock ist ein wunderbarer AnblickFakk-asrock ist ein wunderbarer AnblickFakk-asrock ist ein wunderbarer AnblickFakk-asrock ist ein wunderbarer Anblick

Standard AW: [JAVA] Nullstelle(n) finden

ehm, bringt dich das Newtonverfahren vllt weiter? weil du ja Zahlen nur auf eine Genauigkeit suchen kannst, ist villeichte eine Annäherung besser?

Newton-Verfahren
Fakk-asrock ist offline   Mit Zitat antworten
Für diesen Beitrag bedankt sich:
Profi Overclocker (29.09.2012)
Alt 29.09.2012, 18:02   #3 (permalink)
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 AW: [JAVA] Nullstelle(n) finden

Hehe, danke ^^
Das hab ich mir bereits mal durchgelesen, hab jetzt meins so hinbekommen wie es laufen soll

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;
hier lag der Fehler
um es kurz zu halten:
anstatt wie vorher (Math.pow(a,aa)*x) (als kleines Beispiel) muss es aber (Math.pow(x,aa)*a) lauten und somit lief es dann auch
Sp spät läuft nunmal nicht mehr alles rund xD
Profi Overclocker ist offline   Mit Zitat antworten
Antwort

Stichworte
java, nullstellen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Performanceengpass finden matse71 Overclocking - Übertakten 12 16.04.2007 13:12
Anwendung (JAVA) als Service starten Pirke Windows & Programme 10 17.07.2006 21:16
Person finden sofl Off Topic 3 03.12.2005 19:39
JAVA applet Problem HyperY2K Programmiersprachen 2 25.04.2005 06:08
Wo bekomme ich JAVA Virtual Machine Firefighter Windows & Programme 3 22.11.2002 13:25


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:48 Uhr.






Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.
Impressum, Datenschutz Copyright © 1999-2015 TweakPC, Alle Rechte vorbehalten, all rights reserved