【问题标题】:How can I solve a Matrix in MathNet?如何在 MathNet 中求解矩阵?
【发布时间】:2012-08-27 00:02:12
【问题描述】:

我不知道如何使用 MathNet 获取结果矩阵的值,有人可以帮忙吗?我有一个 4 列 3 行矩阵,它代表 3 个多项式,我正在尝试求解 a=、b=、c=。 row1 代表 a、2 b、3 c。我不知道如何使用 MathNet 的功能来获取这些值,或者它是否会这样做。

        double X1 = Convert.ToDouble(x1);
        double Y1 = Convert.ToDouble(y1);

        double X2 = Convert.ToDouble(x2);
        double Y2 = Convert.ToDouble(y2);

        double X3 = Convert.ToDouble(x3);
        double Y3 = Convert.ToDouble(y3);

        var a = new DenseMatrix(3, 4);

        double[] row1 = new double[2];
        row1[0] = X1;
        row1[1] = Y1;

        double[] row2 = new double[2];
        row2[0] = X2;
        row2[1] = Y2;

        double[] row3 = new double[2];
        row3[0] = X3;
        row3[1] = Y3;

        a.SetRow(0, row1);
        a.SetRow(1, row2);
        a.SetRow(2, row3);

编辑:

如果您想尝试解决方案,您可以将 matrix = 设置为

            double[,] matrix = new double[3, 4]{
            {  1, 2, -1,  -4 },
            {  2, 3, -1, -11 },
            { -2, 0, -3,  22 }
        };

【问题讨论】:

    标签: c# math linear-algebra math.net


    【解决方案1】:

    甚至不用 MathNet 就解决了:

    int lead = 0, rowCount = 3, columnCount = 4;
            for (int r = 0; r < rowCount; r++)
            {
                if (columnCount <= lead) break;
                int i = r;
                while (matrix[i, lead] == 0)
                {
                    i++;
                    if (i == rowCount)
                    {
                        i = r;
                        lead++;
                        if (columnCount == lead)
                        {
                            lead--;
                            break;
                        }
                    }
                }
                for (int j = 0; j < columnCount; j++)
                {
                    double temp = matrix[r, j];
                    matrix[r, j] = matrix[i, j];
                    matrix[i, j] = temp;
                }
                double div = matrix[r, lead];
                for (int j = 0; j < columnCount; j++) matrix[r, j] /= div;
                for (int j = 0; j < rowCount; j++)
                {
                    if (j != r)
                    {
                        double sub = matrix[j, lead];
                        for (int k = 0; k < columnCount; k++) matrix[j, k] -= (sub * matrix[r, k]);
                    }
                }
                lead++;
            }
    

    【讨论】:

      猜你喜欢
      • 2016-10-02
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 2015-09-14
      • 2019-09-25
      • 1970-01-01
      相关资源
      最近更新 更多