예제 #1
0
        public void MergeMatrixBig(float[,] A, int RowCol)
        {
            //Buoc Giai A^-1
            CreatedMatrixI(RowCol);
            for (int i = 0; i < RowCol; i++)
            {
                for (int j = 0; j < RowCol; j++)
                {
                    C[i, j] = A[i, j];
                }
            }
            for (int i = 0; i < RowCol; i++)
            {
                for (int j = 0; j < RowCol; j++)
                {
                    C[i, j + RowCol] = mI[i, j];
                }
            }
            //Add_MatrixRe(RowCol, RowCol * 2, 1);
            // Xuat(C, 8);

            //Buoc 2 Giai A^-1
            //Xuat(C, RowCol);

            for (int i = 0; i < RowCol - 1; i++)
            {
                int nho = i;
                for (int x = i; x < RowCol; x++)
                {
                    if (C[x, i] != 0)
                    {
                        nho = x;
                        break;
                    }
                }
                if (nho != i)
                {
                    for (int j = i; j < RowCol; j++)
                    {
                        C[i, j] += C[nho, j];
                    }
                    C[i, nho + RowCol] += 1;
                }

                for (int t = 1; t < RowCol - i; t++)
                {
                    float k = C[i + t, i] / C[i, i];
                    for (int j = i; j < RowCol * 2; j++)
                    {
                        C[i + t, j] = C[i + t, j] - k * C[i, j];
                    }
                }
            }
            //Add_MatrixRe(RowCol, RowCol * 2, 2);
            //Xuat(C, RowCol);

            //Buoc 3
            for (int i = 0; i < RowCol; i++)
            {
                float k = 1 / C[i, i];
                for (int j = i; j < RowCol * 2; j++)
                {
                    C[i, j] *= k;
                }
            }

            //Buoc RowCol
            for (int i = RowCol - 1; i > 0; i--)
            {
                for (int k = i - 1; k >= 0; k--)
                {
                    float x = C[k, i];
                    for (int j = i; j < RowCol * 2; j++)
                    {
                        C[k, j] -= (x * C[i, j]);
                    }
                }
            }
            //Add_MatrixRe(RowCol, RowCol * 2, 3);

            for (int i = 0; i < RowCol; i++)
            {
                for (int j = RowCol; j < RowCol * 2; j++)
                {
                    GlobalsMatrix.setMatrixRe(i, j - RowCol, C[i, j]);
                }
                ;
            }
        }