πŸ’Ώ Data/이λͺ¨μ €λͺ¨

Cramer's rule(크레이머 μ†Œκ±°λ²•)

Jayden1116 2021. 12. 7. 14:06

λ‹€μŒ 링크의 λ‚΄μš©μ„ μ°Έμ‘°ν•˜μ—¬ Cramer's rule을 μ‚¬μš©ν•΄ x1 , x2 , x3 의 값을 κ΅¬ν•˜μ„Έμš”.

https://youtu.be/6StS7VjtuGI

x1 + 2x3 = 6
βˆ’3x1 + 4x2 + 6x3 = 30
βˆ’x1 βˆ’2x2 + 3x3 = 8


개인적으둜 μœ„μ˜ μ˜μƒμ„ λŒ€λž΅ μ΄ν•΄ν•˜κ³  μ½”λ“œλ‘œ κ΅¬ν˜„ν•΄λ΄€λŠ”λ°, 계산 횟수λ₯Ό 늘릴 λ•Œλ§ˆλ‹€ 계속 값이 λ‹¬λΌμ Έμ„œ

κ΅¬κΈ€λ§ν•΄μ„œ λ‚˜μ˜¨ 곡식을 μ μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

import numpy as np

A = np.array([[1, 0, 2],
              [-3, 4, 6],
              [-1, -2, 3]])
b = np.array([[6],
              [30],
              [8]])

det(A)의 값을 각각 1행에 bλ₯Ό λ„£κ³  λ‚˜μ˜¨ det κ°’, 2행에 λ„£κ³  λ‚˜μ˜¨ κ°’, 3행에 λ„£κ³  λ‚˜μ˜¨ 값을 λ‚˜λˆ„λ©΄ 그게 κ³§ ν•΄κ°€ λ©λ‹ˆλ‹€.

x = []
for i in range(3):

    Aj = A.copy()
    Aj[:,[i]] = b
    x.append(np.linalg.det(Aj) / np.linalg.det(A))

x

[-0.9090909090909088, 1.6363636363636358, 3.4545454545454533] # shape이 (3, )인 λ°°μ—΄μ΄λ―€λ‘œ (1, 3)으둜 ν•˜κ³  transpose 유의

x = np.array([x]).T
x

array([[-0.90909091],
[ 1.63636364],
[ 3.45454545]]) # xλ₯Ό ν–‰λ ¬κΌ΄λ‘œ [] μ μš©ν•˜κ³  transpose ν•΄μ•Όν•˜λŠ” 것 λ‹€μ‹œ ν•œλ²ˆ κΈ°μ–΅!

np.dot(A, x)

array([[ 6.],
[30.],
[ 8.]])

이렇듯 μš°λ³€μ˜ 값이 잘 λ‚˜μ˜€λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.