今までの例では、0 、あるいは 0 に近い小さな数で割らないような例を扱う場合だけであった(正則行列)。 pivot 行の先頭のある列全てが 0 の場合に計算を止め、また、 pivot にする行 a(k,k) をそれより下の列からなる部分列 (l,k)(l = k, .. , i) で最大の値を取るものを使用することに変更したい。 この際、本来 pivot にした行と、探し出した行を交換することにする。
選択的に大きな数で割るので、除算による誤差が少なくなる。
pp = Array.new
for l in i .. mat.length - 1
pp << mat[l][i]
end
if pp.rindex(pp.sort.pop) != 0
mat = r_mat(mat, i, pp.rindex(pp.sort.pop) + i)
end