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

Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 48, средняя оценка - 5.00
&Alex&
 Аватар для &Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
22.04.2010, 16:25     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #1
Подскажите, пожалуйста, какие есть способы или алгоритмы написания программы для нахождения обратной матрицы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2010, 16:25     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы
Посмотрите здесь:

C++ Дан алгоритм нахождения обратной матрицы. По нему хочу написать код. Но непонятно по какому методу он работает.
Метод итераций для нахождения обратной матрицы C++
C++ Какие функции использовать для написания расширенного HyperTerminal-a?
C++ Какие есть способы задания огромных массивов - более 2Gb?
C++ Какие способы самые удобные/рациональные способы регистрации ошибок есть?
Нахождение обратной матрицы (есть код! ) C++
Программа нахождения обратной матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1425 / 792 / 55
Регистрация: 26.03.2010
Сообщений: 2,726
22.04.2010, 16:28     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #2
Обратная матрица, это перевернутая первоначальная? Это подразумевается?
&Alex&
 Аватар для &Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
22.04.2010, 16:31  [ТС]     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #3
Это когда союзная матрица делится на определитель...
cibertronic
 Аватар для cibertronic
255 / 142 / 13
Регистрация: 27.12.2009
Сообщений: 893
22.04.2010, 16:37     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #4
Цитата Сообщение от neske Посмотреть сообщение
Обратная матрица, это перевернутая первоначальная? Это подразумевается?
обратная матрица это матрица равная произведению матрици и еденичной матрицы
http://ru.wikipedia.org/wiki/Обратная_матрица
&Alex&
 Аватар для &Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
22.04.2010, 20:02  [ТС]     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #5
Цитата Сообщение от cibertronic Посмотреть сообщение
обратная матрица это матрица равная произведению матрици и еденичной матрицы
http://ru.wikipedia.org/wiki/Обратная_матрица
Это понятно но мне надо программа, или хотя бы пример, как её написать.

Добавлено через 3 часа 21 минуту
Помогите пожалуйста никак не могу понять метод Гаусса.
&Alex&
 Аватар для &Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
25.04.2010, 19:07  [ТС]     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #6
Помогите кто нибудь-объясните метод Гаусса
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.04.2010, 19:10     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #7
&Alex&, На форуме уже были примеры реализации этого метода. Воспользуйтесь поиском.
&Alex&
 Аватар для &Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
25.04.2010, 19:27  [ТС]     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #8
Я нашёл только на С++ и то очень не понятно. Помогите очень надо!
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.04.2010, 19:41     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #9
У Вас не получается перевод с С++ на С ? или Вы не можете понять сам метод? Понять сам метод - лучше читать литературу, ее достаточно по этому вопросу. Я считаю что кто бы здесь не пытался Вам объяснить сам метод, лучше уже написанного в литературе он этого не сделает. А если просто помочь перевести, то пишите код и спрашивайте, что не понятно, в этом Вам здесь помогут.
&Alex&
 Аватар для &Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
25.04.2010, 23:31  [ТС]     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #10
Цитата Сообщение от valeriikozlov Посмотреть сообщение
У Вас не получается перевод с С++ на С ? или Вы не можете понять сам метод? Понять сам метод - лучше читать литературу, ее достаточно по этому вопросу. Я считаю что кто бы здесь не пытался Вам объяснить сам метод, лучше уже написанного в литературе он этого не сделает. А если просто помочь перевести, то пишите код и спрашивайте, что не понятно, в этом Вам здесь помогут.
Вот код, но его надо переделать на Си и исправить ошибки:
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
//вот метод гаусса
 #include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
#pragma hdrstop
#pragma argsused
//using namespace::std;
const int dim=20;
int InvMatrG(int n, float(*a)[dim], float e,float d)
{int i,j,k;
float y,w;
float b[dim],c[dim];
int z[dim];
d=1;
for(j=0;j<n;j++)
x[j]=j;
for (i=0;i<n;i++)
{k=i;
y=a[i][i];
if (fabs(w)>fabs(y))
{k=j;
y=w;}}
d*=y;
if (fabs(y)<e)
{cout<<"matrica virojdena";
getch();
}
for (j=0;j<n;j++){
         c[j]=a[j][k];
         a[j][k]=a[j][i];
         a[j][i]=-c[j]/y;
         a[i][j]=a[i][j]/y;
         b[j]=a[i][j];}
a[i][j]=1/y;
j=z[i];
z[i]=z[k];
z[k]=j;
for (k=0;k<n;k++)
if(k!=i)
for(j=0;j<n;j++)
if (j!=i)
a[k][i]-=b[j]*c[k];}
for (i=0;i<n;i++){
         k=z[i];
         if (k!=i){
                   for (j=0;j<n;j++)
                   {w=a[i][j];
                   a[i][j]=a[k][j];
                   a[k][j]=w;}
                   j=z[i];
                   z[i]=z[k];
                   d=-d;
         }}}
         int MatrIn (int n,float(*a)[dim]){
                   int i,j;
                   for(i=0;i<n;i++)
                            for (j=0;j<n;j++)
                                      cin>>a[i][j];}
         int MatrOut(intn,float(*a)[dim]){
                   int i,j;
                   for (i=0;i<n;i++)
                            for (j=0;j<n;j++)
                                      cout<<a[i][j]<<" ";}
         void main()
         {int n;
         float matr[dim][dim];
         float d;
         cout<<"\n vvedite razmernost'";
         cin>>n;
         cout<<"\n vvedite elemeti";
         MatrIn(n,(*matr)[n]);
         cout"\n tochnost'";
         cin>>e;
         InvMatrG(n,matr[][n],e,d);
         cout"\n obratnaya matrica";
         MatrOut(n,matr[][n]);
         getch();
         }
 
 //а вот
 
//Нахождение обратной матрицы методом расширенной матрицы
 
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
#pragma hdrstop
#pragma argsused
 
const int dim1=20;
const int dim2=40;
float **a,**a1;
int n;
//vvod matrici
int MatrIn()
{int i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
cin>>a[i][j];
}
//obraschenie matrici
int invMatr(float e)
{
         int i,j,k,n1;
         float f,f1;
         float matr[20][40];
         n1=2*n;
         for (int i=0;i<n;i++)
for (j=0;j<n1;j++)
if (j<n)
matr [i][j]=a[i][j];
else 
if (j==n+1)
matr[i][j]=1;
else
matr [i][j]=0;
         for (int i=0;i<n;i++)
         {k=i;
         f1=matr[i][j];
         while (fabs(f1)<e)
         {if (k<n)
         {
                   k++;
                   f1=matr[k][i];
         }
         else
         {
                   cout<<"matrica virojdena";
                   gatch();
         }
         for (j=i;j<n1;j++)
         {
                   f=matr[k][j];
                   matr[k][j]=matr[i][j];
                   matr[i][j]=f/f1;
         }
         for (k=0;k<n;k++)
                   if (k!=i)
                            for (j=n1-1;j>=i;j--)
                                      matr[k][j]=matr[k][j]-matr[i][j]*matr[k][j];
         }
         for (i=0;i<n;i++)
for (j=0;j<n;j++)
a[i][j]=matr[i][j+n];
         }
}
//vivod obratnoy matrici
int MatrOut()
{
         int i,j;
         for (i=0;i<n;i++)
for (j=0;j<n;j++)
cout<<a1[i][j]<<" ";
}
//glavnaya proga
void main()
{
         float e;
         cout<<"vvedite razm matrici";
         cin>>n;
         cout<<"vvedite cherez probel elementi metrici";
         a=new float*[n];
         MatrIn();
         a1=new float*[n];
         for (int i=0;i<n;i++)
                   a1[i]=new float[n];
         cout<<"vvedite tochnost' vichisleniya";
         cin>>e;
         InvMatr(e);
         cout<<"obratnaya matrica";
         MatrOut();
         getch();
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.04.2010, 05:55     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #11
Цитата Сообщение от &Alex& Посмотреть сообщение
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
#pragma hdrstop
#pragma argsused
Вот это заменяете на:
C
1
2
3
#include <stdio.h>
#include <conio.h>
#include <math.h>
В остальном (если я ничего не пропустил) разница только в вводе и выводе значений.
Например для C++ если написано:
C++
1
cout<<"vvedite razm matrici";
Это аналог для С:
C
1
printf("vvedite razm matrici");
Если для С++ написано:
C++
1
cout<<"\n vvedite razmernost'";
то это аналог для С:
C
1
printf("\n vvedite razmernost'");
Если для С++ написано:
C++
1
cout<<a1[i][j]<<" ";
то это аналог для С:
C
1
printf("a1[%d][%d] ", i, j);
Только внимательно со спецификатором формата (для С++ в команде "cout<<..." он не указывается, а для функции C printf() он нужен)

Если для С++ написано:
C++
1
cin>>n;
То для С это аналогично:
C
1
scanf("%d", &n);
Только внимательно со спецификатором формата (для С++ в команде "cin>>..." он не указывается, а для функции C scanf() он нужен)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2010, 22:38     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы
Еще ссылки по теме:

C++ Какие есть способы принять лямбду в кач-ве аргумента?
C++ Есть какая нибудь информация по созданию алгоритма или программы для автопилота
C++ Распараллеливание метода нахождения обратной матрицы
C++ Какие есть алгоритмы для нахождения циклических сдвигов в строке?
Какие существуют способы выделения памяти для переменных? C++

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

Или воспользуйтесь поиском по форуму:
SERGEY199100
15 / 15 / 0
Регистрация: 29.10.2009
Сообщений: 425
18.05.2010, 22:38     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #12
У меня эта прога не запускается (( Компилятор Си ++.

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
#include <vcl.h>
#include <conio.h>
#include <iostream.h>
#include <math.h>
#pragma hdrstop
#pragma argsused
 
const int dim1=20;
const int dim2=40;
float **a,**a1;
int n;
//vvod matrici
int MatrIn()
{int i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
cin>>a[i][j];
}
//obraschenie matrici
int invMatr(float e)
{
         int i,j,k,n1;
         float f,f1;
         float matr[20][40];
         n1=2*n;
         for (int i=0;i<n;i++)
for (j=0;j<n1;j++)
if (j<n)
matr [i][j]=a[i][j];
else 
if (j==n+1)
matr[i][j]=1;
else
matr [i][j]=0;
         for (int i=0;i<n;i++)
         {k=i;
         f1=matr[i][j];
         while (fabs(f1)<e)
         {if (k<n)
         {
                   k++;
                   f1=matr[k][i];
         }
         else
         {
                   cout<<"matrica virojdena";
                   gatch();
         }
         for (j=i;j<n1;j++)
         {
                   f=matr[k][j];
                   matr[k][j]=matr[i][j];
                   matr[i][j]=f/f1;
         }
         for (k=0;k<n;k++)
                   if (k!=i)
                            for (j=n1-1;j>=i;j--)
                                      matr[k][j]=matr[k][j]-matr[i][j]*matr[k][j];
         }
         for (i=0;i<n;i++)
for (j=0;j<n;j++)
a[i][j]=matr[i][j+n];
         }
}
//vivod obratnoy matrici
int MatrOut()
{
         int i,j;
         for (i=0;i<n;i++)
for (j=0;j<n;j++)
cout<<a1[i][j]<<" ";
}
//glavnaya proga
void main()
{
         float e;
         cout<<"vvedite razm matrici";
         cin>>n;
         cout<<"vvedite cherez probel elementi metrici";
         a=new float*[n];
         MatrIn();
         a1=new float*[n];
         for (int i=0;i<n;i++)
                   a1[i]=new float[n];
         cout<<"vvedite tochnost' vichisleniya";
         cin>>e;
         InvMatr(e);
         cout<<"obratnaya matrica";
         MatrOut();
         getch();
}
ошибка тут: #include <vcl.h> это что такое ?
5 ошибок и 3 предупреждения. Помогите запустить програмку.
Yandex
Объявления
18.05.2010, 22:38     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы
Ответ Создать тему
Опции темы

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