tsmathlib
Version:
Typescript Version Math/Physics/CG Library
63 lines (56 loc) • 1.49 kB
text/typescript
import { Matrix } from '../math/matrix'
/* =========================================================================
*
* gaussian_elimination.ts
*
*
* Parameters
* ----------
* N: coefficients for linear system equations
*
* Return
* ----------
*
* ========================================================================= */
export function gaussian_elimination_solve(N: Matrix) {
let result = 0
let i
let j
let k = 0
let n = N.rows()
for (k = 0; k < n - 1; k++) {
let p = k
let max = Math.abs(N.getDataByIndexs(k, k))
for (i = k + 1; i < n; i++) {
if (Math.abs(N.getDataByIndexs(i, k)) > max) {
p = i
max = Math.abs(N.getDataByIndexs(i, k))
}
}
if (p !== k) {
for (i = k; i <= n; i++) {
let tmp = N.getDataByIndexs(k, i)
N.setDataByIndexs(k, i, N.getDataByIndexs(p, i))
N.setDataByIndexs(p, i, tmp)
}
}
for (i = k + 1; i < n; i++) {
for (j = k + 1; j <= n; j++) {
result =
N.getDataByIndexs(i, j) -
(N.getDataByIndexs(k, j) * N.getDataByIndexs(i, k)) /
N.getDataByIndexs(k, k)
N.setDataByIndexs(i, j, result)
}
}
}
let ans = []
for (k = n - 1; k >= 0; k--) {
for (j = k + 1; j < n; j++) {
result = N.getDataByIndexs(k, n) - N.getDataByIndexs(k, j) * ans[j]
N.setDataByIndexs(k, n, result)
}
ans[k] = N.getDataByIndexs(k, n) / N.getDataByIndexs(k, k)
}
return ans
}