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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 48, средняя оценка - 5.00
&Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
#1

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

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

Подскажите, пожалуйста, какие есть способы или алгоритмы написания программы для нахождения обратной матрицы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2010, 16:25     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы
Посмотрите здесь:
C++ Какие есть алгоритмы для нахождения циклических сдвигов в строке?
C++ Какие способы самые удобные/рациональные способы регистрации ошибок есть?
Метод итераций для нахождения обратной матрицы C++
C++ Какие есть способы принять лямбду в кач-ве аргумента?
C++ Какие есть способы задания огромных массивов - более 2Gb?
Программа нахождения обратной матрицы C++
C++ Распараллеливание метода нахождения обратной матрицы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1479 / 846 / 75
Регистрация: 26.03.2010
Сообщений: 2,904
22.04.2010, 16:28     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #2
Обратная матрица, это перевернутая первоначальная? Это подразумевается?
&Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
22.04.2010, 16:31  [ТС]     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #3
Это когда союзная матрица делится на определитель...
cibertronic
256 / 143 / 13
Регистрация: 27.12.2009
Сообщений: 893
22.04.2010, 16:37     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #4
Цитата Сообщение от neske Посмотреть сообщение
Обратная матрица, это перевернутая первоначальная? Это подразумевается?
обратная матрица это матрица равная произведению матрици и еденичной матрицы
http://ru.wikipedia.org/wiki/Обратная_матрица
&Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
22.04.2010, 20:02  [ТС]     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #5
Цитата Сообщение от cibertronic Посмотреть сообщение
обратная матрица это матрица равная произведению матрици и еденичной матрицы
http://ru.wikipedia.org/wiki/Обратная_матрица
Это понятно но мне надо программа, или хотя бы пример, как её написать.

Добавлено через 3 часа 21 минуту
Помогите пожалуйста никак не могу понять метод Гаусса.
&Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
25.04.2010, 19:07  [ТС]     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #6
Помогите кто нибудь-объясните метод Гаусса
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.04.2010, 19:10     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #7
&Alex&, На форуме уже были примеры реализации этого метода. Воспользуйтесь поиском.
&Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
25.04.2010, 19:27  [ТС]     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #8
Я нашёл только на С++ и то очень не понятно. Помогите очень надо!
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.04.2010, 19:41     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы #9
У Вас не получается перевод с С++ на С ? или Вы не можете понять сам метод? Понять сам метод - лучше читать литературу, ее достаточно по этому вопросу. Я считаю что кто бы здесь не пытался Вам объяснить сам метод, лучше уже написанного в литературе он этого не сделает. А если просто помочь перевести, то пишите код и спрашивайте, что не понятно, в этом Вам здесь помогут.
&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++
4669 / 2495 / 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++ Какие функции использовать для написания расширенного HyperTerminal-a?
Нахождение обратной матрицы (есть код! ) C++
C++ Дан алгоритм нахождения обратной матрицы. По нему хочу написать код. Но непонятно по какому методу он работает.
C++ Есть какая нибудь информация по созданию алгоритма или программы для автопилота

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

Или воспользуйтесь поиском по форуму:
SERGEY199100
20 / 20 / 0
Регистрация: 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 предупреждения. Помогите запустить програмку.
Yandex
Объявления
18.05.2010, 22:38     Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы
Ответ Создать тему
Опции темы

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