Gauss-Jordan matrix inversion: Difference between revisions
Content added Content deleted
m (→{{header|ATS}}) |
|||
Line 1,124: | Line 1,124: | ||
end |
end |
||
fn |
fn |
||
subtract_normalized_pivot_row |
subtract_normalized_pivot_row |
||
(i : one_to_n, j : one_to_n) :<!refwrt> void = |
(i : one_to_n, j : one_to_n) :<!refwrt> void = |
||
Line 1,137: | Line 1,137: | ||
needlessly_set_to_value (A, i, j, Zero); |
needlessly_set_to_value (A, i, j, Zero); |
||
for* {k : int | j + 1 <= k; k <= n + 1} .<(n + 1) - k>. |
for* {k : int | j + 1 <= k; k <= n + 1} .<(n + 1) - k>. |
||
(k : int k) => |
|||
(k := succ j; k <> succ n; k := succ k) |
|||
A[i, k] := A[i, k] - (A[j, k] * lead_val); |
|||
for* {k : int | 1 <= k; k <= n + 1} .<(n + 1) - k>. |
|||
(k : int k) => |
|||
(k := 1; k <> succ n; k := succ k) |
|||
B[i, k] := B[i, k] - (B[j, k] * lead_val) |
|||
end |
|||
end |
|||
fn {} |
|||
subtract_normalized_pivot_row_B_only |
|||
(i : one_to_n, j : one_to_n) :<!refwrt> void = |
|||
let |
|||
prval [j : int] EQINT () = eqint_make_gint j |
|||
val lead_val = A[i, j] |
|||
in |
|||
if lead_val <> Zero then |
|||
let |
|||
var k : intGte 1 |
|||
in |
|||
needlessly_set_to_value (A, i, j, Zero); |
|||
for* {k : int | j + 1 <= k; k <= n + 1} |
|||
.<(n + 1) - k>. |
|||
(k : int k) => |
(k : int k) => |
||
(k := succ j; k <> succ n; k := succ k) |
(k := succ j; k <> succ n; k := succ k) |
||
Line 1,213: | Line 1,189: | ||
(i : int i) => |
(i : int i) => |
||
(i := 1; i <> j; i := succ i) |
(i := 1; i <> j; i := succ i) |
||
subtract_normalized_pivot_row (i, j); |
|||
for* {i : int | j + 1 <= i; i <= n + 1} |
for* {i : int | j + 1 <= i; i <= n + 1} |
||
.<(n + 1) - i>. |
.<(n + 1) - i>. |