コード例 #1
0
    // Determine the reduce of the Matrix
    public Matrix reduce()
    {
        Matrix reduced = new Matrix(this);

        int lead = 0;
        for (int row = 0; row < reduced.getH(); row++)
        {
            if (reduced.getW() <= lead)
                break;

            int i = row;
            while (reduced[lead, i] == 0)
            {
                i++;
                if (i == reduced.getH())
                {
                    i = row;
                    lead++;
                    if (lead == reduced.getW())
                        return reduced;
                }
            }

            reduced.SwapRows(i, row);

            float divFactor = reduced[lead, row];
            for (int k = 0; k < reduced.getW(); k++)
            {
                reduced[k, row] = reduced[k, row] / divFactor;
            }

            for (int j = 0; j < reduced.getH(); j++)
            {
                if (j == row) continue;

                float factor = reduced[lead, j];
                for (int k = 0; k < reduced.getW(); k++)
                {
                    reduced[k, j] = reduced[k, j] - reduced[k, row] * factor;
                }
            }

        }
        return reduced;
    }