fork download
  1. /*
  2. Name:Pritom Sharma
  3. Id: 230241008
  4. Report:Crsmers Rule Method
  5. */
  6.  
  7. #include <iostream>
  8. #include <iomanip>
  9. #include <vector>
  10.  
  11. using namespace std;
  12.  
  13. double determinant(vector<vector<double>> mat, int n) {
  14. double det = 0;
  15. if (n == 1) {
  16. return mat[0][0];
  17. }
  18.  
  19. vector<vector<double>> temp(n - 1, vector<double>(n - 1));
  20. int sign = 1;
  21.  
  22. for (int f = 0; f < n; f++) {
  23. int i = 0, j = 0;
  24. for (int row = 1; row < n; row++) {
  25. for (int col = 0; col < n; col++) {
  26. if (col != f) {
  27. temp[i][j++] = mat[row][col];
  28. if (j == n - 1) {
  29. j = 0;
  30. i++;
  31. }
  32. }
  33. }
  34. }
  35. det += sign * mat[0][f] * determinant(temp, n - 1);
  36. sign = -sign;
  37. }
  38. return det;
  39. }
  40.  
  41. void cramersRule() {
  42. int n;
  43. cout << "Enter the order of square matrix: ";
  44. cin >> n;
  45.  
  46. vector<vector<double>> A(n, vector<double>(n));
  47. vector<double> B(n), X(n);
  48.  
  49. cout << "Enter coefficients of matrix A:\n";
  50. for (int i = 0; i < n; i++) {
  51. for (int j = 0; j < n; j++) {
  52. cin >> A[i][j];
  53. }
  54. }
  55.  
  56. cout << "Enter constants of vector B: ";
  57. for (int i = 0; i < n; i++) {
  58. cin >> B[i];
  59. }
  60.  
  61. double detA = determinant(A, n);
  62. cout << "\nDeterminant of A: " << fixed << setprecision(3) << detA << endl;
  63.  
  64. if (detA == 0) {
  65. cout << "Matrix is singular; the system is not uniquely solvable.\n";
  66. return;
  67. }
  68.  
  69.  
  70. vector<vector<double>> invA(n, vector<double>(n));
  71. if (n == 2) {
  72.  
  73. invA[0][0] = A[1][1] / detA;
  74. invA[0][1] = -A[0][1] / detA;
  75. invA[1][0] = -A[1][0] / detA;
  76. invA[1][1] = A[0][0] / detA;
  77.  
  78. cout << "\nInverse of matrix A:\n";
  79. for (int i = 0; i < n; i++) {
  80. for (int j = 0; j < n; j++) {
  81. cout << fixed << setprecision(4) << invA[i][j] << "\t";
  82. }
  83. cout << endl;
  84. }
  85. }
  86.  
  87.  
  88. vector<vector<double>> temp = A;
  89. for (int i = 0; i < n; i++) {
  90. for (int j = 0; j < n; j++) {
  91. temp[j][i] = B[j];
  92. }
  93. X[i] = determinant(temp, n) / detA;
  94. temp = A; // Reset temp matrix
  95. }
  96.  
  97. cout << "\nThe solution using Cramer's Rule:\n";
  98. for (int i = 0; i < n; i++) {
  99. cout << "x" << i + 1 << " = " << fixed << setprecision(6) << X[i] << endl;
  100. }
  101. }
  102.  
  103. int main() {
  104. cramersRule();
  105.  
  106. return 0;
  107. }
Success #stdin #stdout 0.01s 5284KB
stdin
2 5
-3 1
11 -4
stdout
Enter the order of square matrix: Enter coefficients of matrix A:
Enter constants of vector B: 
Determinant of A: 58.000

Inverse of matrix A:
0.1897	0.0517	
-0.0172	0.0862	

The solution using Cramer's Rule:
x1 = -0.758621
x2 = 0.068966