Я пишу программу, способную решать уравнения / системы с помощью этой библиотеки.
Мне нужен способ, с помощью которого можно легко вычислить коэффициент полинома, что-то вроде:
string input = "(x - 5)(x + 2) = 0"
int degree = DeterminePolynomialDegree(input) //тут degree == 2
У меня получилось вот так:
using MathNet.Symbolics;
using Expr = MathNet.Symbolics.Expression;
var expr = Infix.ParseOrThrow("(x - 5)*(x + 2)"); // без звёздочки не парсит :(
var expanded = Algebraic.Expand(expr);
var xsym = Expr.Symbol("x");
if (SingleVariablePolynomial.IsPolynomial(xsym, expanded))
{
var degreeExpr = SingleVariablePolynomial.Degree(xsym, expanded);
var degree = Evaluate.Evaluate(null, degreeExpr).RealValue;
Console.WriteLine($"Degree: {degree}");
}
else
{
Console.WriteLine("Not a polynomial in x");
}
С двумя переменными не сложнее:
var expr = Infix.ParseOrThrow("(x - 5)*(x + 2) + x * y");
var expanded = Algebraic.Expand(expr);
var xsym = Expr.Symbol("x");
var ysym = Expr.Symbol("y");
var syms = new HashSet<Expr>() {xsym, ysym};
if (Polynomial.IsMultivariatePolynomial(syms, expanded))
{
var degreeXExpr = Polynomial.Degree(xsym, expanded);
var degreeX = Evaluate.Evaluate(null, degreeXExpr).RealValue;
var degreeYExpr = Polynomial.Degree(ysym, expanded);
var degreeY = Evaluate.Evaluate(null, degreeYExpr).RealValue;
Console.WriteLine($"Degree X: {degreeX}, Y: {degreeY}");
}
else
{
Console.WriteLine("Not a polynomial in (x, y)");
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости