Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Вычисление обратной матрицы
- void Gauss_Zhordan(int N)
- {
- int i, j, k, l, u;
- double elem, tmp;
- printf("Inverse:\n");
- //Заполнение добавочной матрицы
- for (i = 0; i < N; ++i){
- for (j = N + i + 1; j <= 2 * N; ++j){
- matrix_1[i][j] = 0;
- }
- }
- for (i = 0; i < N; ++i){
- matrix_1[i][N + i + 1] = 1;
- }
- //Приведение к верхней треугольной форме
- for (i = 1; i < N; ++i){
- for (j = i; j < N; ++j){
- l = i;
- while (matrix_1[i-1][i-1] == 0)
- {
- for (u = 0; u <= N; ++u){
- tmp = matrix_1[i-1][u];
- matrix_1[i-1][u] = matrix_1[l][u];
- matrix_1[l][u] = tmp;
- }
- ++l;
- }
- elem = matrix_1[j][i-1] / matrix_1[i-1][i-1];
- for (k = 0; k <= 2 * N; ++k){
- matrix_1[j][k] = matrix_1[j][k] - elem * matrix_1[i-1][k];
- }
- }
- }
- //Приведение к диагональной форме
- for (i = N - 2; i >= 0; --i){
- for (j = i; j >= 0; --j){
- l = i;
- while (matrix_1[i+1][i+1] == 0)
- {
- for (u = 0; u <= N; ++u){
- tmp = matrix_1[i+1][u];
- matrix_1[i+1][u] = matrix_1[l][u];
- matrix_1[l][u] = tmp;
- }
- --l;
- }
- elem = matrix_1[j][i+1] / matrix_1[i+1][i+1];
- for (k = 0; k <= 2 * N; ++k){
- matrix_1[j][k] = matrix_1[j][k] - elem * matrix_1[i+1][k];
- }
- }
- }
- //Приведение к единичной матрице
- for (i = 0; i < N; ++i){
- for (j = N + 1; j <= 2 * N; ++j)
- matrix_1[i][j] /= matrix_1[i][i];
- }
- //Печать обратной матрицы
- for (i = 0; i < N; ++i){
- for (j = N + 1; j <= 2 * N; ++j){
- printf("%.3lf ", matrix_1[i][j]);
- }
- printf("\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement