С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Подскажите, пожалуйста, какие есть способы или алгоритмы написания программы для нахождения обратной матрицы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2010, 16:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Какие есть способы или алгоритмы написания программы для нахождения обратной матрицы (C++):

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

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

Метод итераций для нахождения обратной матрицы - C++
Люди, подскажите как написать программу нахождения обратной матрицы методом итераций, или хотя бы решения системы уравнений

Какие есть способы принять лямбду в кач-ве аргумента? - C++
добрый день, господа. имею два вопроса. вопрос раз: какие способы есть принять лямбду в кач-ве аргумента функции.. ..помимо...

Какие есть способы задания огромных массивов - более 2Gb? - C++
Что делать, если требуется массив значительно превышающий максимально допустимую длину в MVS (2Gb)? Значительно превышающий = на порядок...

Какие еще есть способы создания визуальных приложений кроме WinApi? - C++
Здравствуйте, я так понимаю под Windows оконные приложения создаются на WinAPI. Хотел спросить есть ли другие инструменты для создания окон...

11
neske
1505 / 872 / 84
Регистрация: 26.03.2010
Сообщений: 2,987
22.04.2010, 16:28 #2
Обратная матрица, это перевернутая первоначальная? Это подразумевается?
0
&Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
22.04.2010, 16:31  [ТС] #3
Это когда союзная матрица делится на определитель...
0
cibertronic
256 / 143 / 13
Регистрация: 27.12.2009
Сообщений: 908
22.04.2010, 16:37 #4
Цитата Сообщение от neske Посмотреть сообщение
Обратная матрица, это перевернутая первоначальная? Это подразумевается?
обратная матрица это матрица равная произведению матрици и еденичной матрицы
http://ru.wikipedia.org/wiki/Обратная_матрица
0
&Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
22.04.2010, 20:02  [ТС] #5
Цитата Сообщение от cibertronic Посмотреть сообщение
обратная матрица это матрица равная произведению матрици и еденичной матрицы
http://ru.wikipedia.org/wiki/Обратная_матрица
Это понятно но мне надо программа, или хотя бы пример, как её написать.

Добавлено через 3 часа 21 минуту
Помогите пожалуйста никак не могу понять метод Гаусса.
0
&Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
25.04.2010, 19:07  [ТС] #6
Помогите кто нибудь-объясните метод Гаусса
0
valeriikozlov
Эксперт С++
4675 / 2501 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.04.2010, 19:10 #7
&Alex&, На форуме уже были примеры реализации этого метода. Воспользуйтесь поиском.
0
&Alex&
19 / 19 / 1
Регистрация: 21.03.2010
Сообщений: 221
25.04.2010, 19:27  [ТС] #8
Я нашёл только на С++ и то очень не понятно. Помогите очень надо!
0
valeriikozlov
Эксперт С++
4675 / 2501 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.04.2010, 19:41 #9
У Вас не получается перевод с С++ на С ? или Вы не можете понять сам метод? Понять сам метод - лучше читать литературу, ее достаточно по этому вопросу. Я считаю что кто бы здесь не пытался Вам объяснить сам метод, лучше уже написанного в литературе он этого не сделает. А если просто помочь перевести, то пишите код и спрашивайте, что не понятно, в этом Вам здесь помогут.
0
&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();
}
2
valeriikozlov
Эксперт С++
4675 / 2501 / 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() он нужен)
1
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 предупреждения. Помогите запустить програмку.
0
18.05.2010, 22:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2010, 22:38
Привет! Вот еще темы с ответами:

Программа нахождения обратной матрицы - C++
Нужно написать программу нахождения обратной матрицы

Распараллеливание метода нахождения обратной матрицы - C++
Здравствуйте! Помогите пожалуйста. Мне нужно распараллелить метод нахождения обратной матрицы. Посоветуйте литературу, касающуюся...

Какие существуют способы выделения памяти для переменных? - C++
А какие существуют способы выделять память для переменных?

Какие функции использовать для написания расширенного HyperTerminal-a? - C++
Существует задача написания расширенного HyperTerminal-a. Подскажите пожалуйста какие функции для этого лучше использовать. С модемами и...


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

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

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