Мат hNet .Символики алгебры c .Развернуть в порядке убывания? - PullRequest
1 голос
/ 06 февраля 2020

С библиотекой 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 в порядке убывания, а не в порядке возрастания?

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Вы можете получить вывод латекса с соответствующим поставщиком форматов:

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

Лучшее, что я могу получить, это использовать Summands, чтобы получить их и перевернуть список. К сожалению, знак + теряется в процессе:

Console.WriteLine("Summands: " + string.Join("+", Algebraic.Summands(expanded).Reverse().Select(Infix.Format)));
0 голосов
/ 10 февраля 2020

Numerics.Polynomial имеет ToString (), которая возвращает строку в возрастающей форме, и

ToStringDescending (формат строки, IFormatProvider formatProvider) Форматирует полином в порядке убывания, например, «x ^ 3 + 2.0x ^ 2 - 4.3 "

, которая возвращает строку в порядке убывания.

...