我正在尝试解决两个问题。 我正在做一个应该解决数学问题的应用程序。
我有基于语法和 AST 的表达式解析器,但主要问题是我需要从具有未知变量的表达式创建派生表达式,这里是示例。
函数:(x1)^2+4(x2)^2-2x1-4x2
x1 = 5+α
x2 = 2
我需要派生 (5+α)^2+4(2)^2-2*(5+α)-4*2 === 2*(5+α)+8 =>
作为字符串结果
然后从2*(5+α)+8计数α=?
最佳答案
您需要用数学规则来转换 AST。为了更好的可读性,我使用 x 而不是 x1。
为了找到 f'(x),我们需要一个匹配 x^n 形式的所有表达式并将其替换为 n*x^(n-1) 的规则。
现在您可以将变量替换为实际值。为了找到更简单的表示,您必须评估和转换 AST 项。作为表达式,您有变量(例如 a)、数字和运算(例如求和积,...)。可视化这一点的最佳方法是画树。
带有数值的简单表达式的示例:
- prod(num(2), num(3)) => num(6)
带变量的表达式示例:
- sum(prod(var(a),num(2)), prod(var(a),num(3))) => prod(var(a), sum(num(2),num(3)))
在这里,您必须考虑要进行哪些转换...您在 AST 上定义的规则将决定该术语最终的外观。
关于Java 将表达式推导为表达式和方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43024172/