fork download
  1. // C++ program to find the inverse of Matrix.
  2.  
  3. #include <iostream>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. // Function to Print matrix.
  8. void PrintMatrix(float** ar, int n, int m)
  9. {
  10. for (int i = 0; i < n; i++) {
  11. for (int j = 0; j < m; j++) {
  12. cout << ar[i][j] << " ";
  13. }
  14. printf("\n");
  15. }
  16. return;
  17. }
  18.  
  19. // Function to Print inverse matrix
  20. void PrintInverse(float** ar, int n, int m)
  21. {
  22. for (int i = 0; i < n; i++) {
  23. for (int j = n; j < m; j++) {
  24. printf("%.3f ", ar[i][j]);
  25. }
  26. printf("\n");
  27. }
  28. return;
  29. }
  30.  
  31. // Function to perform the inverse operation on the matrix.
  32. void InverseOfMatrix(float** matrix, int order)
  33. {
  34. // Matrix Declaration.
  35.  
  36. float temp;
  37.  
  38. // PrintMatrix function to print the element
  39. // of the matrix.
  40. printf("=== Matrix ===\n");
  41. PrintMatrix(matrix, order, order);
  42.  
  43. // Create the augmented matrix
  44. // Add the identity matrix
  45. // of order at the end of original matrix.
  46. for (int i = 0; i < order; i++) {
  47.  
  48. for (int j = 0; j < 2 * order; j++) {
  49.  
  50. // Add '1' at the diagonal places of
  51. // the matrix to create a identity matrix
  52. if (j == (i + order))
  53. matrix[i][j] = 1;
  54. }
  55. }
  56.  
  57. // Interchange the row of matrix,
  58. // interchanging of row will start from the last row
  59. for (int i = order - 1; i > 0; i--) {
  60.  
  61. // Swapping each and every element of the two rows
  62. // if (matrix[i - 1][0] < matrix[i][0])
  63. // for (int j = 0; j < 2 * order; j++) {
  64. //
  65. // // Swapping of the row, if above
  66. // // condition satisfied.
  67. // temp = matrix[i][j];
  68. // matrix[i][j] = matrix[i - 1][j];
  69. // matrix[i - 1][j] = temp;
  70. // }
  71.  
  72. // Directly swapping the rows using pointers saves
  73. // time
  74.  
  75. if (matrix[i - 1][0] < matrix[i][0]) {
  76. float* temp = matrix[i];
  77. matrix[i] = matrix[i - 1];
  78. matrix[i - 1] = temp;
  79. }
  80. }
  81.  
  82. // Print matrix after interchange operations.
  83. printf("\n=== Augmented Matrix ===\n");
  84. PrintMatrix(matrix, order, order * 2);
  85.  
  86. // Replace a row by sum of itself and a
  87. // constant multiple of another row of the matrix
  88. for (int i = 0; i < order; i++) {
  89.  
  90. for (int j = 0; j < order; j++) {
  91.  
  92. if (j != i) {
  93.  
  94. temp = matrix[j][i] / matrix[i][i];
  95. for (int k = 0; k < 2 * order; k++) {
  96.  
  97. matrix[j][k] -= matrix[i][k] * temp;
  98. }
  99. }
  100. }
  101. }
  102.  
  103. // Multiply each row by a nonzero integer.
  104. // Divide row element by the diagonal element
  105. for (int i = 0; i < order; i++) {
  106.  
  107. temp = matrix[i][i];
  108. for (int j = 0; j < 2 * order; j++) {
  109.  
  110. matrix[i][j] = matrix[i][j] / temp;
  111. }
  112. }
  113.  
  114. // print the resultant Inverse matrix.
  115. printf("\n=== Inverse Matrix ===\n");
  116. PrintInverse(matrix, order, 2 * order);
  117.  
  118. return;
  119. }
  120.  
  121. // Driver code
  122. int main()
  123. {
  124. int order;
  125.  
  126. // Order of the matrix
  127. // The matrix must be a square a matrix
  128. order = 6;
  129. /*
  130. float matrix[20][20] = { { 5, 7, 9 },
  131. { 4, 3, 8 },
  132. { 7, 5, 6 },
  133. { 0 } };
  134. */
  135. float** matrix = new float*[20];
  136. for (int i = 0; i < 20; i++)
  137. matrix[i] = new float[20];
  138. for (int i = 0; i < 7; i++){
  139. for(int j = 0; j < 7; j++){
  140. matrix[i][j] = static_cast <float> (rand()) / (static_cast <float> (RAND_MAX/10));
  141. }
  142. }
  143.  
  144. // Get the inverse of matrix
  145. InverseOfMatrix(matrix, order);
  146.  
  147. return 0;
  148. }
  149.  
Success #stdin #stdout 0s 5540KB
stdin
Standard input is empty
stdout
=== Matrix ===
8.40188 3.94383 7.83099 7.9844 9.11647 1.97551 
7.6823 2.77775 5.5397 4.77397 6.28871 3.64784 
9.5223 9.16195 6.35712 7.17297 1.41603 6.06969 
2.42887 1.37232 8.04177 1.56679 4.00944 1.2979 
9.98924 2.18257 5.12932 8.39112 6.1264 2.96032 
5.24287 4.93583 9.72775 2.92517 7.71358 5.26745 

=== Augmented Matrix ===
9.98924 2.18257 5.12932 8.39112 6.1264 2.96032 6.37552 0 0 0 1 0 
8.40188 3.94383 7.83099 7.9844 9.11647 1.97551 1 0 0 0 0 0 
7.6823 2.77775 5.5397 4.77397 6.28871 3.64784 5.13401 1 0 0 0 0 
9.5223 9.16195 6.35712 7.17297 1.41603 6.06969 0.163006 0 1 0 0 0 
2.42887 1.37232 8.04177 1.56679 4.00944 1.2979 1.08809 0 0 1 0 0 
5.24287 4.93583 9.72775 2.92517 7.71358 5.26745 7.69914 0 0 0 0 1 

=== Inverse Matrix ===
-1.803 0.834 0.071 0.209 -0.411 -0.481 
-2.283 0.214 0.118 -0.055 -0.392 -0.140 
-0.116 -0.076 0.018 0.221 0.050 -0.030 
1.899 -0.879 -0.042 -0.169 0.576 0.384 
0.305 0.090 -0.079 -0.158 -0.113 0.080 
4.108 -0.534 -0.076 -0.239 0.531 0.526