UNPKG

ziko

Version:

A versatile JavaScript library offering a rich set of Hyperscript Based UI components, advanced mathematical utilities, interactivity ,animations, client side routing and more ...

52 lines 1.64 kB
export function matrix_inverse(M) { if(M.row !== M.cols) throw Error('is not a square matrix"') if (M.det === 0) throw Error("determinant should not equal 0"); const { arr } = M if (arr.length !== arr[0].length) return; var i = 0, ii = 0, j = 0, dim = arr.length, e = 0; var I = [], C = []; for (i = 0; i < dim; i += 1) { I[I.length] = []; C[C.length] = []; for (j = 0; j < dim; j += 1) { if (i == j) I[i][j] = 1; else I[i][j] = 0; C[i][j] = arr[i][j]; } } for (i = 0; i < dim; i += 1) { e = C[i][i]; if (e == 0) { for (ii = i + 1; ii < dim; ii += 1) { if (C[ii][i] != 0) { for (j = 0; j < dim; j++) { e = C[i][j]; C[i][j] = C[ii][j]; C[ii][j] = e; e = I[i][j]; I[i][j] = I[ii][j]; I[ii][j] = e; } break; } } e = C[i][i]; if (e == 0) return; } for (j = 0; j < dim; j++) { C[i][j] = C[i][j] / e; I[i][j] = I[i][j] / e; } for (ii = 0; ii < dim; ii++) { if (ii == i) { continue; } e = C[ii][i]; for (j = 0; j < dim; j++) { C[ii][j] -= e * C[i][j]; I[ii][j] -= e * I[i][j]; } } } return new M.constructor(I); }