File tree Expand file tree Collapse file tree 3 files changed +56
-4
lines changed
Expand file tree Collapse file tree 3 files changed +56
-4
lines changed Original file line number Diff line number Diff line change @@ -175,4 +175,11 @@ int main() {
175175
176176 mult3 *= 6 ;
177177 mult3.print ();
178+ Matrix det_test ({
179+ {2 , 4 , 3 },
180+ {5 , 7 , 8 },
181+ {6 , 9 , 1 },
182+ });
183+
184+ cout << det_test.determinant () << endl;
178185}
Original file line number Diff line number Diff line change @@ -111,13 +111,53 @@ void swap(double *d1, double *d2) {
111111 *d2 = temp;
112112}
113113
114- Matrix& Matrix::transpose () {
114+ Matrix Matrix::transpose () {
115+ Matrix temp (*this );
115116 for (int y = 0 ; y < this ->size () - 1 ; y++) {
116117 for (int x = y + 1 ; x < this ->size (); x++) {
117- swap (&arr[y][x], &arr[x][y]);
118+ swap (&temp. arr [y][x], &temp. arr [x][y]);
118119 }
119120 }
120- return *this ;
121+ return temp;
122+ }
123+
124+ Matrix Matrix::minor (int _y, int _x) {
125+ Matrix temp (arr.size () - 1 );
126+ bool skip_x, skip_y = 0 ;
127+ for (int y = 0 ; y < temp.arr .size (); y++) {
128+ if (y == _y) skip_y = 1 ;
129+ skip_x = 0 ;
130+ for (int x = 0 ; x < temp.arr .size (); x++) {
131+ if (x == _x) skip_x = 1 ;
132+ temp.set (x, y, arr[y + skip_y][x + skip_x]);
133+ }
134+ }
135+ return temp;
136+ }
137+
138+ const double Matrix::determinant () {
139+ double det = 0 ;
140+ switch (arr.size ()) {
141+ case 1 : {
142+ det = arr[0 ][0 ];
143+ break ;
144+ }
145+ case 2 : {
146+ det = arr[0 ][0 ] * arr[1 ][1 ] - arr[1 ][0 ] * arr[0 ][1 ];
147+ break ;
148+ }
149+ default : {
150+ for (int i = 0 ; i < arr.size (); i++) {
151+ if (i % 2 ) {
152+ det -= arr[i][0 ] * this ->minor (i, 0 ).determinant ();
153+ } else {
154+ det += arr[i][0 ] * this ->minor (i, 0 ).determinant ();
155+ }
156+ }
157+ break ;
158+ }
159+ }
160+ return det;
121161}
122162
123163// операторы
Original file line number Diff line number Diff line change @@ -23,12 +23,17 @@ class Matrix {
2323 // геттеры
2424 double get (unsigned int x, unsigned int y);
2525 const unsigned int size ();
26+ const double determinant ();
2627
2728 void print ();
2829
2930 // преобразования
3031
31- Matrix& transpose ();
32+ Matrix transpose ();
33+ Matrix inverse ();
34+ Matrix minor (int i, int j);
35+ Matrix minor_matrix ();
36+ Matrix algebraic_additions ();
3237
3338 // операторы
3439
You can’t perform that action at this time.
0 commit comments