Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Created by Rairun on 28.11.2016.
- */
- public abstract class QuadMatrix {
- public abstract QuadMatrix createMatrix(int i);
- public abstract double getEl(int m, int n);
- public abstract void setEl(int m, int n, double element);
- public abstract int getSize();
- //Транспонирование матрицы
- public QuadMatrix transpMatrix(QuadMatrix q) {
- QuadMatrix q1 = createMatrix(q.getSize());
- for (int i = 0; i < q.getSize(); i++) {
- for (int j = 0; j < q.getSize(); j++) {
- q1.setEl(j, i, q.getEl(i, j));
- }
- }
- return q1;
- }
- //Нахождение союзной матрицы
- public QuadMatrix sMatrix(QuadMatrix q) {
- double det = 0;
- QuadMatrix sq = createMatrix(q.getSize());
- for (int i = 0; i < q.getSize(); i++) {
- for (int j = 0; j < q.getSize(); j++) {
- if ((i + j) % 2 == 0) {
- det += determinant(delRC(q, i, j));
- } else {
- det -= determinant(delRC(q, i, j));
- }
- }
- }
- return sq;
- }
- //Нахождение обратной матрицы
- public QuadMatrix reverseMatrix(QuadMatrix q) {
- if (determinant(q) == 0) {
- return null;
- } else {
- QuadMatrix rMatrix = createMatrix(q.getSize());
- QuadMatrix sm = sMatrix(transpMatrix(q));
- for (int i = 0; i < q.getSize(); i++) {
- for (int j = 0; j < q.getSize(); j++) {
- rMatrix.setEl(i, j, (1 / determinant(q) * sm.getEl(i, j)));
- }
- }
- return rMatrix;
- }
- }
- //Вычисление детерминанта
- public double determinant(QuadMatrix q) {
- double det = 0;
- if (q.getSize() == 1) {
- return q.getEl(0, 0);
- } else {
- for (int i = 0; i < q.getSize(); i++) {
- if (i % 2 == 0) {
- det += q.getEl(0, i) * determinant(delRC(q, 0, i));
- } else {
- det -= q.getEl(0, i) * determinant(delRC(q, 0, i));
- }
- }
- }
- return det;
- }
- //Удаление определёной строки и столбца
- public QuadMatrix delRC(QuadMatrix q, int row, int column) {
- if (q.getSize() == 1) {
- return q;
- } else {
- QuadMatrix q1 = createMatrix(q.getSize() - 1);
- for (int i = 0, ki = 0; i < q1.getSize(); i++, ki++) {
- if (i == row) {
- for (int j = 0, kj = 0; j < q1.getSize(); j++, kj++) {
- if (j == column) {
- kj++;
- q1.setEl(i, j, q.getEl(ki + 1, kj));
- } else {
- q1.setEl(i, j, q.getEl(ki + 1, kj));
- }
- }
- ki++;
- } else {
- for (int j = 0, kj = 0; j < q1.getSize(); j++, kj++) {
- if (j == column) {
- kj++;
- q1.setEl(i, j, q.getEl(ki, kj));
- } else {
- q1.setEl(i, j, q.getEl(ki, kj));
- }
- }
- }
- }
- return q1;
- }
- }
- //Перемножение матриц
- public void multMatrix(QuadMatrix q1, QuadMatrix q2) {
- QuadMatrix qm = createMatrix(getSize());
- double sum = 0;
- for (int i = 0; i < getSize(); i++) {
- for (int j = 0; j < getSize(); j++) {
- for (int k = 0; k < getSize(); k++) {
- sum += q1.getEl(i, k) * q2.getEl(k, j);
- }
- qm.setEl(i, j, sum);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement