Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/27: Рейтинг темы: голосов - 27, средняя оценка - 4.67
Александер
5 / 5 / 0
Регистрация: 29.10.2009
Сообщений: 56
1

Метод Гаусса, для нахождения обратной матрицы

01.09.2011, 01:19. Просмотров 5438. Ответов 11
Метки нет (Все метки)

Доброго времени суток, уважаемые форумчане!

Большая просьба, проверьте код на правильность
Это метод Гаусса, для нахождения обратной матрицы
Проверка не сходится

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <stdio.h>
 
int main(int argc, char** argv)
{
    int i,j,k;
    int Ai[5][5]={{0,1,0,1,0},{1,0,0,0,0},{1,1,1,0,1},{1,1,0,1,1},{1,1,0,0,0}};
        //==========СОСТАВЛЕНИЕ РАБОЧЕЙ МАТРИЦЫ А========
    
    //размерность матрицы
    int n=5;
    //рабочая матрица
    int A[5][10];
    //копируем исходную в рабочую
    for (i=0; i<n; i++)
        for (j=0; j<n; j++)
            A[i][j]=Ai[i][j];
    //прибавляем единичную матрицу
    for (i=0; i<n; i++)
        for (j=n; j<2*n; j++)
        {
            if (i+n==j)
                A[i][j]=1;
            else
                A[i][j]=0;
        }
 
    //==========МЕТОД ГАУССА ДЛЯ МАТРИЦЫ В=========   
    
    for (i=0; i<n; i++)
    {
        if (A[i][i]==0)
            for (j=i+1; j<n; j++)
            {
                if (A[j][i]==1)
                {
                    for (k=0; k<2*n; k++)
                    {
                        int c=A[j][k];
                        A[j][k]=A[i][k];
                        A[i][k]=c;
                    }
                    break;
                }
            }
        for (k=i+1; k<n; k++)
        {
            if (A[k][i]==1)
            {
                for (j=0; j<2*n; j++)
                {
                    A[k][j]^=A[i][j];
                }
            }
        }
    }
        for (i=n-1; i>=0; i--)
        {
            for (k=i-1; k>=0; k--)
            {
                if (A[k][i]==1)
                {
                    for (j=0; j<2*n; j++)
                    A[k][j]^=A[i][j];
                }
            }
        }   
        
    //обратная матрица
    int B[5][5];
    
    //копируем в обратную матрицу В
    for (i=0; i<n; i++)
        for (j=0, k=n; j<n; j++, k++)
            B[i][j]=A[i][k];
    //Выводим на экран обратную матрицу
    for (i=0; i<n; i++){
        for (j=0; j<n; j++)
            printf("%i",B[i][j]);
        printf("\n");}
//Проверка. А*В=Е
int E[5][5];
for (i=0; i<n; i++){
    for (j=0; j<n; j++)
                E[i][j]=0;
    }
    
    for (i=0; i<n; i++){
        for (j=0; j<n; j++){
            for (k=0; k<n; k++)
                E[i][j]^=A[i][k] & B[k][j];
        }
    }
    //Выводим на экран единичную матрицу
    printf("\n");
    for (i=0; i<n; i++){
        for (j=0; j<n; j++)
            printf("%i",E[i][j]);
        printf("\n");}
    return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2011, 01:19
Ответы с готовыми решениями:

Нахождение обратной матрицы методом Гаусса
здравствуйте!! я чуть чуть плохо понимаю метод Гауса, хочу у вас спросить правильно ли работает...

Программа нахождения обратной матрицы
#include &lt;stdio.h&gt; #include&lt;locale.h&gt; #define n 3 int main() { float a, b, x, P, detk, d, o;...

Нужен пример нахождения обратной матрицы
Дорогие друзья! Есть ли у кого нибудь готовый код для нахождения обратной матрицы? Буду очень...

Метод Гаусса - При вводе матрицы почему то обнуляются 2 последних элемента системы уравнений
При вводе матрицы почему то зануляет 2 последних элемента системы уравнений и соответственно...

Метод Гаусса для СЛАУ
Здравствуйте, вот код, консоль запускается, но никакого вывода нет. OpenMP подключил. #include...

11
grizlik78
Эксперт С++
2115 / 1555 / 230
Регистрация: 29.05.2011
Сообщений: 3,233
01.09.2011, 01:45 2
Проверка неправильная. Используется не исходная матрица, а уже преобразованная в единичную.
В строке 91 должна использоваться матрица Ai.
1
Александер
5 / 5 / 0
Регистрация: 29.10.2009
Сообщений: 56
01.09.2011, 01:51  [ТС] 3
Тю, а ларчик-то просто открывался!
Спасибо!))
Я спать-отдыхать, чтобы больше так не попадать
0
Thinker
Эксперт С++
4244 / 2218 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
01.09.2011, 07:51 4
Цитата Сообщение от Александер Посмотреть сообщение
//Проверка. А*В=Е
Это хорошо, что вы только так проверяете, так как из этого немедленно вытекает, что B*A=E, хотя здесь используется свойство обратных матриц, так как коммутативности там нет. Но матрица может быть вырожденной, тогда, конечно, равенства не будет.
0
Пунцовый)
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 2
27.11.2011, 16:10 5
Скажите, а как быть, если числа в матрице не целочисленные?
как перезаписать A[k][ j] ^= A[i][ j] ?
0
Александер
5 / 5 / 0
Регистрация: 29.10.2009
Сообщений: 56
28.11.2011, 00:07  [ТС] 6
Признаюсь, не знаю
0
gGrn-7DA
мну довольно <(-__-)l
213 / 202 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
Завершенные тесты: 1
05.12.2011, 22:26 7
Цитата Сообщение от Александер Посмотреть сообщение
Признаюсь, не знаю
Как оно вообще работает?
Почему используется оператор ^?

Не по теме:

Лучше приведи ссылку на методичку?

0
Александер
5 / 5 / 0
Регистрация: 29.10.2009
Сообщений: 56
05.12.2011, 22:31  [ТС] 8
Работает.
^ стоит потому, что использовались двоичные матрицы. И результат мне тоже нужен был в двоичном виде
0
gGrn-7DA
мну довольно <(-__-)l
213 / 202 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
Завершенные тесты: 1
05.12.2011, 22:39 9
ладно, тогда другой вопрос.
Почему целый тип используется? в обычном для меня методе Гауса используются нецелочисленный тип и операции +-*/. а тут и их нет, так еще и ^& вылезли...

Не по теме:

Методичка где собрано подобное очень ценна будет)
если есть

0
Александер
5 / 5 / 0
Регистрация: 29.10.2009
Сообщений: 56
05.12.2011, 22:45  [ТС] 10
Методички, увы, нет, есть только свои собственные "ходы"
Ну, а про выбор целочисленного типа и операций ^ и & основан, повторюсь, на том, что изначально мне матрицы были даны, состоящие из алфавита {0,1}, и результирующая матрица тоже должна была быть выражена в виде нолей-единичек
0
-=ЮрА=-
Заблокирован
Автор FAQ
05.12.2011, 23:06 11
Александер, посмотри сюда
Методом Гаусса решить систему n линейных алгебраических уравнений
1
gGrn-7DA
мну довольно <(-__-)l
213 / 202 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
Завершенные тесты: 1
06.12.2011, 17:05 12
Александер,понял спс.
0
06.12.2011, 17:05
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2011, 17:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Метод Жодана Гаусса по главному элементу всей матрицы не вычисляет матрицу выше 5го порядка
Вот решения этой задачи, считает до 5го порядка правильно, а вот на 6м порядке и выше пишет что...

Реализовать метод Гаусса для расчета СЛАУ
Всем доброго времени суток) Уважаемые знатоки,помогите разобраться ) нужно реализовать метод Гаусса...

Решить систему линейных уравнений для ограниченного числа переменных используя метод Гаусса
Добрый день. Нужно написать программу в Си которая сможет решить систему линейных уравнений для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.