Jump to content

Reduced row echelon form: Difference between revisions

no edit summary
(Updated D entry)
No edit summary
Line 1,430:
replace n e l = a ++ e : b
where (a, _ : b) = splitAt n l</lang>
 
=={{header|Icon}} and {{header|Unicon}}==
 
Works in both languages:
<lang unicon>procedure main(A)
tM := [[ 1, 2, -1, -4],
[ 2, 3, -1,-11],
[ -2, 0, -3, 22]]
showMat(rref(tM))
end
 
procedure rref(M)
lead := 1
rCount := *\M | stop("no Matrix?")
cCount := *(M[1]) | 0
every r := !rCount do {
i := r
while M[i,lead] = 0 do {
if (i+:=1) > rCount then {
i := r
if cCount < (lead +:= 1) then stop("can't reduce")
}
}
M[i] :=: M[r]
if 0 ~= (m0 := M[r,lead]) then every !M[r] /:= real(m0)
every r ~= (i := !rCount) do {
every !(mr := copy(M[r])) *:= M[i,lead]
every M[i,j := !cCount] -:= mr[j]
}
lead +:= 1
}
return M
end
 
procedure showMat(M)
every r := !M do every writes(right(!r,5)||" " | "\n")
end</lang>
 
Output:
<pre>
->rref
1.0 0.0 0.0 -8.0
0.0 1.0 0.0 1.0
0.0 0.0 1.0 -2.0
->
</pre>
 
=={{header|J}}==
Cookies help us deliver our services. By using our services, you agree to our use of cookies.