我在将此功能添加到计算器应用程序时遇到问题。这就是我的想法:

我想解决:2x = 5 + 4x

要解决此问题,如果我使用外部令牌库来解析方程式,那是没有问题的,但是由于我的整个程序都是围绕调车场解析器(EXP4J)构建的,因此事情变得很复杂。您可能会说我可以仅在特定情况下使用令牌解析器,但是当您考虑到使用EXP4J可以使用FUNCTIONS时,它真的很纠结。

因此,尽管对于这种特定情况,我可以通过简单地替换为令牌解析器使它对于2x = 5 + 4x起作用,但是使用EXP4J的计算如下:

2x = 5*exp4jfunc(x + 5,x) + cos(x)完全超出了我。

有谁知道如何解决这个问题?我什至不知道我的CASIO如何解决这个问题,因为它冻结在x = 9^x之类的x求解方程上。

最佳答案

我对exp4j并不真正熟悉...鉴于Expression类似乎没有提供对已解析结构的太多访问权限,因此对于exp4j,符号方法似乎并不切实可行。

您可以尝试使用exp4j代替的一件事:


=处的方程式拆分为leftright
建立一个新的方程式,即双方的差异:

String diff = "(" + left + ") - (" + right + ")"
用exp4j解析diff
setVariable()evaluate()使用数值方法(例如Secant method)查找解决方案。


无耻的插件:如果您正在考虑使用其他解析器,请查看this one

关于java - Java:求解符号代数方程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35893913/

10-11 14:19