Toeplitz 행렬 Solver
linalg.solve_toeplitz((c, r), b)
: c/r - 1D array (vector)
기본 알고리즘 : Levinson-Durbin Recursion 계산량 \(\sim n^2\) 행렬사이즈의 2승에 비례하는 량
행렬 사이즈가 커질 수록 solve_toeplitz
함수가 유리함
Toeplitz Matrix 구축
linalg.toeplitz(c,r)
이게 꼭 필요할까? 작은사이즈 외에 경우에는 필요하지 않음
Circulant 행렬 Solver
0번째 컬럼만 알면 가능
linalg.solver_circulant(c, b)
기본 알고리즘 : Discrete Fourier Transform → 실질적으로 Fast Fourier transform 으로 문제를 해결
행렬사이즈 n의 log(n)에 비례하는 계산량 : \(\sim nlog(n)\)
Circulant Matrix 구축
linalg.circulant(c)
: 추천하지 않음
여러 식을 한꺼번에 풀기 !
행렬방정식을 푸는 함수는 \(A\mathbf{x} = b\) 뿐만 아니라 \(AX = B\) 형태도 적용가능하다~!
→ b벡터가 여러개일 때 한번에 푸는 방법
→ A가 불변하고 B는 이미 주어진 상황이라면,
일반행렬
linalg.solve(A, B, {assume_a = 'gen'})
linalg.solve_triangular(A, B, {lower = False})
밴드행렬
linalg.solve_banded((lbw, ubw), band_a, B)
linalg.solveh_banded(band_a_h, B, lower=False)
특수행렬
linalg.solve_toeplitz((c, r), B)
linalg.solve_circulant(c, B)
→ 모두 B
벡터를 행렬로 넣어주면 결과를 반환함