WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   [Java] Gleichung lösen (http://www.wcm.at/forum/showthread.php?t=114147)

moorhahn 02.11.2003 12:29

[Java] Gleichung lösen
 
kennt wer eine klasse um eine gleichung zu lösen.
nicht jetzt aus zb x^2+3x-4=0 das x rausrechnen, sondern man gibt einen wert fürs x vor, welcher dann für x eingesetzt wird, woraus dann ein wert erechnet wird.
in einem string wird als zb "x^3-(4x+3x^4)^2" geschrieben, dann einen wert, zb 5, für x einsetzen, und man bekommt das ergebnis.
es wär um einen graphen einer funktion zu zeichnen.

jak 02.11.2003 15:50

Ich würde das ganze selber schreiben:
Code:

privat static float calculateEquation(float x, int a, int b, int c, int d){
return (a*Math.pow(x,3)+b*Math.pow(x,2)+c*x+d);}

Die Funktion wird für gleichungen höherer Ordnung einfach überladen.

Wenn du unbedingt einen String als Eingabe willst wird es mühsamer.

Jak

<edit>
P.S.: Vielleicht hilft dir auch der Quelltext des Applets auf dieser Seite weiter:http://home.arcor.de/rolf.mossbach/J...n.Applet1.html
</edit>

moorhahn 02.11.2003 16:31

hab schon versucht das selber zu schreiben.
es handelt sich um ein programm, bei dem man in ein textfeld funktionen beliebiger ordnung eingeben kann. die funktionen kann man dann in einer liste verwalten, und den graphen dazu in einem bestimmten intervall zeichnen lassen.

aber eine funktion in einem string durchzuparsen, mit allen möglichkeiten einbezogen, das is ned grad einfach.
die funkton könnte ja "x^3+4-((x^4+3)^3-x^2)/6" heißen. wurzeln müsste man auch miteinbeziehen.

Tarjan 02.11.2003 19:02

In einer eigenen Klasse könntest du auch gleich die Parsfunktion verpacken ;).

moorhahn 02.11.2003 22:49

jo, hab schon eine eigene klasse geschrieben, sozusagen eine utility-klasse, ganz banal mal "Equation" genannt. aber das parsen so einer funktion ist echt nicht einfach.
gibts vielleicht ein paar tipps, wie man sowas lösen könnte?
man muss ja der klasse quasi das rechnen beibringen, mit allen punkt-vor-strich und klammer-regeln.
ziel wäre es, alle operationen bis auf addition und subtraktion zu lösen, so dass dann ein string der form "9.87-234.5+123-0.815" überbleibt. um die dann auszurechnen, müsste man die zahlen inklusive vorzeichen aufteilen, und addieren. aber wie kommt man von einer komplexen funktion beliebiger ordnung, mit klammern, wurzeln usw. auf eine form wie obige?

jak 03.11.2003 16:16

Wurzeln kann man auf jeden Fall als Bruch-Hochzahlen schreiben.
(ich glaube das das Math.pow auch kapiert).
Das parsen des Strings ist aber auf jeden Fall kompliziert.
Ich würde das ganze zuerst einmal nach fallenden Potenzen von x sortieren, danach wird der String bei jedem Plus (minus wird dafor in +- umgewandelt) aufgeteilt (da ist dann aber das Problem mit den Klammern. Vielleicht kann man die ja vorher auflösen???).


Jak

heli2sky 03.11.2003 18:40

ähm... vielleicht seh ich das jetzt viel zu einfach... vielleicht denkt ihr aber auch zu kompliziert...

wenn ich zb eine glchg hab:
PHP-Code:

(x^(5-2)-7)/6^(1/2)+2^

da kann ich doch einfach die zeichen ^ usw ersetzen lassen, sonst aber alles gleich lassen, dann hab ich keine probleme mit den rechenregeln . vor - usw, weil die ja eh gleich bleiben...

das würde oben zb rauskommen:
PHP-Code:

(math.pow(x,(5-2))-7)/math.pow(6,(1/2))+math.pow(2,4

ob ich jetzt alles genau richtig hab weiß ich nicht, aber vom denkansatz müsste das doch stimmen, oder nicht??

edit: mir fällt gerade ein, wenn ich verschachtelte klammern hab, ist das doch nicht so einfach... naja vielleicht hilfts ja trotzdem irgendwie weiter :lol: :rolleyes:
man müsste das vielleicht so machen, dass man die ausdrücke immer in der form (x)^(y) schreibt und die klammern zählt, also wenn es (((x)))^(y) ist, dass er das nicht als (x)))^(y) nimmt...

oh gott... ich hoffe das ist jetzt nicht zu wirr geschrieben, aber ich hab leider wichtigeres zu tun - MATHE *heul*


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag