mathnet-numerics icon indicating copy to clipboard operation
mathnet-numerics copied to clipboard

Rank of matrix via SVD sometimes return a false value

Open H-A-M-G-E-R opened this issue 3 years ago • 0 comments

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`

H-A-M-G-E-R avatar Sep 05 '22 00:09 H-A-M-G-E-R