Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2016
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.85 KB | None | 0 0
  1. /**
  2. * Created by Rairun on 28.11.2016.
  3. */
  4. public abstract class QuadMatrix {
  5.  
  6. public abstract QuadMatrix createMatrix(int i);
  7.  
  8. public abstract double getEl(int m, int n);
  9.  
  10. public abstract void setEl(int m, int n, double element);
  11.  
  12. public abstract int getSize();
  13.  
  14. //Транспонирование матрицы
  15. public QuadMatrix transpMatrix(QuadMatrix q) {
  16. QuadMatrix q1 = createMatrix(q.getSize());
  17. for (int i = 0; i < q.getSize(); i++) {
  18. for (int j = 0; j < q.getSize(); j++) {
  19. q1.setEl(j, i, q.getEl(i, j));
  20. }
  21. }
  22. return q1;
  23. }
  24.  
  25. //Нахождение союзной матрицы
  26. public QuadMatrix sMatrix(QuadMatrix q) {
  27. double det = 0;
  28. QuadMatrix sq = createMatrix(q.getSize());
  29. for (int i = 0; i < q.getSize(); i++) {
  30. for (int j = 0; j < q.getSize(); j++) {
  31. if ((i + j) % 2 == 0) {
  32. det += determinant(delRC(q, i, j));
  33. } else {
  34. det -= determinant(delRC(q, i, j));
  35. }
  36. }
  37. }
  38. return sq;
  39. }
  40.  
  41.  
  42. //Нахождение обратной матрицы
  43. public QuadMatrix reverseMatrix(QuadMatrix q) {
  44. if (determinant(q) == 0) {
  45. return null;
  46. } else {
  47. QuadMatrix rMatrix = createMatrix(q.getSize());
  48. QuadMatrix sm = sMatrix(transpMatrix(q));
  49. for (int i = 0; i < q.getSize(); i++) {
  50. for (int j = 0; j < q.getSize(); j++) {
  51. rMatrix.setEl(i, j, (1 / determinant(q) * sm.getEl(i, j)));
  52. }
  53. }
  54. return rMatrix;
  55. }
  56. }
  57.  
  58. //Вычисление детерминанта
  59. public double determinant(QuadMatrix q) {
  60. double det = 0;
  61. if (q.getSize() == 1) {
  62. return q.getEl(0, 0);
  63. } else {
  64. for (int i = 0; i < q.getSize(); i++) {
  65. if (i % 2 == 0) {
  66. det += q.getEl(0, i) * determinant(delRC(q, 0, i));
  67. } else {
  68. det -= q.getEl(0, i) * determinant(delRC(q, 0, i));
  69. }
  70. }
  71. }
  72. return det;
  73. }
  74.  
  75. //Удаление определёной строки и столбца
  76. public QuadMatrix delRC(QuadMatrix q, int row, int column) {
  77. if (q.getSize() == 1) {
  78. return q;
  79. } else {
  80. QuadMatrix q1 = createMatrix(q.getSize() - 1);
  81. for (int i = 0, ki = 0; i < q1.getSize(); i++, ki++) {
  82. if (i == row) {
  83. for (int j = 0, kj = 0; j < q1.getSize(); j++, kj++) {
  84. if (j == column) {
  85. kj++;
  86. q1.setEl(i, j, q.getEl(ki + 1, kj));
  87. } else {
  88. q1.setEl(i, j, q.getEl(ki + 1, kj));
  89. }
  90. }
  91. ki++;
  92. } else {
  93. for (int j = 0, kj = 0; j < q1.getSize(); j++, kj++) {
  94. if (j == column) {
  95. kj++;
  96. q1.setEl(i, j, q.getEl(ki, kj));
  97. } else {
  98. q1.setEl(i, j, q.getEl(ki, kj));
  99. }
  100. }
  101. }
  102. }
  103. return q1;
  104. }
  105. }
  106.  
  107. //Перемножение матриц
  108. public void multMatrix(QuadMatrix q1, QuadMatrix q2) {
  109. QuadMatrix qm = createMatrix(getSize());
  110. double sum = 0;
  111. for (int i = 0; i < getSize(); i++) {
  112. for (int j = 0; j < getSize(); j++) {
  113. for (int k = 0; k < getSize(); k++) {
  114. sum += q1.getEl(i, k) * q2.getEl(k, j);
  115. }
  116. qm.setEl(i, j, sum);
  117. }
  118. }
  119. }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement