[英]Java: solving symbolic algebraic equations
我無法將此功能添加到我的計算器應用程序中。 這是我的想法:
我想解決: 2x = 5 + 4x
。
為了解決這個問題,如果我使用外部令牌庫來解析方程,那是沒有問題的,但是由於我的整個程序是圍繞一個分流碼解析器 (EXP4J) 構建的,所以它使事情變得復雜。 你可能會說我可以只在特定情況下使用令牌解析器,但是當你考慮到我有使用 EXP4J 的 FUNCTIONS 時,它變得非常糾結。
因此,雖然我可以通過簡單地在這種特定情況下交替使用令牌解析器來使其適用於2x = 5 + 4x
,但使用 EXP4J 的計算,例如:
2x = 5*exp4jfunc(x + 5,x) + cos(x)
完全超出我的范圍。
有沒有人知道如何解決這個問題? 我什至不知道我的卡西歐是如何解決這個問題的,因為它凍結在求解x = 9^x
這樣的 x 方程上......
使用symja 庫,您可以像這樣解決您的問題:
package org.matheclipse.core.examples;
import org.matheclipse.core.eval.ExprEvaluator;
import org.matheclipse.core.interfaces.IExpr;
import org.matheclipse.parser.client.SyntaxError;
import org.matheclipse.parser.client.math.MathException;
public class Solve2Example {
public static void main(String[] args) {
try {
ExprEvaluator util = new ExprEvaluator();
IExpr result = util.evaluate("Solve(2*x==5 + 4*x,x)");
// print: {{x->-5/2}}
System.out.println(result.toString());
result = util.evaluate("Roots(2*x==5+4*x, x)");
// print: x==-5/2
System.out.println(result.toString());
} catch (SyntaxError e) {
// catch Symja parser errors here
System.out.println(e.getMessage());
} catch (MathException me) {
// catch Symja math errors here
System.out.println(me.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
}
您可以查看Roots() 函數的實現,它是如何轉換解析后的 AST 來求解方程的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.