Untitled

 avatar
unknown
python
2 years ago
1.5 kB
0
Indexable
# -*- coding: utf-8 -*-
"""
Created on Wed Oct  5 14:45:01 2022

@author: Jonatan
"""

from numpy import *
import scipy as scipy
import scipy.linalg
import math
import pylab

n = 41
theta = 1.2

S = zeros((n,n))
R = zeros((n,n))
for i in range(0,n):
    S[i,i] = math.sin(theta)**i

for i in range(0,n):
    for j in range(0,n):
        if i == j:
            R[i,j] = 1
        elif j > i:
            R[i,j] = -math.cos(theta)

Kahan = (S@R).T@(S@R)

def rankLU(A, tol):
    n,m = shape(A)
    _, _, U = scipy.linalg.lu(A)
    rank = 0
    print(U)
    c = -1
    for i in range(0,n):
        j = i
        while j < m and abs(U[i,j]) < tol:
            j += 1
        if j != m and c != j:
            rank += 1
            c = j
    return rank

def rankQR(A,tol):
    n,m = shape(A)
    Q, R = scipy.linalg.qr(A)
    rank = 0
    for i in range(0,n):
        if abs(R[i,i]) > tol:
            rank += 1
    return rank

def rankSVD(A,tol):
    n,m = shape(A)
    _, S, _ = scipy.linalg.svd(A)
    rank = 0
    print(S)
    for i in range(0,n):
        if abs(S[i]) > tol:
            rank += 1
    return rank

def sumRow(r, tol):
    m = shape(r)
    for k in r:
        if k > tol:
            return True
    return False

A = array([[5, 0, 0, 0],[0, 0, 0, 0], [0, 0, -2, 0], [0, 0, 0, -3]])
A = random.rand(90,90)
A[3,:] = A[6,:]

print(rankLU(A, 10**(-9)))
print(linalg.matrix_rank(A))
Editor is loading...