2017-08-16 111 views
1

我正在尝试做一个方法来计算一个行列式。为此,我正在使用MathNet.Symbolics库。一切都很好,直到遇到一个小问题。我试图从一个行列式的公式中得到最终结果,在我使用Infix.Format之后,我不知道为什么,但它没有给出令人满意的结果。而不是最终结果它给了我一个介于两者之间的方程式。我认为这与方程的一部分在2括号之间有关。我应该怎么做才能获得最终结果?如何使用MathNet.Symbolics获得最终结果?

这是我的代码:

using System; 
using InputMath; 
using MathNet.Symbolics; 
using mns = MathNet.Symbolics.Expression; 

namespace MathWizard 
{ 
    class Determinants 
    { 
     //The final result 
     public static string fnalResult; 

     public static void BasicDeterminant() 
     { 
      //The inputs before assigning them to theyr specific variable 
      string[] inputs; 

      inputs = Console.ReadLine().Split(new char[] { ' ' },StringSplitOptions.RemoveEmptyEntries); 

      Double x1 = Convert.ToDouble(inputs[0]); 
      Double y1 = Convert.ToDouble(inputs[1]); 

      Double x2 = Convert.ToDouble(inputs[2]); 
      Double y2 = Convert.ToDouble(inputs[3]); 

      var x = mns.Symbol("x"); 
      var y = mns.Symbol("y"); 

      var firstResult = Infix.Format(x * x1 * 1 + x1 * y2 * 1 + x2 * y * 1 - (x1 * x2 * 1 + 1 * y2 * x + 1 * y * x1)); 

      Console.WriteLine(firstResult); 
      Console.ReadKey(); 

     } 
    } 
} 

所以这是一个示例性输入:

输入后的数字将被分配这样的:

x1 = 1; 
y1 = 3; 
x2 = 6; 
y2 = 4; 

运行完所有代码后,输出结果如下:

4 + X + 6 * Y - (6 + 4 * X + Y)

解决该输出后,实际预期的结果应该是:

-2-3 * X + 7 * Y

+0

您可以添加示例输入以及相应的预期结果吗? –

+0

我编辑了相应的问题。谢谢! – Noobie

回答

0

Math.NET Symbolics确实会应用自动简化,但仅限于严格的规则。这就是为什么一些术语被简化和重新排序,但括号不会自动扩展。

你可以用象征性的常规Algebraic.Expand强制执行扩展:

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

哪里firstResult现在有期望值(-2) + (-3)*x + 5*y

注意:如果这将被格式化为-2 - 3*x + 5*y,我发现它会更好。我会在下一个版本中尝试改进。

+0

它像一个魅力工作!非常感谢您的时间和精力。祝你有个美好的一天! – Noobie