기본 콘텐츠로 건너뛰기

통계관련 함수와 메서드 사전

A B C d E F G H I K L M N O P Q R S T U V W Z A statsmodels.ap.stats.anova_lm(x) statsmodels.formula.api.ols 에 의해 생성되는 모형 즉, 클래스 인스턴스(x)를 인수로 받아 anova를 실행합니다. np.argsort(x, axis=-1, kind=None) 객체 x를 정렬할 경우 각 값에 대응하는 인덱스를 반환합니다. Axis는 기준 축을 지정하기 위한 매개변수로서 정렬의 방향을 조정할 수 있음(-1은 기본값으로 마지막 축) pandas.Series.autocorr(lag=1) lag에 전달한 지연수에 따른 값들 사이의 자기상관을 계산 B scipy.stats.bernoulli(x, p) 베르누이분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 p: 단일 시행에서의 확률 scipy.stats.binom(x, n, p) 이항분포에 관련된 통계량을 계산하기 위한 클래스를 생성합니다. x: 랜덤변수 n: 총 시행횟수 p: 단일 시행에서의 확률 C scipy.stats.chi2.pdf(x, df, loc=0, scale=1) 카이제곱분포의 확률밀도함수를 계산 $$f(x, k) =\frac{1}{2^{\frac{k}{2}−1}Γ(\frac{k}{2})}x^{k−1}\exp\left(−\frac{x^2}{2}\right)$$ x: 확률변수 df: 자유도 pd.concat(objs, axis=0, join=’outer’, …) 두 개이상의 객체를 결합한 새로운 객체를 반환. objs: Series, DataFrame 객체. Axis=0은 행단위 즉, 열 방향으로 결합, Axis=1은 열단위 즉, 행 방향으

영공간(Nullspace)과 열공간(Column space)

내용

선형결합선형독립과 종속에 대한 이해가 필요합니다.

영공간(Nullspace)과 열공간(Column space)

영공간과 열공간

행렬 A에 대해 Ax=0을 만족하는 관계를 선형 결합이라고 하며 이 선형 결합에는 선형 종속과 선형독립으로 구분합니다. 선형독립인 경우 이 식의 해는 자명한 해로 유일한 해 집합을, 선형종속인 경우 1개 이상의 다양한 해집합을 가집니다. 이러한 해집합의 기저(basis)를 영공간(Nullspace)과 열공간(Column space)이라 합니다. 영공간은 선형종속 관계의 다양한 해들 중의 기저 벡터, 열공간은 선형독립이 성립되는 기저 벡터들을 의미합니다. 이 관계에서 의하면 영공간 역시 다양한 해집합들로부터 유도되는 열공간이라 할 수 있습니다.

영공간(Null Space)

m×n 형태의 2차원 행렬 A의 영공간(Nul A)은 동차 선형 시스템(Ax=0)의 모든 해집합의 기저입니다. 그러므로 영공간은 기본적으로 0벡터를 포함합니다.

영공간
영공간은 동차 시스템의 해 집합의 기저입니다.

벡터 u가 행렬 A의 영 공간에 포함 여부를 결정한다는 것은 Ax=0의 동차 선형 시스템에서 변수 벡터 x를 벡터 u로 치환할 경우 성립하는지를 결정하는 것입니다.

import numpy as np
import numpy.linalg as la 
import sympy as spM
A=np.array([[1,-3,-2],[-5, 9, 1]]); AM
array([[ 1, -3, -2],
           [-5,  9,  1]])
u=np.array([5,3,-2]).reshape(-1,1); uM
array([[ 5],
           [ 3],
           [-2]])
np.dot(A, u)M
array([[0],
           [0]])

위 결과에 의하면 벡터 u는 다음 식을 만족하는 해가 됩니다.

u ⊂ Nul A

예)
  다음 표준 행렬 A의 영공간을 계산해봅니다.

$$\displaystyle \begin{bmatrix} -3 & 6& -1 & 1 & -7 \\ 1& -2 & 2 & 3& 1\\ 2& -4 & 5& 8& -4 \end{bmatrix} \begin{bmatrix}x_1\\x_2\\x_3\\x_4\\x_5 \end{bmatrix} = \begin{bmatrix} 0\\0\\0\end{bmatrix}$$

위 행렬 방정식을 일반 선형시스템으로 나타내면 다음과 같습니다.

$\begin{aligned} &3x_1 + 6x_2 - x_3 + x_4 - 7x_5 = 0\\ &x_1 - 2x_2 + 2x_3 + 3x_4 + x_5 = 0\\ &2x_1 - 4x_2 + 5x_3 + 8x_4 - 4x_5 = 0 \end{aligned}$
A=np.array([[-3, 6, -1, 1, -7],[1,-2,2,3,-1],[2, -4, 5, 8, -4]])
c=np.zeros([3,1])
sp.Matrix(np.hstack([A,c])).rref()[0]M
$\small\color{navy}{\left[\begin{matrix}1 & -2.0 & 0 & -1.0 & 3.0 & 0\\0 & 0 & 1 & 2.0 & -2.0 & 0\\0 & 0 & 0 & 0 & 0 & 0\end{matrix}\right]}$

결과는 변수 x1 및 x3가 나머지 변수에 의존한다는 것을 나타냅니다. 따라서 영공간은 다음과 같습니다.

$$\text{Nul} A= \begin{bmatrix}x_1\\x_2\\x_3\\x_4\\x_5 \end{bmatrix}=\begin{bmatrix} 2x_2+x_4-3x_5\\x_2\\-2x_4+2x_5\\x_4\\x_5\end{bmatrix}=\begin{bmatrix} 2&1&-3\\1&0&0\\0&-2&2\\0&1&0\\0&0&1\end{bmatrix}\begin{bmatrix}x_2\\x_4\\x_5 \end{bmatrix}$$

위 영공간(Null space)의 각 열벡터들은 모두 A에 대한 선형결합의 해입니다. 즉, 위의 선형결합의 해 집합은 x2, x4, x5의 값에 따라 다양합니다.

Ns=np.array([[2, 1, -3],[1, 0, 0], [0, -2,2],[0,1,0],[0,0,1]])
sp.Matrix(Ns)M
$\small\color{navy}{\left[\begin{matrix}2 & 1 & -3\\1 & 0 & 0\\0 & -2 & 2\\0 & 1 & 0\\0 & 0 & 1\end{matrix}\right]}$

위 결과에 의하면 x1과 x3는 임의의 x2,, x4, x5에 의해 결정됩니다. 이 세 변수의 기저는 다음의 동차선형결합으로 계산됩니다. 기저는 다음 코드에서 나타낸 rref로 부터 피벗 열로 확인할 수 있습니다.

sp.Matrix(Ns).rref()[0]M
$\small\color{navy}{\left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\\0 & 0 & 0\\0 & 0 & 0\end{matrix}\right]}$

위 결과에 의하면 모든 열이 피벗 열이며 자유변수가 없습니다. 그러므로 모두 기저벡터들입니다. 영공간의 스판은 다음과 같이 나타낼 수 있습니다.

$$\displaystyle \text{Nul} A = \text{Span} \left\{\begin{bmatrix}2\\1\\0\\0\\0 \end{bmatrix}, \quad \begin{bmatrix}1\\0\\-2\\1\\0 \end{bmatrix}, \quad \begin{bmatrix} -3\\0\\2\\0\\0 \end{bmatrix}\right\}$$

영공간은 sympy 라이브러리의 nullspace()함수를 사용하여 확인할 수 있습니다. 이 함수의 결과는 각 열벡터를 반환합니다. 다음 코드에서는 이 결과를 행렬 형태로 나타내었습니다.

nul_A=sp.Matrix(A).nullspace()
nul_AM
[Matrix([
     [2],
     [1],
     [0],
     [0],
     [0]]),
     Matrix([
     [ 1],
     [ 0],
     [-2],
     [ 1],
     [ 0]]),
     Matrix([
     [-3],
     [ 0],
     [ 2],
     [ 0],
     [ 1]])]

선형 시스템의 영공간의 수는 다음과 같의 정의할 수 있습니다.

영공간의 수
dim Nul = 동차방정식에서 자유변수의 수

열공간 (Column space)

m×n 형태의 행렬 A와의 선형결합에서 선형독립인 벡터들의 집합을 열공간(column space)라고 하며 Col A로 나타냅니다.

위 예에서 행렬 A의 기약행사다리꼴에서 0, 2열이 피봇열(pivot column)입니다. 즉, 두 열벡터가 기저 벡터가 되며 이 기저 벡터들과 나머지 벡터들과의 선형 결합이 성립됩니다.

sp.Matrix(A).rref()[0]M
$\small\color{navy}{\left[\begin{matrix}1 & -2 & 0 & -1 & 3\\0 & 0 & 1 & 2 & -2\\0 & 0 & 0 & 0 & 0\end{matrix}\right]}$

행렬 A의 피봇열들이 기저벡터가 되기 위해서는 나머지 벡터들과 선형독립이어야 합니다. 확인해보면 다음과 같습니다.

#기저벡터
Ab=A[:,[0, 2]]
#Ab=A의 1열
AbA1=np.hstack([Ab, A[:,1].reshape(-1,1)]);AbA1M
array([[-3, -1,  6],
           [ 1,  2, -2],
           [ 2,  5, -4]])
sp.Matrix(AbA1).rref()M
(Matrix([
     [1, 0, -2],
     [0, 1,  0],
     [0, 0,  0]]),
     (0, 1))
AbA3=np.hstack([Ab, A[:,3].reshape(-1,1)])
sp.Matrix(AbA3).rref()M
(Matrix([
     [1, 0, -1],
     [0, 1,  2],
     [0, 0,  0]]),
     (0, 1))
AbA4=np.hstack([Ab, A[:,4].reshape(-1,1)])
sp.Matrix(AbA4).rref()M
(Matrix([
     [1, 0,  3],
     [0, 1, -2],
     [0, 0,  0]]),
     (0, 1))

위의 모든 선형결합은 선형독립입니다. 즉, A1, A3, A4 벡터들은 모두 A0, A2 벡터를 스판으로 합니다. 이것은 A1, A3, A4 벡터들 모두 A0, A2에 의해 생성되는 벡터공간의 부분공간이 됩니다. 결과적으로 행렬 A에서 기저 벡터는 A0, A2이며 이들이 열공간(columnspace)이 됩니다.

행렬의 열공간은 sympy의 columnspace()함수에 의해 확인할 수 있습니다.

col_A=sp.Matrix(A).columnspace()
col_AM
[Matrix([
     [-3],
     [ 1],
     [ 2]]),
     Matrix([
     [-1],
     [ 2],
     [ 5]])]
$$\text{Col A}\;=\; Span\; \left\{\begin{bmatrix} -3\\1\\2\end{bmatrix}, \quad \begin{bmatrix} -1\\2\\5\end{bmatrix} \right\}$$

위 결과는 다음과 같이 정의할 수 있습니다.

열공간(column space)
  • 선형 독립인 기저 벡터들의 집합
  • 표준 행렬의 기약행사다리꼴에서 피벗 열에 대응하는 열벡터들

예)
 벡터 집합 W의 열공간을 계산해 봅니다.

$$\displaystyle w\;=\;\left\{ \begin{matrix}6a-b\\a+b\\-7a \end{matrix}\right\}$$

W는 행렬 A와 같이 나타낼 수 있습니다.

$$\displaystyle A\;=\;\begin{bmatrix}6&-1\\1&1\\-7&0 \end{bmatrix}$$

행렬 A의 모든 열 벡터들이 열공간이라면 그 동차선형결합은 선형독립입니다. 즉, 모든 열 벡터들은 기저벡터가 됩니다.

$$\displaystyle \begin{bmatrix}6&-1\\1&1\\-7&0 \end{bmatrix} \begin{bmatrix}a\\b \end{bmatrix}=\begin{bmatrix}0\\0\\0 \end{bmatrix}$$
A=np.array([[6,-1],[1,1],[-7,0]])
c=np.zeros([3,1])
sp.Matrix(np.hstack([A,c])).rref()[0]M
$\small\color{navy}{\left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 0\end{matrix}\right]}$

위와 같이 선형결합 이 선형독립이므로 행렬 A의 모든 열 벡터들은 기저가 되고 열공간 Col A가 됩니다. Col A는 다음과 같이 두 개의 기저 벡터들로 구성된 스판으로 나타낼 수 있습니다.

$$\displaystyle \text{Col} A\;=\;Span\left\{\begin{bmatrix}6\\1\\-7\end{bmatrix}, \quad \begin{bmatrix}-1\\1\\0\end{bmatrix} \right\}$$
col_A=sp.Matrix(A).columnspace(); col_AM
[Matrix([
     [ 6],
     [ 1],
     [-7]]),
     Matrix([
     [-1],
     [ 1],
     [ 0]])]

행렬을 전치시키면 원래 행렬의 열벡터는 행벡터가 된다. 이러한 경우 전치시키기 전의 열공간은 전치시킨 후의 행공간이 됩니다. 행렬 A의 행공간은 Row A로 나타냅니다.

예)
  다음 행렬 M의 열공간을 결정해 봅니다.

$$M=\begin{bmatrix}−2 & −5 & 8 & 0 &−17\\ 1& 3 & −5 & 1 &  5 \\ 3& 11 & −19 & 7 &  1 \\ 1& 7 & −13& 5  & −3 \end{bmatrix}$$
M=np.array([[-2,-5, 8, 0, -17], [1, 3, -5, 1, 5], [3, 11, -19, 7, 1], [1, 7, -13, 5, -3]]); MM
array([[ -2,  -5,   8,   0, -17],
           [  1,   3,  -5,   1,   5],
           [  3,  11, -19,   7,   1],
           [  1,   7, -13,   5,  -3]])
c=np.zeros([4, 1])
au=np.hstack([M, c])
sp.Matrix(au).rref()[0]M
$\small\color{navy}{ \left[\begin{matrix}1 & 0 & 1.0 & 0 & 1.0 & 0\\0 & 1 & -2.0 & 0 & 3.0 & 0\\0 & 0 & 0 & 1 & -5.0 & 0\\0 & 0 & 0 & 0 & 0 & 0\end{matrix}\right]}$

위 결과에서 0, 1, 3열 벡터가 피벗 열이므로 이들에 대응하는 벡터들이 열공간이 됩니다.

col_M=sp.Matrix(M).columnspace(); col_MM
[Matrix([
     [-2],
     [ 1],
     [ 3],
     [ 1]]),
     Matrix([
     [-5],
     [ 3],
     [11],
     [ 7]]),
     Matrix([
     [0],
     [1],
     [7],
     [5]])]

행렬 M에 대한 선형결합의 변수 x0, x1, x3는 x2 및 x4에 의존하며 다음과 같이 표현 될 수 있습니다.

$$\begin{bmatrix} x_1\\x_2\\x_3\\x_4\\x_5\end{bmatrix} = \begin{bmatrix} -x_3 - x_5\\ 2x_3-3x_5\\ x_3\\ 5x_4\\  x_5 \end{bmatrix} =x_3 \begin{bmatrix}-1\\2\\1\\0\\5 \end{bmatrix} +x_5 \begin{bmatrix}-1\\-3\\0\\5\\1 \end{bmatrix}$$

위 식의 마지막 오른쪽 식의 두 벡터들이 영공간입니다.

nul_M=sp.Matrix(M).nullspace(); nul_MM
[Matrix([
     [-1],
     [ 2],
     [ 1],
     [ 0],
     [ 0]]),
     Matrix([
     [-1],
     [-3],
     [ 0],
     [ 5],
     [ 1]])]

예)
  다음 행렬 A의 열공간에 p가 포함 여부를 결정해 봅니다.

$$\displaystyle A=\left[\begin{matrix}-3 & -2 & 0\\0 & 2 & -6\\6 & 3 & 3\end{matrix}\right] \quad p=\left[\begin{matrix}1\\14\\-9\end{matrix}\right]$$
A=np.array([[-3,-2, 0], [0, 2, -6],[6, 3, 3]])
p=np.array([[1], [14], [9]])
Ap=np.hstack([A, p])
ApM
array([[-3, -2,  0,  1],
           [ 0,  2, -6, 14],
           [ 6,  3,  3,  9]])
sp.Matrix(Ap).rref()[0]M
$\small\color{navy}{\left[\begin{matrix}1 & 0 & 2 & 0\\0 & 1 & -3 & 0\\0 & 0 & 0 & 1\end{matrix}\right]}$

위 결과는 A의 기저벡터로 구성된 열공간은 0, 1열벡터임을 나타내고 있습니다. 그 열공간과 벡터 p와의 선형결합이 성립한다는 것은 그 열공간내에 벡터 p가 포함됨을 의미합니다. 그러므로 열공간과 p의 선형 독립 여부를 결정합니다.

au=np.hstack([A[:,:2], p])
sp.Matrix(au).rref()[0]M
$\small\color{navy}{\left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{matrix}\right]}$

위 결과는 A의 기저 벡터와 p와의 선형 결합 은 독립임을 나타냅니다. 그러므로 벡터 p는 A의 열공간에 포함됩니다.

예)
 다음 행렬 A의 영공간과 열공간은 각각 $\mathbb{R}^p$와 $\mathbb{R}^q$의 부분 공간입니다. p와 q를 결정해 봅니다.

$$\begin{bmatrix} 3 & 2 & 1 &−5 \\ −9 &−4 & 1 & 7\\ 9&  2 &−5 & 1 \end{bmatrix}$$
A=sp.Matrix([[3,2, 1, -5], [-9, -4, 1, 7], [9, 2, -5, 1]])
A.rref()[0]M
$\small\color{navy}{\left[\begin{matrix}1 & 0 & -1 & 1\\0 & 1 & 2 & -4\\0 & 0 & 0 & 0\end{matrix}\right]}$
A.columnspace()M
[Matrix([
     [ 3],
     [-9],
     [ 9]]),
     Matrix([
     [ 2],
     [-4],
     [ 2]])]
A.nullspace()M
[Matrix([
     [ 1],
     [-2],
     [ 1],
     [ 0]]),
     Matrix([
     [-1],
     [ 4],
     [ 0],
     [ 1]])]

Col $A \subset \mathbb{R}^3$, Nul $A \subset \mathbb{R}^4$이므로 P=4, q=3

예)
x2 = x3인 ℝ4의 부분 공간의 기저를 결정합니다.

$$\begin{aligned}&0x_1 + 1x_2 - 1x_3 + 0x_4 = 0\\ & \rightarrow \begin{bmatrix}0& 1& -1& 0\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\\x_4\end{bmatrix}=0\end{aligned}$$

다음과 같이 표현할 수 있습니다.

$$\begin{bmatrix}x_1\\x_2\\x_3\\x_4 \end{bmatrix}=\begin{bmatrix}x_1\\x_2\\x_2\\x_4 \end{bmatrix} \quad \text{또는}\quad \begin{bmatrix}x_1\\x_3\\x_3\\x_4 \end{bmatrix}$$

위 식 우항의 표준 행렬을 S라고 하면 다음과 같이 나타낼 수 있습니다.

$$\displaystyle S=\begin{bmatrix}1&0&0&0\\0&1&0&0\\0&1&0&0\\0&0&0&1\end{bmatrix} \quad \text{또는}\quad \begin{bmatrix}1&0&0&0\\0&0&1&0\\0&0&1&0\\0&0&0&1\end{bmatrix}$$

각 행렬의 피벗열이 기저 벡터가 됩니다. 위 식의 우항의 첫번째와 두번째 행렬을 각각 S1, S2라고 하면 각각의 기약 행 사다리꼴로 부터 피벗열을 결정하면 다음과 같습니다.

S1=np.array([[1, 0, 0, 0], [0, 1,0, 0], [0,1,0,0],[0,0,0,1]])
Matrix(S1).rref()
(Matrix([
   [1, 0, 0, 0],
   [0, 1, 0, 0],
   [0, 0, 0, 1],
   [0, 0, 0, 0]]),
   (0, 1, 3))
S2=np.array([[1, 0, 0, 0], [0,  0, 1, 0], [0, 0, 1,0],[0,0,0,1]])
Matrix(S2).rref()
(Matrix([
   [1, 0, 0, 0],
   [0, 0, 1, 0],
   [0, 0, 0, 1],
   [0, 0, 0, 0]]),
   (0, 2, 3))

위 결과로 S는 3개의 기저벡터를 가지므로 이들이 S의 span이 됩니다.

$$\displaystyle S\;=\; \text{Span} \left\{ \begin{bmatrix}1\\0\\0\\0 \end{bmatrix}, \quad \begin{bmatrix}0\\1\\1\\0\end{bmatrix}, \quad \begin{bmatrix}0\\0\\0\\1 \end{bmatrix}\right\} $$

이 결과는 예제의 계수행렬의 영공간(nullspace)이 됩니다.

A=np.array([[0, 1, -1, 0]])
for i  in Matrix(A).nullspace():
    print(i)
Matrix([[2], [1], [0], [0], [0]])
  Matrix([[1], [0], [-2], [1], [0]])
  Matrix([[-3], [0], [2], [0], [1]])

예)
 3×5 형태의 행렬 A는 3개의 피벗열을 가집니다. 이 경우 열공간의 차원과 영공간을 차원을 결정합니다.

행렬 A의 피벗열은 그 행렬의 기저 벡터가 되고 열공간이 됩니다. 그러므로 $\mathbb{R}^3$이 됩니다. 영공간은 행렬 A의 모든 해집합의 기저입니다. 이 행렬의 해집합의 차원은 $\mathbb{R}^5$이므로 영공간의 차원 역시 $\mathbb{R}^5$가 됩니다.

댓글

이 블로그의 인기 게시물

유사변환과 대각화

내용 유사변환 유사행렬의 특성 대각화(Diagonalization) 유사변환(Similarity transformation) 유사변환 n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사하다고 하며 이 변환을 유사 변환 (similarity transformation)이라고 합니다. $$\begin{equation}\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B \end{equation}$$ 식 1의 유사 변환은 다음과 같이 고유값을 적용하여 특성 방정식 형태로 정리할 수 있습니다. $$\begin{align} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align}$$ 위 식의 행렬식은 다음과 같이 정리됩니다. $$\begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \t

matplotlib의 그래프 종류

1. 산포도(scatter plot) plt.scatter(x, y) >>> import matplotlib.pyplot as plt >>> import numpy as np >>> data=np.random.rand(1024, 2) >>> data[:3, :] >>> plt.scatter(data[:,0], data[:,1]) >>> plt.show() 2. 막대그래프(bar chart) plt.bar(x, hight, width, align='center') 매개변수중 width에 인수를 전달하여 막대의 두께를 조절할 수 있다. 또한 align의 인수는 'center'와 'edge' 이다. 기본값은 'center'이다. 이 값은 x축의 레이블이 막대의 중간에 위치(center) 또는 왼쪽 가장자리에 위치(edge)시킨다. 코드에서 np.random.randint 는 특정한 범위내에서 지정한 갯수의 랜덤수를 생성 np.unique(배열, retrun_counts=False, axis=None) : 객체 내의 중복되지 않은 수들을 반환한다. return_counts=True이면 각 수에 대한 빈도수를 반환한다. axis를 통해 행(1), 열(0)을 선택한다. >>> x=np.random.randint(1, 6, size=100) >>> uni,count=np.unique(x, return_counts=True) >>> uni array([1, 2, 3, 4, 5]) >>> count array([25, 17, 23, 16, 19], dtype=int64) >>> plt.bar(uni, count) >>> plt.show() 위의 막대그래프의 막대의

sympy.solvers로 방정식해 구하기

sympy.solvers로 방정식해 구하기 대수 방정식을 해를 계산하기 위해 다음 함수를 사용합니다. sympy.solvers.solve(f, *symbols, **flags) f=0, 즉 동차방정식에 대해 지정한 변수의 해를 계산 f : 식 또는 함수 symbols: 식의 해를 계산하기 위한 변수, 변수가 하나인 경우는 생략가능(자동으로 인식) flags: 계산 또는 결과의 방식을 지정하기 위한 인수들 dict=True: {x:3, y:1}같이 사전형식, 기본값 = False set=True :{(x,3),(y,1)}같이 집합형식, 기본값 = False ratioal=True : 실수를 유리수로 반환, 기본값 = False positive=True: 해들 중에 양수만을 반환, 기본값 = False 예 $x^2=1$의 해를 결정합니다. solve() 함수에 적용하기 위해서는 다음과 같이 식의 한쪽이 0이 되는 형태인 동차식으로 구성되어야 합니다. $$x^2-1=0$$ import numpy as np from sympy import * x = symbols('x') solve(x**2-1, x) [-1, 1] 위 식은 계산 과정은 다음과 같습니다. $$\begin{aligned}x^2-1=0 \rightarrow (x+1)(x-1)=0 \\ x=1 \; \text{or}\; -1\end{aligned}$$ 예 $x^4=1$의 해를 결정합니다. solve() 함수의 인수 set=True를 지정하였으므로 결과는 집합(set)형으로 반환됩니다. eq=x**4-1 solve(eq, set=True) ([x], {(-1,), (-I,), (1,), (I,)}) 위의 경우 I는 복소수입니다.즉 위 결과의 과정은 다음과 같습니다. $$x^4-1=(x^2+1)(x+1)(x-1)=0 \rightarrow x=\pm \sqrt{-1}, \; \pm 1=\pm i,\; \pm1$$ 실수