사용 예시
사용 예시 (Examples of Usage)
연산을 조합해 실제 문제를 푸는 예시를 몇 가지 보여드릴게요. 개념이 아니라 코드가 어떻게 쓰이는지가 핵심이에요.
출처: 문서
본문
피벗 LU 분해(pivoted LU factorization)를 이용해 선형 시스템 A*x = b를 푸는 방법은 다음과 같아요.
[L, U, P] = lu (A); ## now L*U = P*A
x = U \ (L \ P) * b;
행렬 X의 각 열을 단위 노름(unit norm)으로 정규화하는 한 가지 방법은 이렇게 해요.
s = norm (X, "columns");
X /= diag (s);
같은 결과를 브로드캐스팅(broadcasting)으로도 얻을 수 있어요(브로드캐스팅 항목 참고).
s = norm (X, "columns");
X ./= s;
치환 벡터 p로 주어진 치환의 부호(sign)를 효율적으로 계산하는 식은 다음과 같아요. 이 식은 Octave의 이전 버전에서도 동작하지만 느려요.
det (eye (length (p))(p, :))
마지막으로, SVD를 이용해 티코노프 정규화(Tikhonov regularization, 릿지 회귀)로 선형 시스템 A*x = b를 푸는 골격 코드예요.
m = rows (A); n = columns (A);
[U, S, V] = svd (A);
## determine the regularization factor alpha
## alpha = ...
## transform to orthogonal basis
b = U'*b;
## Use the standard formula, replacing A with S.
## S is diagonal, so the following will be very fast and accurate.
x = (S'*S + alpha^2 * eye (n)) \ (S' * b);
## transform to solution basis
x = V*x;
더 알아보기
- 브로드캐스팅의 동작 방식은 브로드캐스팅 항목을 참고하세요.
- LU 분해와 SVD 연산도 함께 보면 좋아요.