/**
* 矩阵乘法
* @param matrix_a 矩阵行
* @param matrix_c 矩阵列
* @returns 返回矩阵
*/
public MatrixMultiply(matrix_a: Float64Array, matrix_c: Float64Array): Float64Array {
const matrix: Float64Array = new Float64Array(matrix_a.length);
const length_a: number = Math.sqrt(matrix_a.length);
let matrix_b: Float64Array = new Float64Array(matrix_a.length);;
if (length_a === matrix_c.length) {
for (let i: number = 0; i < matrix_a.length; i++) {
matrix_b[i] = matrix_c[i % length_a];
}
} else {
matrix_b = Float64Array.from(matrix_c, value => value);
}
const length_b: number = Math.sqrt(matrix_b.length);
if (matrix_a.length === matrix_b.length) {
if ((length_a % 1 === 0 && length_b % 1 === 0) && (matrix_a.length > 3 && length_b > 3)) {
for (let i: number = 0; i < length_a; i++) {
for (let m: number = 0; m < length_a; m++) {
for (let n: number = 0; n < length_b; n++) {
matrix[i * length_a + m] += matrix_a[n * length_b + m] * matrix_b[i * length_a + n];
}
}
}
return matrix;
} else {
console.warn("请确定传入的矩阵长度能正常开方");
return undefined;
}
} else {
console.warn("请用两个长度相等的矩阵相乘");
return undefined;
}
}
核心代码就这几行
两个if分别是
a矩阵与b矩阵是否相等
a矩阵长度开方与b矩阵长度开方是否是整数 a矩阵长度与b矩阵长度是否大于3