- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
public class Matrix {
private float matrix[][];
private int dim;
public Matrix(int dim) {
this.dim = dim;
this.matrix = new float[dim][dim];
}
public void productOfTwo(Matrix src, Matrix dest) {
if (src.dim == this.dim) {
dest.dim = this.dim;
Matrix[] temp = new Matrix[this.dim];
for (int i = 0; i < this.dim; i++) {
temp[i] = new Matrix(this.dim);
}
for (int i = 0; i < this.dim; i++) {
for (int j = 0; j < this.dim; j++) {
for (int k = 0; k < this.dim; k++) {
temp[k].matrix[i][j] = this.matrix[i][k] * src.matrix[k][j];
}
}
}
for (int i = 0; i < this.dim; i++) {
dest.sum(temp[i]);
}
} else {
System.out.println(" An error occured: Dimensions of matrices do not match");
}
}
public float findDet() {
if (this.dim == 1) {
return this.matrix[0][0];
} else if (this.dim == 2) {
return this.matrix[0][0] * this.matrix[1][1] - this.matrix[0][1] * this.matrix[1][0];
} else {
float result = 0;
Matrix minor = new Matrix(this.dim - 1);
for (int i = 0; i < this.dim; i++) {
for (int j = 1; j < this.dim; j++) {
System.arraycopy(this.matrix[j], 0, minor.matrix[j - 1], 0, i);
System.arraycopy(this.matrix[j], i + 1, minor.matrix[j - 1], i, this.dim - (i + 1));
}
result += Math.pow(-1, i) * this.matrix[0][i] * minor.findDet();
}
return result;
}
}
Всем доброго времени суток! Прошу к Вашему вниманию алгоритм нахождения произведения двух матриц(умножаем слева направо) и нахождения детерминанта разложением по столбцу(рекурсия). Прошу оценить, по всей строгости.
Заранее спасибо!