mathnet-numerics
mathnet-numerics copied to clipboard
Rank of matrix via SVD sometimes return a false value
rank via gaussian elimination has no false output Python code: #Input: list in list #Output: the rank `def gaussianrank(array): m = len(array) n = len(array[0]) h = 0 k = 0 rank = 0 while h < m and k < n: pivot_abs = abs(array[h][k]) pivoti = h
# find pivot
for i in range(h, m):
if abs(array[i][k]) > pivot_abs:
pivot_abs = abs(array[i][k])
pivoti = i
# if there's no pivot
if pivot_abs < 1e-6:
# next column
k += 1
else:
rank += 1
if h != pivoti:
# swap rows
z = array[h]
array[h] = array[pivoti]
array[pivoti] = z
for i in range(h+1, m):
f = array[i][k]/array[h][k]
array[i][k] = 0
for j in range(k+1, n):
array[i][j] -= array[h][j] * f
h += 1
k += 1
return rank`