행렬과 대수 II 과목을 수강하면서 나를 너무너무 힘들게 했던 건.. 끝없는 과제
결국 행대 과제를 위한 계산기를 만들었고 학기 내도록 아주 유용하게 사용했었다.
생각난 김에 오늘의 TIL로 포스팅하기로!
# module import
from sympy import *
import numpy as np
행렬 가 정방행렬이 아닌 경우에도 계산이 가능하도록 구현했다.
A = np.array([[6,0,4],[4,0,0]])
sqrt((A**2).sum())
#Answer: 2*sqrt(17)
sqrt(max((A.T*A).eigenvals()))
#Answer: 8
A= Matrix([[1/2,0,0],[-1/2,1/3,0],[-1/5,-1/8,-1/4]])
n= sqrt(len(A)) #행렬의 차원
(eye(n)-A).inv()
#Answer:
# Matrix([
# [ 2.0, 0, 0],
# [ -1.5, 1.5, 0],
# [-0.17, -0.15, 0.8]])
검산이 가능하도록 단계별로 나누어 구현하였다.
# 주어진 행렬함수 f(x)
def f(x,y):
fx= 20*x*y-10*x-4*(x**3)
fy= 10*(x**2)-8*x-8*(x**3)
return Matrix([fx,fy])
# G(x) 계산
def G():
x,y=symbols('x y')
fx= 20*x*y-10*x-4*(x**3)
fy= 10*(x**2)-8*x-8*(x**3)
G = Matrix([[diff(fx,x), diff(fx,y)],
[diff(fy,x),diff(fy,y)]])
return G
# x0, y0에 주어진 초기값 대입
x0= 1
y0= 1
step1. f(x0)
f(x0,y0)
Answer
:
step2. G(x,y)
G=G() G
Answer
:
step3. G(x0,y0), Gx0inv
G(x0,y0)를 계산해서 Gx0에 대입한 후, 역행렬 계산Gx0 = Matrix([[-2,20],[-12,0]]) Gx0inv = -Gx0.inv() Gx0inv
Answer
:
step4.
tri0=Gx0inv * Matrix([[f(x0,y0)[0],f(x0,y0)[1]]]).T tri0
Answer
:
step5. (드디어) 근사해
x1 = Matrix([x0,y0]) + tri0 x1
Answer
: