我在将此功能添加到计算器应用程序时遇到问题。这就是我的想法:
我想解决: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代替的一件事:
将=
处的方程式拆分为left
和right
建立一个新的方程式,即双方的差异:String diff = "(" + left + ") - (" + right + ")"
用exp4j解析diff
对setVariable()
和evaluate()
使用数值方法(例如Secant method)查找解决方案。
无耻的插件:如果您正在考虑使用其他解析器,请查看this one
关于java - Java:求解符号代数方程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35893913/