用mathdotnet求解线性方程组?

我想解决方程式,

(4-x)*2 = (y-1)*10 + 2
x = y*2 + 1

方程式以字符串forms提供。 有没有办法在mathdotnet中表达方程? 我只能找到写表达式的方法。

Math.NET Numerics可以用数字方式解决任何线性系统 ,但我认为这不是你想要的。

Math.NET Symbolics可以处理符号表达式,虽然这个项目处于早期阶段并且尚未理解方程式的概念。 但是,我们仍然可以使用它来解决像这样的简单系统,并做一些工作 – 通过我们手工做的事情。

首先,让我们定义一个小函数来求解一个最大为1的线性方程:

 using Expr = MathNet.Symbolics.Expression; Expr SolveSimpleRoot(Expr variable, Expr expr) { // try to bring expression into polynomial form Expr simple = Algebraic.Expand(Rational.Numerator(Rational.Simplify(variable,expr))); // extract coefficients, solve known forms of order up to 1 Expr[] coeff = Polynomial.Coefficients(variable,simple); switch(coeff.Length) { case 1: return Expr.Zero.Equals(coeff[0]) ? variable : Expr.Undefined; case 2: return Rational.Simplify(variable,Algebraic.Expand(-coeff[0]/coeff[1])); default: return Expr.Undefined; } } 

然后我们可以使用它来解决系统如下:

 // declare variables var x = Expr.Symbol("x"); var y = Expr.Symbol("y"); // Parse left and right side of both equations Expr aleft = Infix.ParseOrThrow("(4-x)*2"); Expr aright = Infix.ParseOrThrow("(y-1)*10+2"); Expr bleft = Infix.ParseOrThrow("x"); Expr bright = Infix.ParseOrThrow("y*2+1"); // Solve both equations to x Expr ax = SolveSimpleRoot(x,aleft-aright); // "8 - 5*y" Expr bx = SolveSimpleRoot(x,bleft-bright); // "1 + 2*y" // Equate both terms of x, solve to y Expr cy = SolveSimpleRoot(y,ax-bx); // "1" // Substitute term of y into one of the terms of x Expr cx = Algebraic.Expand(Structure.Substitute(y,cy,ax)); // "3" // Print expression in Infix notation Console.WriteLine(Infix.Print(cx)); // x=3 Console.WriteLine(Infix.Print(cy)); // y=1