이미지 압축은 데이터의 크기를 줄이는 과정이다. JPEG 압축은 대표적인 이미지 압축 방식으로, 주로 DCT(Discrete Cosine Transform)를 사용한다.
방법론:
특이값 분해(SVD): 이미지의 행렬을 분해하여 주요 성분만을 사용하여 압축한다.
예제:
12.3 물리적 시스템 시뮬레이션
물리적 시스템의 시뮬레이션에서 선형 대수는 상태 공간 모델링과 제어 시스템의 분석 및 설계에 사용된다.
12.3.1 상태 공간 모델링
상태 공간 모델링은 동적 시스템을 수학적으로 표현하는 방법이다. 이 모델은 시스템의 동작을 예측하고 제어하는 데 사용된다.
예제:
12.3.2 제어 시스템 설계
제어 시스템 설계에서는 시스템의 동작을 원하는 대로 조정하기 위해 제어 이론과 선형 대수를 사용한다.
방법론:
제어 이득 설계: 시스템의 안정성을 보장하기 위해 제어 이득을 계산한다.
상태 피드백: 상태 피드백을 사용하여 시스템의 동작을 조절한다.
12.4 금융 및 경제 모델링
금융 및 경제 모델링에서 선형 대수는 위험 분석, 포트폴리오 최적화 및 경제 예측에 사용된다.
12.4.1 포트폴리오 최적화
포트폴리오 최적화는 투자 포트폴리오의 리스크를 최소화하고 수익을 극대화하는 문제이다.
방법론:
최적화 문제: 투자 비율을 결정하기 위한 최적화 문제를 해결한다.
선형 계획법: 제약 조건과 목적 함수를 설정하여 최적화 문제를 해결한다.
예제:
12.4.2 위험 분석
위험 분석에서는 금융 모델에서 발생할 수 있는 리스크를 평가하고 관리한다.
방법론:
Value at Risk (VaR): 포트폴리오의 최대 손실을 평가한다.
몬테카를로 시뮬레이션: 다양한 시나리오를 시
뮬레이션하여 리스크를 분석한다.
12.5 요약
이 장에서는 선형 대수의 다양한 실제 프로젝트 사례를 통해 이론이 어떻게 실전에 적용되는지를 살펴보았다. 데이터 분석, 이미지 처리, 물리적 시스템 시뮬레이션, 금융 및 경제 모델링 등 여러 분야에서 선형 대수는 강력한 도구로 활용된다. 각 사례에서 사용된 기법과 방법론은 선형 대수의 중요성을 잘 보여준다.
import numpy as np
from scipy.linalg import svd
from skimage import data, color
import matplotlib.pyplot as plt
image = color.rgb2gray(data.astronaut())
U, Sigma, Vt = svd(image, full_matrices=False)
k = 50
approx_image = np.dot(U[:, :k], np.dot(np.diag(Sigma[:k]), Vt[:k, :]))
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(image, cmap='gray')
plt.axis('off')
plt.subplot(1, 2, 2)
plt.title(f'Compressed Image (k={k})')
plt.imshow(approx_image, cmap='gray')
plt.axis('off')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
# 시스템 매개변수
A = np.array([[1, 1], [0, 1]])
B = np.array([[0.5], [1]])
C = np.array([[1, 0]])
D = np.array([[0]])
# 초기 상태 및 입력
x = np.array([[0], [0]])
u = np.array([[1]])
# 시뮬레이션
x_next = np.dot(A, x) + np.dot(B, u)
y = np.dot(C, x) + np.dot(D, u)
print("Next state:", x_next)
print("Output:", y)
import numpy as np
from scipy.optimize import minimize
# 자산 수익률 및 공분산 행렬
returns = np.array([0.12, 0.15])
cov_matrix = np.array([[0.1, 0.02], [0.02, 0.08]])
# 목적 함수 (리스크 최소화)
def objective(weights):
return np.dot(weights.T, np.dot(cov_matrix, weights))
# 제약 조건 (자산 비율 합계가 1이 되어야 함)
constraints = ({'type': 'eq', 'fun': lambda weights: np.sum(weights) - 1})
# 초기 추정
initial_weights = np.array([0.5, 0.5])
# 최적화 수행
result = minimize(objective, initial_weights, constraints=constraints)
print("Optimal Weights:", result.x)