Форум программистов, компьютерный форум CyberForum.ru

Найти обратную матрицу - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.75
nikolas982
1 / 1 / 0
Регистрация: 10.09.2012
Сообщений: 49
10.09.2012, 21:27     Найти обратную матрицу #1
Здравствуйте, уважаемые программисты!
Прощу помощи.
Для заданной матрицы A(3,3), найти обратную А в -1 степени.

Нужно ли самому в код вписывать свои значения матрицы?

C
1
2
3
4
5
6
7
8
9
10
11
#include <iostream.h>
#define I 3
#define J 3
main ()
{ 
int [I][J]= {1, 2, 3},
             {4, 5, 6}, 
             {1, 2, 1};
.....
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
11.09.2012, 07:06     Найти обратную матрицу #2
Первая строка вашего опуса наводит на сильные подозрения, что прогать нужно в С++, а не в С.
Уточните этот вопрос для начала.
nikolas982
1 / 1 / 0
Регистрация: 10.09.2012
Сообщений: 49
11.09.2012, 20:18  [ТС]     Найти обратную матрицу #3
Ооой ошибся темой видимо.
На C++ нужно.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.09.2012, 04:36     Найти обратную матрицу #4
похоже, нужна функция получения алгебраического дополнения
C
1
int f(int m[3][3], int i, int j);
nikolas982
1 / 1 / 0
Регистрация: 10.09.2012
Сообщений: 49
12.09.2012, 08:54  [ТС]     Найти обратную матрицу #5
К сожалению дополнение не нужно.Думал на счет этого, получается на порядок сложнее (для меня).
Все равно спасибо, за помощь.
Решение на листе я произвел, а вот как написать это в программе не могу понять.
Det=-10
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.09.2012, 10:03     Найти обратную матрицу #6
Цитата Сообщение от nikolas982 Посмотреть сообщение
Решение на листе я произвел, а вот как написать это в программе не могу понять.
там два способа: через алгебраические дополнения и через единичную матрицу
второй закодить сложнее, чем первый

Добавлено через 43 секунды
Цитата Сообщение от nikolas982 Посмотреть сообщение
Det=-10
это тоже надо вычислять в программе
nikolas982
1 / 1 / 0
Регистрация: 10.09.2012
Сообщений: 49
12.09.2012, 21:02  [ТС]     Найти обратную матрицу #7
accept, не могли бы Вы помочь?
Прочитал все что можно про матрицы в справочнике по математике.Бронштейн И. Н.Решил, а записать полученное на С++ не получается.

Буду очень благодарен...

Добавлено через 3 часа 53 минуты
С усилиями получилось записать решение в программу (а не на листе, как прежде), а записать решение вычисления обратной не выходит.
Будьте добры, посмотрите пожалуйста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#define n 3
main()
{
int a [n][n];
int i, j, det;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{printf("Введите элемент матрицы [%d][%d] ",i+1,j+1); scanf("%d",&a[i][j]);}
cout<<"вид матрицы:\n";
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%7d",a[i][j]);
puts("\n");
}
det=((a[0][0]*a[1][1]*a[2][2]) + (a[0][1]*a[1][2]*a[2][0])+ (a[1][0]*a[0][2]*a[2][1]) - (a[2][0]*a[1][1]*a[0][2]) - (a[0][0]*a[2][1]*a[1][2]) - (a[1][0]*a[0][1]*a[2][2]));
printf("Определитель равен = %d\n", det);
return 0;
}
IrineK
Заблокирован
12.09.2012, 21:16     Найти обратную матрицу #8
К сожалению, все несколько сложней:

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
//Обратная матрица [3][3]
 
#include <iostream>
#include <iomanip>
#include <ctime>
 
using namespace std;
 
//алгебраическое допополнение к элементу a[row][col]
double add(double a[3][3],int row, int col)
{   double b[2][2];
    int i,j,bi,bj;
 
    for(i=0, bi=0;i<3;i++)
    {   if(i!=row)
        {   for(j=0, bj=0;j<3;j++)
                if(j!=col)
                {   b[bi][bj]=a[i][j];
                    bj++;
                }
            bi++;
        }
    }
    
    if((row+col)%2)
        return b[0][1]*b[1][0] - b[0][0]*b[1][1];
    else
        return b[0][0]*b[1][1] - b[0][1]*b[1][0];
}
 
 
//определитель матрицы
double det(double a[3][3])
{   int i;
    double sum;
 
    for(i=0, sum=0.;i<3;i++)
        sum += a[i][0]*add(a,i,0);
    
    return sum;
}
 
 
//обратная матрица
void inverse(double a[3][3], double d)
{   double a1[3][3], cur;
    int i,j;
    
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            a1[i][j] = add(a,i,j) / d;
 
    for(i=0;i<3;i++)
        for(j=i+1;j<3;j++)
        {   cur = a1[i][j];
            a1[i][j] = a1[j][i];
            a1[j][i] = cur;
        }
 
    cout<<"\nInverse:\n";
    for(i=0;i<3;i++)
    {   for(j=0;j<3;j++)
            cout<<setw(7) << a1[i][j];
        cout<<"\n";
    } 
 
}
 
 
int main()
{   double arr[3][3], determinant;
    int i,j;
    
    srand(time(NULL));
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            arr[i][j] = 1.5 * (rand()%9 - 5);
 
    cout<<"Array:\n";
    for(i=0;i<3;i++)
    {   for(j=0;j<3;j++)
            cout<<setw(7)<<setiosflags(ios::fixed) << setprecision(2)<<arr[i][j];
        cout<<"\n";
    } 
 
    determinant = det(arr);
    cout<<"\nDeterminant: "<<determinant<<"\n";
 
    if(determinant) inverse(arr,determinant);
    else cout<<"Inverse impossible";
    
    getchar();
    return 0;
}
Миниатюры
Найти обратную матрицу  
nikolas982
1 / 1 / 0
Регистрация: 10.09.2012
Сообщений: 49
12.09.2012, 22:04  [ТС]     Найти обратную матрицу #9
Спасибо большое, Вы очень помогли мне!)
Меня интересует можно ли дополнить, написанный мною код, формулой нахождения обратной матрицы?

Получается найти обратную матрицу, если изначально задать её (записать цифры), а тут получается, что я сам ввожу элементы матрицы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2016, 20:10     Найти обратную матрицу
Еще ссылки по теме:

Найти матрицу С C++
Найти обратную величину по модулю C++
СЛАУ в обратную сторону C++

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

Или воспользуйтесь поиском по форуму:
Berserkus
0 / 0 / 0
Регистрация: 24.09.2015
Сообщений: 46
30.05.2016, 20:10     Найти обратную матрицу #10
а можно код для матрицы размер которой вводит пользователь?Буду очень благодарен.
Yandex
Объявления
30.05.2016, 20:10     Найти обратную матрицу
Ответ Создать тему
Опции темы

Текущее время: 21:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru