1

我不知道如何使用 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 }
        };
4

1 回答 1

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++;
        }
于 2011-12-20T01:23:29.210 回答