Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用MathNet.Symbolics获得最终结果?_C#_Equation_Math.net - Fatal编程技术网

C# 如何使用MathNet.Symbolics获得最终结果?

C# 如何使用MathNet.Symbolics获得最终结果?,c#,equation,math.net,C#,Equation,Math.net,我正在尝试一种计算行列式的方法。为此,我正在使用MathNet.Symbolics库。一切都很好,直到我遇到一个小问题。我试图从行列式的公式中得到最终结果,在我使用了Infix.Format之后,我不知道为什么,但它并没有给ma一个令人满意的结果。它给出的不是最终结果,而是介于两者之间的一个等式。我认为这与方程的一部分在两个括号之间这一事实有关。我该怎么做才能得到最终结果 这是我的密码: using System; using InputMath; using MathNet.Symbolics

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

这是我的密码:

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();

        }
    }
}
这是一个示例输入:

1 3 6 4

输入后,编号将按如下方式分配:

x1 = 1;
y1 = 3;
x2 = 6;
y2 = 4;
运行所有代码后,输出为:

4+x+6*y-(6+4*x+y)

解决此输出后,实际预期结果应为:


-2-3*x+7*y

Math.NET符号确实应用了自动简化,但仅根据严格的规则。这就是为什么一些术语被简化并重新排序,但括号不会自动展开

您可以使用符号例程
代数.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
会更好。在下一个版本中,我将尝试对此进行改进。

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

您可以使用符号例程
代数.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
会更好。我将在下一个版本中对此进行改进。

它非常有效!非常感谢您的时间和努力。祝你今天愉快!它就像一个符咒!非常感谢您的时间和努力。祝你今天愉快!