Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/41: Рейтинг темы: голосов - 41, средняя оценка - 5.00
20 / 20 / 3
Регистрация: 21.03.2010
Сообщений: 221
1

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

22.04.2010, 16:25. Просмотров 7375. Ответов 11
Метки нет (Все метки)


Подскажите, пожалуйста, какие есть способы или алгоритмы написания программы для нахождения обратной матрицы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2010, 16:25
Ответы с готовыми решениями:

Какие есть алгоритмы для нахождения циклических сдвигов в строке?
Какие есть алгоритмы для нахождения циклических сдвигов в строке?

А какие есть способы написания кода с параллельным просмотром в браузере?
Типа LiveReload, или по принципу редактора Brackets. подскажите, пожалуйста, все способы,...

Какие есть способы вычисления регистра EIP внутри программы?
Подскажите пожалуйста какие есть способы вычисления регистра EIP внутри программы, кроме такого:...

Какие есть самые простые способы защиты своей программы от перепродажи?
Какие есть самые простые способы защиты своей программы от перепродажи? Хотелось бы найти какой то...

11
1545 / 911 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
22.04.2010, 16:28 2
Обратная матрица, это перевернутая первоначальная? Это подразумевается?
0
20 / 20 / 3
Регистрация: 21.03.2010
Сообщений: 221
22.04.2010, 16:31  [ТС] 3
Это когда союзная матрица делится на определитель...
0
257 / 144 / 18
Регистрация: 27.12.2009
Сообщений: 909
22.04.2010, 16:37 4
Цитата Сообщение от neske Посмотреть сообщение
Обратная матрица, это перевернутая первоначальная? Это подразумевается?
обратная матрица это матрица равная произведению матрици и еденичной матрицы
http://ru.wikipedia.org/wiki/Обратная_матрица
0
20 / 20 / 3
Регистрация: 21.03.2010
Сообщений: 221
22.04.2010, 20:02  [ТС] 5
Цитата Сообщение от cibertronic Посмотреть сообщение
обратная матрица это матрица равная произведению матрици и еденичной матрицы
http://ru.wikipedia.org/wiki/Обратная_матрица
Это понятно но мне надо программа, или хотя бы пример, как её написать.

Добавлено через 3 часа 21 минуту
Помогите пожалуйста никак не могу понять метод Гаусса.
0
20 / 20 / 3
Регистрация: 21.03.2010
Сообщений: 221
25.04.2010, 19:07  [ТС] 6
Помогите кто нибудь-объясните метод Гаусса
0
Эксперт С++
4710 / 2535 / 753
Регистрация: 18.08.2009
Сообщений: 4,550
25.04.2010, 19:10 7
&Alex&, На форуме уже были примеры реализации этого метода. Воспользуйтесь поиском.
0
20 / 20 / 3
Регистрация: 21.03.2010
Сообщений: 221
25.04.2010, 19:27  [ТС] 8
Я нашёл только на С++ и то очень не понятно. Помогите очень надо!
0
Эксперт С++
4710 / 2535 / 753
Регистрация: 18.08.2009
Сообщений: 4,550
25.04.2010, 19:41 9
У Вас не получается перевод с С++ на С ? или Вы не можете понять сам метод? Понять сам метод - лучше читать литературу, ее достаточно по этому вопросу. Я считаю что кто бы здесь не пытался Вам объяснить сам метод, лучше уже написанного в литературе он этого не сделает. А если просто помочь перевести, то пишите код и спрашивайте, что не понятно, в этом Вам здесь помогут.
0
20 / 20 / 3
Регистрация: 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();
}
2
Эксперт С++
4710 / 2535 / 753
Регистрация: 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() он нужен)
1
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
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 предупреждения. Помогите запустить програмку.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2010, 22:38

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

Какие есть программы и способы запуска на windows 8 видеоролики вместо стандартной заставки?
Добрый день, Есть у меня несколько роликов, которые необходимо проигрывать после 10-15 минут...

Какие способы самые удобные/рациональные способы регистрации ошибок есть?
Задался вопросом, а как регистрировать ошибки? При этом чтобы и выглядело это красиво, и понятно...

Какие программы нужны для написания программ на iOS?
какие программы нужны для написания программ на iOS?

Кто какие программы использует для написания батников?
Из тех кто их использует. Добавлено через 2 минуты Сегодня скачал Notepad2...

Какие есть способы для получение информации из таблиц, которые не связаны с формой?
какие есть способы для получение информации, таблицы которые не связан с формой... Пакажитэ...

Метод Гаусса, для нахождения обратной матрицы
Доброго времени суток, уважаемые форумчане! Большая просьба, проверьте код на правильность Это...


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

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

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