MathNet.Symbolics Algebraic.Expand в порядке убывания?

С 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 ответа

Решение

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

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

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

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

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

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

который возвращает строку в убывающем виде.

Другие вопросы по тегам