Simulizer

Linear system

10×10 행렬 A 와 우변 벡터 b 가 주어졌을 때, 이 페이지의 결과는 A x = b 를 만족하는 해 벡터 x 입니다.

Steps

  1. 새 파일을 만드세요.
  2. 텐서 카테고리에서 행렬 만들기 블록을 꺼내, 10×10 크기로 행렬 A 를 만드세요. 값은 손으로 채우거나 랜덤 행렬 블록으로 채울 수 있습니다.
  3. 같은 카테고리의 벡터 만들기 블록으로 길이 10의 우변 b 를 만드세요.
  4. 행렬 곱, 역행렬, 전치, 행렬식, trace 등의 행렬 연산 블록 중 역행렬 을 꺼내고, 입력으로 A 를 넘기세요. 그리고 결과를 Ainv 에 저장하세요.
  5. 행렬·벡터 곱 블록으로 x = Ainv · b 를 계산하세요.
  6. 로그로 보내기 또는 행렬 표시 패널로 x 를 출력하세요.

Pitfalls

  • A특이 행렬(역행렬이 없는 행렬)이면 결과가 발산하거나 엉뚱한 값이 나옵니다. 행렬식 블록으로 det(A) 를 먼저 확인하세요. 값이 0 에 가까우면 특이 행렬일 가능성을 의심해야 합니다.
  • 큰 행렬에서는 역행렬을 직접 구하는 대신 LU 분해 같은 방법을 쓰는 편이 수치적으로 더 안정적입니다. 다만 10×10 정도 크기에서는 차이가 크지 않습니다.

Variations

  • 고유값 — 같은 카테고리의 고유값 블록으로 A 의 고유값과 고유벡터를 구할 수 있습니다.
  • 연립방정식 여러 개 — 우변 b 가 여러 개라면 b 를 행렬로 만들고 Ainv 와 곱하세요. 결과 행렬의 각 열이 각 우변에 대한 해입니다.
  • 검증 — 구한 xA · x 를 다시 계산해 b 와 같은지 확인하세요. 부동소수점 오차 범위 안에서 일치해야 합니다.

Accuracy

Simulizer는 내부적으로 TensorFlow.js의 64-bit 부동소수점 행렬 연산을 사용합니다. A조건수가 크면(나쁘게 조건화된 행렬) 결과의 신뢰성이 떨어집니다. 손으로 직접 만든 작은 행렬은 대부분 안전합니다.

simulizer · linear-system