Guest User

Untitled

a guest
Jan 16th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. double** getTransposed(double** matrix)
  6. {
  7. double** transposed = new double*[3];
  8. for (int i = 0; i < 3; i++) transposed[i] = new double[3];
  9. for (int i = 0; i < 3; i++)
  10. {
  11. for (int j = 0; j < 3; j++)
  12. {
  13. transposed[j][i] = matrix[i][j];
  14. }
  15. }
  16.  
  17. return transposed;
  18. }
  19.  
  20. void multiply(double** matrix, double number)
  21. {
  22. for (int i = 0; i < 3; i++)
  23. {
  24. for (int j = 0; j < 3; j++)
  25. {
  26. matrix[i][j] *= number;
  27. }
  28. }
  29. }
  30.  
  31. double** multiplyMatrix(double** matrix, double** another)
  32. {
  33. double** product = new double*[3];
  34. for (int i = 0; i < 3; i++) product[i] = new double[3];
  35.  
  36. for (int i = 0; i < 3; i++)
  37. {
  38. for (int j = 0; j < 3; j++)
  39. {
  40. double result = 0;
  41. for (int k = 0; k < 3; k++)
  42. {
  43. result += matrix[i][k] * another[k][j];
  44. }
  45. product[i][j] = result;
  46. }
  47. }
  48.  
  49. return product;
  50. }
  51.  
  52. void add(double** matrix, double number)
  53. {
  54. for (int i = 0; i < 3; i++)
  55. {
  56. matrix[i][i] += number;
  57. }
  58. }
  59.  
  60. void divide(double** matrix, double number)
  61. {
  62. for (int i = 0; i < 3; i++)
  63. {
  64. for (int j = 0; j < 3; j++)
  65. {
  66. matrix[i][j] /= number;
  67. }
  68. }
  69. }
  70.  
  71. double getMinor(double** matrix, int row, int column)
  72. {
  73. double numbers[4];
  74. int index = 0;
  75.  
  76. for (int i = 0; i < 3; i++)
  77. {
  78. for (int j = 0; j < 3; j++)
  79. {
  80. if (i != row && j != column)
  81. {
  82. numbers[index] = matrix[i][j];
  83. index++;
  84. }
  85. }
  86. }
  87.  
  88. return numbers[0] * numbers[3] - numbers[1] * numbers[2];
  89. }
  90.  
  91. double getThreeDimensionDeterminant(double** matrix)
  92. {
  93. double firstSum = matrix[0][0] * matrix[1][1] * matrix[2][2]
  94. + matrix[0][1] * matrix[1][2] * matrix[2][0]
  95. + matrix[1][0] * matrix[2][1] * matrix[0][2];
  96.  
  97. double secondSum = matrix[0][2] * matrix[1][1] * matrix[2][0]
  98. + matrix[0][1] * matrix[1][0] * matrix[2][2]
  99. + matrix[1][2] * matrix[2][1] * matrix[0][0];
  100.  
  101. return firstSum - secondSum;
  102. }
  103.  
  104. double** getInverse(double** matrix)
  105. {
  106. double** transposed = getTransposed(matrix);
  107.  
  108. double** minorMatrix = new double*[3];
  109. for (int i = 0; i < 3; i++) minorMatrix[i] = new double[3];
  110.  
  111. int multiplier = 1;
  112.  
  113. for (int i = 0; i < 3; i++)
  114. {
  115. for (int j = 0; j < 3; j++)
  116. {
  117. minorMatrix[i][j] = getMinor(transposed, i, j)*multiplier;
  118. multiplier *= -1;
  119. }
  120. }
  121.  
  122. int determinant = getThreeDimensionDeterminant(matrix);
  123.  
  124. divide(minorMatrix, determinant);
  125.  
  126. delete[] transposed;
  127. return minorMatrix;
  128. }
  129.  
  130. double** calculateResult(double** a, double** c)
  131. {
  132. //-3AtC
  133. double** aTransposed = getTransposed(a);
  134. multiply(aTransposed, -3);
  135.  
  136. double** rightSide = multiplyMatrix(aTransposed, c);
  137.  
  138. //X(A+5)
  139. add(a, 5);
  140.  
  141. double** aInverse = getInverse(a);
  142. rightSide = multiplyMatrix(rightSide, aInverse);
  143.  
  144. delete[] aTransposed;
  145. delete[] aInverse;
  146. return rightSide;
  147. }
  148.  
  149. int main()
  150. {
  151. double** a = new double*[3];
  152. for (int i = 0; i < 3; i++) a[i] = new double[3];
  153.  
  154. double** c = new double*[3];
  155. for (int i = 0; i < 3; i++) c[i] = new double[3];
  156.  
  157. cout << "A = ";
  158. for (int i = 0; i < 3; i++)
  159. {
  160. for (int j = 0; j < 3; j++)
  161. {
  162. cin >> a[i][j];
  163. }
  164. }
  165.  
  166. cout << "C = ";
  167. for (int i = 0; i < 3; i++)
  168. {
  169. for (int j = 0; j < 3; j++)
  170. {
  171. cin >> c[i][j];
  172. }
  173. }
  174.  
  175. double** result = calculateResult(a, c);
  176. for (int i = 0; i < 3; i++)
  177. {
  178. for (int j = 0; j < 3; j++)
  179. {
  180. cout << result[i][j]<<" ";
  181. }
  182. cout << endl;
  183. }
  184.  
  185. delete[] result;
  186. delete[] a;
  187. delete[] c;
  188.  
  189. system("pause");
  190. return 0;
  191. }
Add Comment
Please, Sign In to add comment