gpt4 book ai didi

c# - 如何使用 MathNet.Symbolics 简化公式?

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:30 26 4
gpt4 key购买 nike

我正在使用 MathNet.Symbolics 库来简化代数公式,例如

string f = Infix.Print(Infix.ParseOrThrow("L+H+L+H"))

我正确地得到了 f="2*L+2*H"

当我需要减去其中两个公式时,我的问题就出现了:

string f = Infix.Print(Infix.ParseOrThrow("L+H+L+H - (L+H)"))

在这里我得到 f="2*L+2*H - (L+H)" 而不是 (L+H)

我应该怎么做才能得到正确的简化?

最佳答案

Math.NET Symbolics 在构造表达式时始终应用自动简化,因此甚至不存在非规范化形式。这对于保持代数算法的低复杂度是必不可少的,但有意限制得非常多。这实际上更像是一个术语规范化,而不是简化。

表达式 2*H + 2*L - (H + L) 在技术上确实是规范化/自动简化的形式,但是在使用 Infix.PrintStrict 时这可能更明显 可读性差很多,但准确显示了表达式在内部的表示方式:2*H + 2*L + (-1)*(H + L)

有相当多的代数例程可用于操作和简化此类表达式,在这种情况下,一个简单的代数展开就可以解决问题:

var e1 = Infix.ParseOrThrow("L+H+L+H");
var e2 = Infix.ParseOrThrow("L+H");
var e3 = e1 - e2;
// or: var e3 = Infix.ParseOrThrow("L+H+L+H - (L+H)");

var expanded = Algebraic.Expand(e3);
Infix.Print(expanded); // prints "H + L"

关于c# - 如何使用 MathNet.Symbolics 简化公式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31727067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com