사용 예시

사용 예시 (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 연산도 함께 보면 좋아요.