Direct method_Cramer’s Rule

DalKum·2023년 9월 28일

Numerical Analysis

목록 보기
3/3
post-thumbnail

Intro👀

크래머 공식 혹은 크라메르 법칙으로도 불리는 도구로서, 선형대수학에서 선형연립방정식의 해를 구하는 하나의 방법이다.
선형대수학은 Linearity인 functions 혹은 equations들을 행렬과 벡터로 표현하고 다루는 학문이다.
Linearity는 2가지 조건을 만족해야 하는데, 바로 additivity와 homogeneity이다.
두가지 조건을 만족하면 superposition principle이라는 결과를 낳게된다.
위의 내용을 정리하면 다음과 같다.

EquatinsfunctionsEquatins \supset functions

Linearity=additivity+homogeneitysuperposition principleLinearity = additivity + homogeneity \rightarrow superposition\ principle

  • additive property:f(x1+x2)=f(x1)+f(x2)additive\ property : f(x_1+x_2)=f(x_1)+f(x_2)
  • homogeneity:f(ax)=af(x)homogeneity:f(ax)=af(x)
    • superposition principle:f(a1x1+a2x2)=a1f(x1)+a2f(x2)superposition\ principle:f(a_1x_1+a_2x_2)=a_1f(x_1)+a_2f(x_2)

Body🚩

행렬은 대괄호, 벡터는 중괄호를 사용해서 표현하는 것이 관용이다.
보통 벡터는 열벡터(1차원 행렬)를 의미한다. 열벡터를 전치(Transpose)하면 행벡터가 된다.

크래머 공식으로 구하고자하는 것은 열벡터 {xx}의 해, 곧 원소들이다.

{xx}는 열벡터로서, 다음과 같이 표현된다.

x=(x1x2x3)x = \begin{pmatrix} x_1 \\ x_2 \\ x_3 \end{pmatrix}

그리고 주어진 식은 다음과 같다.

[A]x=B[A]{x}= {B}
(a1,1a1,2a1,3a2,1a2,2a2,3a3,1a3,2a3,3)(x1x2x3)=(b1b2b3)\begin{pmatrix} a_{1,1} & a_{1,2} & a_{1,3} \\ a_{2,1} & a_{2,2} & a_{2,3} \\ a_{3,1} & a_{3,2} & a_{3,3} \end{pmatrix} \begin{pmatrix}x_1 \\ x_2 \\ x_3 \end{pmatrix} = \begin{pmatrix}b_1 \\ b_2 \\ b_3 \end{pmatrix}

보통은 [A][A]의 역행렬 [A]1[A]^{-1}을 양변에 곱해서 열벡터{xx}의 해를 구하지만, 크래머 공식으로도 구할 수 있다.

구하는 방식은 다음과 같다.
1. 원행렬 [A][A]의 행렬식을 구한다.
2. 원행렬 [A][A][B][B]의 원소로 대체한 행렬을 열벡터 {xx}의 수만큼 만들어준다.
3. 각 원소는 대체행렬의 행렬식을 원행렬 [A][A]의 행렬식으로 나눈 값과 같다.

이를 정량적, 수치적으로 표현하면 다음과 같다.

  1. det(A)=+[(a1,1a2,2a3,3)+(a2,1a3,2a1,3)+(a3,1a1,2a2,3)][(a1,3a2,2a3,1)+(a2,3a3,2a1,1)+(a3,3a1,2a2,1)]det(A)=+[(a_{1,1}*a_{2,2}*a_{3,3})+(a_{2,1}*a_{3,2}*a_{1,3})+ (a_{3,1}*a_{1,2}*a_{2,3})]-[(a_{1,3}*a_{2,2}*a_{3,1})+(a_{2,3}*a_{3,2}*a_{1,1})+(a_{3,3}*a_{1,2}*a_{2,1})]
  1. A1=(b1a1,2a1,3b2a2,2a2,3b3a3,2a3,3),A2=(a1,1b1a1,3a2,1b2a2,3a3,1b3a3,3),A3=(a1,1a1,2b1a2,1a2,2b2a3,1a3,2b3)A_1=\begin{pmatrix} b_1 & a_{1,2} & a_{1,3} \\ b_2 & a_{2,2} & a_{2,3} \\ b_3 & a_{3,2} & a_{3,3} \end{pmatrix}, A_2=\begin{pmatrix} a_{1,1} & b_1 & a_{1,3} \\ a_{2,1} & b_2 & a_{2,3} \\ a_{3,1} & b_3 & a_{3,3} \end{pmatrix}, A_3=\begin{pmatrix} a_{1,1} & a_{1,2} & b_1 \\ a_{2,1} & a_{2,2} & b_2 \\ a_{3,1} & a_{3,2} & b_3 \end{pmatrix} 으로 정의된 대체행렬들의 행렬식 det(A1), det(A2), det(A3)det(A_1),\ det(A_2),\ det(A_3) 을 구한다.
  1. x1=det(A1)det(A), x2=det(A2)det(A), x3=det(A3)det(A)x_1=\frac{det(A_1)}{det(A)},\ x_2=\frac{det(A_2)}{det(A)},\ x_3=\frac{det(A_3)}{det(A)}

이제 개념(이론)을 익혔으니 실제 예제를 통해 문제를 풀어보자.

예제는 다음과 같다.

A=(511131114), B=(6211)A=\begin{pmatrix} 5 & -1 & 1 \\ -1 & 3 & -1 \\ 1 & -1 & 4 \end{pmatrix},\ B=\begin{pmatrix}6 \\ 2 \\ 11 \end{pmatrix}

Code💻

import numpy as np
import numpy.linalg as la
import copy

A = np.array([[5,-1,1],
              [-1,3,-1],
              [1,-1,4]],)

det_A = la.det(A)
det_A = int(det_A+0.5)

A1 = copy.deepcopy(A)
A2 = copy.deepcopy(A)
A3 = copy.deepcopy(A)

...

코드는 직접 작성해보시길...
10월 10일 이후 업로드할 예정

profile
But many who are first will be last, and many who are last will be first. Mattityahu (Mat) 19:30

1개의 댓글

comment-user-thumbnail
2023년 9월 30일
답글 달기