如何将方程转换为单个变量的公式?我正在考虑像下面这样的数学方程式。
c^2 = a^2 + b^2
我想有一个可以处理任何公式的函数,并给我个别变量公式。上面的等式将产生以下结果:
a = (c^2 - b^2)^0.5
b = (c^2 - a^2)^0.5
c = (a^2 + b^2)^0.5
我还想从:
开始a = (c^2 - b^2)^0.5
并输出:
b = (c^2 - a^2)^0.5
c = (a^2 + b^2)^0.5
我查看了表达式树,但我无法想象它是如何工作的。我想要.NET(C#,VB.NET或F#)解决方案。有任何想法吗?
类似的东西:
public string[] GetFormulas(string equation)
{
...
}
感谢。
答案 0 :(得分:6)
符号方程求解是一个复杂的问题,许多方程都没有封闭解。编写自己的Computer Algebra System并非易事,但您可以编写一个简单等式的程序。
您必须构建输入字符串的表达式树并定义用于操作表达式树的转换规则。要解决变量,您可以在表达式树的空间上执行搜索(由良好的启发式指导以保持运行时可接受),该空间可以通过多个应用程序从原始树派生。 转型规则。
答案 1 :(得分:4)
这是你要解决的一个非常重要的问题...我认为你不会有太多的运气试图自己解决它。最好找到某种类型的第三方应用程序或库。有许多程序可以执行您正在谈论的操作,例如Matlab和Maple。此外,TI-89图形计算器可以做到这一点。您可以从Octave获得所需的算法,这本质上是Matlab的开源实现。
答案 2 :(得分:2)
您唯一的选择是通过应用所有已知技术来强制它。在上面的简单代数方程式中,这可能就足够了,但更复杂的问题需要越来越复杂的解决方案。简而言之,这并不容易。
一旦你弄清楚如何将文本解析为符号,创建一个可以确定
的应用程序可能很容易c^2 = a^2 + b^2
可以替换为
c = (a^2 + b^2)^.5
但是,
怎么样?cos(c) = sin(a^2/b) - b^(a/sin(b))
更糟糕的是,你有无法解决的集成和抽象代数......你必须在某处画出复杂的线条,否则你最终会建立另一个Maple。
答案 3 :(得分:1)
您可能希望使用数学库来查看这些内容。对于.NET,Math.NET似乎是最完整的选项(不确定它是多么稳定,但它肯定非常完整)。用于执行符号操作的库应该能够处理您在此处提出的特定问题。
老实说,从头开始写这个不应该太困难,但是如果你不熟悉表达树并且不知道如何处理任务,我仍然会建议使用现有的数学库,Math.NET或任何其他具有符号代数的正确数学库。
答案 4 :(得分:1)
以符号和非数字方式处理方程绝对不是一件容易的事。我认为对你来说最简单的方法就是在幕后使用Mathematica,Maple或类似的东西,让他们为你努力工作。
答案 5 :(得分:0)
由于c ^ 2 = a ^ 2 + b ^ 2不是C#中的表达式,因此你走错了轨道。
忘记.NET表达式树并创建自己的表达式树。您需要描述执行这些转换所需的算法,以及描述方程所需的数据。您会发现最终结果与.NET表达式树完全不同。
答案 6 :(得分:0)
除了已经说过的任何内容之外,你还可以看看数值方法。
有一些算法可以解决方程式的解决方案。因为他们中的大多数都不会那么容易(甚至是不可能)来解决。
答案 7 :(得分:0)
一般来说是一个令人讨厌的问题。对于低阶多项式表达式,这不是太难了。对于线性问题,您只需要一个解析器和一些后处理。但即使是简单易懂的表达也可能不是那么简单。例如,您将如何处理
x^5 + y^5 - xy + 1 = 0
根据其他方法求解x或y中的任何一个,你必须求解5阶非常系数多项式的根。这通常是不可能的。
更糟糕的是,在混音中引入trig函数或任何特殊函数,它会强制你在完成之前重新编写Mathematica。