Hi,
für ein Projekt habe ich eine kleine Library geschrieben, mit der einfache mathematische Terme ausgerechnet werden können.
neue Version:
[Only registered and activated users can see links. Click Here To Register...]
Folgendes wird unterstützt:
* Konstanten (e, pi)
* Operatoren (+, -, *, /, ^) mit ^ vor *, / vor +, -
* Funktionen beliebig vielen Parametern (sin, cos, tan, exp, ln)
* Parameter
* Ableiten
* Term mit [Only registered and activated users can see links. Click Here To Register...] grafisch darstellen
Genutzt werden kann die neue Version wie folgt:
Expression kann:
Nach dem parsen hat jeder Parameter den Wert "0".
Die durch differentiate erstellte Ableitung besitzt die gleichen Parameter-Objekte wie der ursprüngliche Term (d.h. get/setParameter() beziehen sich auf die selben Objekte).
Die render()-Methode benötigt die oben verlinkte Library.
Es können neue Konstanten, Operatore und Funktionen hinzugefügt werden (ExpressionParser bietet dafür addConstant(), addFunction() und addOperator()). Dabei gilt:
Konstante sind Objekte von Constant, Funktionen leiten von FunctionNode oder DefaultFunctionNode (bei nur einem Parameter) ab und Operatore von OperatorNode. Bei beiden müssen einige abstrakte Methoden implementiert werden.
Methoden:
Komplettes Beispiel:
Der generierten, abgeleiteten Terme werden noch nicht vereinfacht.
alte Version:
Vielleicht kann es ja jemand gebrauchen.
für ein Projekt habe ich eine kleine Library geschrieben, mit der einfache mathematische Terme ausgerechnet werden können.
neue Version:
[Only registered and activated users can see links. Click Here To Register...]
Folgendes wird unterstützt:
* Konstanten (e, pi)
* Operatoren (+, -, *, /, ^) mit ^ vor *, / vor +, -
* Funktionen beliebig vielen Parametern (sin, cos, tan, exp, ln)
* Parameter
* Ableiten
* Term mit [Only registered and activated users can see links. Click Here To Register...] grafisch darstellen
Genutzt werden kann die neue Version wie folgt:
Code:
ExpressionParser parser = new ExpressionParser();
Expression exp = parser.parse("x^2");
Code:
Expression.calculate():double Expression.getParameterNames():Set<String> Expression.setParameter(name:String, value:double) Expression.getParameter(name:String):Parameter Expression.differentiate(variable:String):Expression Expression.differentiate(variable:Parameter):Expression Expression.render():BufferedImage Expression.render(size:float):BufferedImage Expression.render(bgColor:Color, fgColor:Color, size:float):BufferedImage
Die durch differentiate erstellte Ableitung besitzt die gleichen Parameter-Objekte wie der ursprüngliche Term (d.h. get/setParameter() beziehen sich auf die selben Objekte).
Die render()-Methode benötigt die oben verlinkte Library.
Es können neue Konstanten, Operatore und Funktionen hinzugefügt werden (ExpressionParser bietet dafür addConstant(), addFunction() und addOperator()). Dabei gilt:
Konstante sind Objekte von Constant, Funktionen leiten von FunctionNode oder DefaultFunctionNode (bei nur einem Parameter) ab und Operatore von OperatorNode. Bei beiden müssen einige abstrakte Methoden implementiert werden.
Methoden:
Komplettes Beispiel:
Code:
ExpressionParser parser = new ExpressionParser();
Expression exp = parser.parse("x^2");
// Gibt aus: exp(ln(x) * 2.0) * (1.0 / x * 1.0 * 2.0 + ln(x) * 0.0)
System.out.println(exp.differentiate("x").toTermString());
JFrame frame = new JFrame();
frame.getContentPane().add(new JLabel(new ImageIcon(exp.differentiate("x").render(32))));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
alte Version:
Vielleicht kann es ja jemand gebrauchen.