Mathematische Ableitung bilden (Inkl. Kurvendiskussion)

MJannek

Mitglied
Ich möchte gerne aus eine Textfeld, eine mathematische Fkt. auslesen und diese dann mit einer eigenen Methode (keine von Java vorhandene) ableiten (ggf. auch zeichnen) und eine Kurvendiskussion machen. Wie aufwändig ist das?

Viele Grüße
 

httpdigest

Top Contributor
Meine Antwort auch. Es gibt hier keinen genauen Aufwand. Das kommt auf ganz viele Faktoren an.
Z.B:
Mal ganz zu schweigen von dem Parsen der Funktion und dem Bauen eines Syntaxbaumes: Für eine Kurvendiskussion musst du ja auch Nullstellen von Funktionen berechnen können.
Willst du das symbolisch exakt tun oder nur numerisch annähern?
Für symbolisch/exakt erhöht sich der Schwierigkeitsgrad gleich mal exorbitant, da du dann quasi ein Computeralgebrasystem baust und sämtliche Lösungsmethoden kennen musst, um etwa Polynome dritten, vierten und fünften Gerades lösen zu können.
Dann musst du überhaupt erstmal in der Lage sein, die Form der Gleichung zu erkennen. Was ist, wenn ich dir die Funktion f(x) = e^(2*x^(-0.5))/sqrt(1/x²) gebe?
 

httpdigest

Top Contributor
Zuerst einmal solltest du ganz detailliert und ganz genau und exakt beschreiben, welche Features dein Programm haben soll und insbesondere, welche Einschränkungen z.B. bei den unterstützten Klassen von Funktionen (z.B. nur Polynome) es geben soll und ob der Nutzer hier auch geführt werden können und eingeschränkt werden soll in seiner Eingabe. Wenn er (x+1)*x eingibt, ist das ja quasi auch ein Polynom, nur noch nicht in einer "kanonischen" Form.
Also: Setz dich erstmal hin und versuche, ganz genau zu beschreiben, was das Programm können soll und was die kleinste Funktionsmenge und die größte Einschränkung ist, um daraus erstmal ein erstes funktionsfähiges Programm zu machen (auch "MVP" oder "Minimum Viable Product" genannt). Je weniger Features und je mehr Einschränkungen, desto schneller/unaufwändiger. Und je mehr Features und je mehr Allgemeinheit/Freiheiten, desto länger dauert's halt auch.
Einfach zu sagen "so etwas wollte ich machen" reicht natürlich bei weitem nicht aus. Hier braucht es erstmal einige Wochen an Detailplanung.
 

White_Fox

Top Contributor
Wie aufwändig ist das?
Wenn du hier schon so fragen mußt, ist die Antwort recht einfach: Wahrscheinlich zu aufwändig für dich.
Ich meine das nicht böse, aber das was du da vorhast, wird sehr schnell sehr kompliziert.

Es ist nicht unmöglich, es ist ja schon gemacht worden (z.B. Matheguru oder Wolfram Alpha).

Aber andererseits: Je größer die Aufgabe, desto höher kann man wachsen. Also, warum nicht? Helfen werden wir bestimmt trotzdem, wenn du Fragen hast. Ich möchte aber den Rat von @httpdigest nochmal bekräftigen: Setz dich hin, und überlege dir genau was du willst, überlege lange und gut. Schlafe auch ein paar Nächte drüber.

Überlege dir ein Konzept, was für Klassen bräuchtest du, was müssen die können. Schau dir vorhandene Konzepte an, wie die das gemacht haben. Parser sind eine relativ alte Technik, jeder Compiler parst den Quellcode erstmal, es gibt Parser für zig Dateiformate wie XML, CSV, JSON und noch zig andere. Vielleicht magst du dir da was abschauen. Es gibt auch einen Parser für mathematische Ausdrücke, mXparser. Deren Möglichkeiten kannst dir auch mal ansehen.

Das Übel mit dem Parser könnte man auch ganz elegant umgehen, wenn man den Benutzer über eine GUI beschränkt. Du kannst dem Benutzer einen Formelklicker vorsetzen, wo er sich seine Funktion selber zusammenklicken kann. Wird der Benutzer mehr mögen, andererseits wird dann vieles einfacher. Du mußt nur noch nach Zahlen und Parametern und allenfalls noch nach den Grundrechenarten parsen, kannst aber häufige Ausdrücke wie Bruchstriche, e-Funktionen, Wurzeln, Potenzen, Klammern usw. als Graphikblöcke vorgeben und direkt schon hinterlegen, was in diesem Block passiert (und wie diese differenziert oder integriert werden).
Den Formeleditor von MS Word kennt man vielleicht, oder das hier: https://www.zahlen-kern.de/editor/

Dann kommen noch allerhand Numerikprobleme auf dich zu...der Benutzer ist nunmal verwirrt, wenn er als Ergebnis '1' erwartet und der Rechner 0,99999999999999999999999999999999 anzeigt.
 

Ähnliche Java Themen

Neue Themen


Oben