글과 사진, 그리고 이야기

IE & SWCON/Operation Research

[선형대수학] shift inverse power method 구하기 (simple code)

뱃놀이가자 2023. 12. 3. 20:35
728x90

 

def shift_inv_power_method(list_, x0, alpha, k):
    
    # list_ <- input list
    # x0 <- initial vector x0 whose largest entry is 1
    # e.g x0=[[1],[0],[0]]
    # alpha <- shift value
    # k <- times
    # 가시성을 위해 transpose matrix로 출력
    
    import numpy as np
    
    shift_list = list_ - alpha*np.eye(len(list_))
    shift_list_inv = np.linalg.inv(shift_list)
    
    for i in range(k+1):
        print(f'times: {i}')
        print('----------------')
        print(f'x_transpose : {x0.T}')
        y=shift_list_inv@x0
        mu=max(y)
        v=alpha+(1/mu)
        x0=(1/mu)*y
        print(f"y(matrix).transpose: {y.T}")
        print(f'v: {v}')
        print('----------------')

 

A=np.array([[0.96, 1.36, 0.52],[-5.76, 6.84, 2.88], [-8.4,5.6,6.2]])
x0=np.array([[1],[0],[0]])
alpha=1.9

################################################
shift_inv_power_method(A, x0, alpha, 5)

 

 

so simple !

 

 

 

728x90