【发布时间】:2016-03-09 14:10:10
【问题描述】:
我无法将此功能添加到我的计算器应用程序中。这是我的想法:
我要解决:2x = 5 + 4x。
如果我使用外部令牌库来解析方程,解决这个问题是没有问题的,但是由于我的整个程序是围绕一个调车场解析器 (EXP4J) 构建的,所以它使事情变得复杂。你可能会说我可以只在特定情况下使用令牌解析器,但是当你考虑到我有使用 EXP4J 的 FUNCTIONS 时,它变得非常纠结。
因此,虽然我可以通过简单地在这种特定情况下切换到令牌解析器来使其适用于 2x = 5 + 4x,但使用 EXP4J 的计算,例如:
2x = 5*exp4jfunc(x + 5,x) + cos(x) 完全超出我的能力范围。
有人知道如何解决这个问题吗?我什至不知道我的 CASIO 是如何解决这个问题的,因为它冻结了像 x = 9^x 这样的求解 x 方程...
【问题讨论】:
-
解方程并不像你想象的那么容易。它与您的解析器无关。仅从数学的角度来看,除了多项式之外的任何东西都将非常难以解决。至少如果您采用一般方法。
-
你想要的一般称为“计算机代数系统”;见en.wikipedia.org/wiki/Computer_algebra_system。这些与计算公式值的工具非常不同,因为它们必须象征性地操纵方程。这些很难构建,特别是如果您想处理许多不同类型的方程;对于每种方程类型,您需要不同的求解器技术。您可以通过查看一个非常简单的高中代数来了解实现一个需要什么:semdesigns.com/Products/DMS/SimpleDMSDomainExample.html
-
PS:写一个解析器非常容易。见stackoverflow.com/questions/2245962/…。为您的 exp4j 示例编写解析器并不难。正如我上面所说,求解器部分很难。
-
@daedsidog:有没有找到解决方案?我正在尝试解决类似的问题。例如:
x*1/40+5=12所以在这里我已经知道12的解决方案,但我想解决x之类的x=(12-5)*40导致x=280。