【问题标题】:MathNet.Symbolics Algebraic.Expand in descending order?MathNet.Symbolics Algebraic.Expand 按降序排列?
【发布时间】:2020-02-06 11:47:54
【问题描述】:

使用MathNet.Symbolics 库,我尝试打印具有降幂顺序的多项式:

using mse = MathNet.Symbolics.Expression;
using MathNet.Symbolics;

public void Symbolics()
{
    var x1 = 2;
    var y2 = 3;
    var x2 = 4;

    // (2a+3)(a-4)

    var x = mse.Symbol("x");
    var a = mse.Symbol("x");
    var y = mse.Symbol("y");

    var expression = (x1 * a + y2) * (a - x2);
    var expanded = Algebraic.Expand(expression);
    var firstResult = Infix.Format(expanded);


    Debug.Log("Expression: " + expression);
    Debug.Log("Expanded: " + firstResult);
}

当前输出按升序排列:-12 - 5*x + 2*x^2,但我想要它的另一种方式。 我在多项式中尝试了.ToStringDescending() 函数,但无法在这里工作。

此外,如果可能,输出到 Latex 会很有用,但不是必需的。

Algebraic.Expand 的结果如何以降序而不是升序排列?

【问题讨论】:

  • mse 是什么?
  • 对不起mse是:使用mse = MathNet.Symbolics.Expression; (已更新问题代码以包含此内容)

标签: c# math.net mathnet-numerics mathdotnet-symbolics


【解决方案1】:

您可以使用相应的格式提供程序进行 Latex 输出:

Console.WriteLine("LaTeX.Format: " + LaTeX.Format(expanded));

我能得到的最好的方法是使用Summands 来获取它们并反转列表。遗憾的是,+ 符号在此过程中丢失了:

Console.WriteLine("Summands: " + string.Join("+", Algebraic.Summands(expanded).Reverse().Select(Infix.Format)));

【讨论】:

  • 在这里非常感谢您的帮助! LaTex 技巧非常有用,而 Summands 的使用很可能最终成为我必须这样做的方式,如果是这样,我会回来并将其标记为已回答。
  • 标记为从其他地方阅读的答案,这很可能是唯一/最好的方法,也许某些正则表达式可以重新安装 +...因此将寻找 MathNet 替代品
【解决方案2】:

Numerics.Polynomial 有 ToString() 以升序形式返回字符串和

ToStringDescending(字符串格式,IFormatProvider formatProvider) 按降序格式化多项式,例如"x^3 + 2.0x^2 - 4.3"

以降序形式返回字符串。

【讨论】:

  • 谢谢 phv,但引用最初的问题:“我尝试了 .ToStringDescending() 函数,在多项式中,但无法让它在这里工作。”您如何将符号表达式转换为数值多项式?在受到@Orace 的启发后,我写了这个:string.Join(" ", StringYouWantReversing.Split(' ').Reverse());
猜你喜欢
  • 2011-05-10
  • 2012-10-18
  • 2012-09-30
  • 2012-03-06
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
相关资源
最近更新 更多