从被问到这个问题的 11 年后:如果你不想重新发明轮子,那里有许多奇特的数学解析器。
我几年前写过一个,它支持算术运算、方程求解、微积分、积分、基本统计、函数/公式定义、绘图等。
它叫ParserNG,而且是免费的。
计算表达式很简单:
MathExpression expr = new MathExpression("(34+32)-44/(8+9(3+2))-22");
System.out.println("result: " + expr.solve());
result: 43.16981132075472
或者使用变量和计算简单的表达式:
MathExpression expr = new MathExpression("r=3;P=2*pi*r;");
System.out.println("result: " + expr.getValue("P"));
或者使用函数:
MathExpression expr = new MathExpression("f(x)=39*sin(x^2)+x^3*cos(x);f(3)");
System.out.println("result: " + expr.solve());
result: -10.65717648378352
或评估给定点的导数(注意它在幕后进行符号微分(不是数值),因此准确性不受数值近似误差的限制):
MathExpression expr = new MathExpression("f(x)=x^3*ln(x); diff(f,3,1)");
System.out.println("result: " + expr.solve());
result: 38.66253179403897
在 x=3 时区分 x^3 * ln(x) 一次。
你现在可以区分的次数是 1。
或数值积分:
MathExpression expr = new MathExpression("f(x)=2*x; intg(f,1,3)");
System.out.println("result: " + expr.solve());
result: 7.999999999998261... approx: 8
此解析器速度相当快,并且具有许多其他功能。
通过绑定到 Objective C 将其移植到 Swift 的工作已经结束,我们已将其用于图形应用程序以及其他迭代用例。
免责声明:ParserNG 由我创作。