$\qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad $ updated in 2019.09
Sympy 사용법¶
sympy 라이브러리를 불러온다
from sympy import *
수식 출력을 LaTex 수식으로 보이게 한다.
init_printing()
Rational( 분자, 분모 ) 함수는 유리수를 분수로 나타낸다.
Rational(1,2)
원주율은 pi 로 표기한다.
pi
N() 함수는 수치값으로 계산한다.
N(pi)
evalf() 메소드로 수치값을 계산할 수도 있다.
pi.evalf()
복소수는 대문자 $\text I$ 로 나타낸다.
I
1 + 2*I
Symbol 함수로 기호변수 $t$ 를 선언한다.
t = Symbol('t')
symbols 함수는 한 번에 여러개의 기호변수를 선언할 수 있어서 더 편리하다.
x, y, z = symbols('x y z')
기호 변수로 수식을 나타낼 수 있다.
x**2 + 1
수식을 저장하면, 나중에 참조하거나 사용할 수 있다.
수식이 저장되는 변수는 기호가 아니다.
expr = x**2 + 1
expr
subs() 메소드로 기호변수에 특정한 값을 대입하거나, 다른 기호변수로 대체할 수 있다.
expr.subs(x,1)
$x$ 를 $y$ 로 바꾸려면
expr.subs(x,y)
_ 는 바로 이전의 출력을 가리킨다.
_
_.subs(y,2)
여러개의 변수에 값을 대입할 수 있다.
expr = x**2 + 2*y*z + 1
expr
expr.subs( [ (x,1), (y,2), (z,3) ] )
simplify() 함수는 수식을 간단히 만들어준다.
simplify( cos(x)**2 + sin(x)**2 )
expr = x**2 + 5*x + 3*(x-1) + (x-1)**2
expr
simplify(expr)
sympify() 함수는 문자열을 수식으로 바꾸어 준다. 사용자가 입력한 수식을 처리하는데 사용할 수 있다.
string = "x*exp(-y)+cos(x)"
sympify(string)
expand() 함수는 수식을 전개한다.
expand( (x-1)*(x-2) )
factor() 함수는 수식을 인수분해 한다.
factor( x**3 - 8 )
collect() 함수는 수식을 특정 변수의 다항식으로 정리한다.
expr = x*y + x - 3 + 2*x**2 - z*x**2 + x**3
expr
$x$ 의 다항식으로 표현하려면
collect(expr, x)
coeff() 함수는 수식의 특정항의 계수를 반환한다.
expr.coeff(x,2) # x**2 항의 계수
cancel() 함수는 분수의 분자와 분모를 약분하여 간단한 형태로 만든다.
expr = (x**2 + 2*x + 1)/(x**2 + x)
expr
cancel(expr)
또한, 분수식들을 통분하여, 하나의 분수식으로 만들어준다.
expr = 1/x + (3*x/2 - 2)/(x - 4)
expr
cancel(expr)
apart() 함수는 분수식을 부분 분수들로 쪼개어 준다.
expr = 1 / x / (x-1)
expr
apart(expr)
방정식은 Eq( 왼쪽, 오른쪽 ) 으로 표현한다
Eq( 2*x, 1 )
방정식 자체를 변수에 저장하여, 나중에 참조할 수 있다.
eqn = Eq( 2*x, 1 )
eqn
함수의 그래프¶
노트북 문서에 그래프를 나타내려면, 다음 명령을 실행한다.
%matplotlib inline
plot() 함수로 그래프를 그린다. 함수들과 x축, y축의 범위를 지정한다.
plot( x+1, x**2, xlim=(-2,2), ylim=(-1,3) )
미분¶
diff() 함수로 도함수를 구한다.
diff( cos(x), x )
2차 도함수
diff( x**2, x, x )
마지막 인자에 2 를 기입하여도 같은 결과를 얻는다.
diff( x**2, x, 2 )
Derivative() 함수는 도함수를 표현하는 용도에 사용된다.
deriv = Derivative( exp(-x**2), x )
deriv
doit() 메소드로 연산을 수행하여 결과를 얻을 수 있다.
deriv.doit()
도함수의 표현과 그 결과를 수식으로 표현하여 보자.
Eq( deriv, deriv.doit() )
diff() 함수로 편도함수를 구할 수 있다.
diff( exp(x*y), x, y )
편도함수는 대부분의 경우에 미분의 순서에 관계 없다.
diff( exp(x*y), y, x )
Derivative() 함수로 편도함수를 표현해 본다.
deriv = Derivative( exp(x*y), x, y )
deriv
doit() 메소드로 실행하여 결과를 얻는다.
deriv.doit()
적분¶
integrate() 함수로 부정적분을 수행한다.
integrate( 1/x, x )
적분 상수는 따로 출력되지 않는다 !
integrate() 함수로 정적분을 구할 수 있다. 적분 범위는 두번째 인자로 설정한다.
integrate( x**2, (x,0,1) )
무한대는 소문자 o 를 두개 사용하여 oo 로 나타낸다.
integrate( exp(-x**2), (x,0,oo) )
이중적분도 구할 수 있다.
$$\int_{-\infty}^{\infty}\int_{-\infty}^{\infty}e^{-(x^2+y^2)} dx dy$$integrate( exp(-x**2-y**2), (x,-oo,oo), (y,-oo,oo) )
Integral() 함수는 적분을 수학적으로 표현하는데 사용된다.
integ = Integral( log(x) )
integ
doit() 메소드로 실행 결과를 얻는다.
Eq( integ, integ.doit() )
함수의 극한¶
limit 함수로 극한을 구한다.
$$\lim_{x \to 0 }\frac{sin(x)}{x}$$limit( sin(x)/x, x, 0 )
방정식의 해¶
다음의 방정식에 대하여
$$ 2 x = 1$$eqn = Eq( 2*x, 1 )
eqn
solve() 함수로 방정식의 해를 구한다.
solve( eqn, x )
방정식의 우변이 0 인 형태의 경우는, 좌변의 수식만 기입하여 해를 구할 수도 있다.
solve( 2*x-1, x )
이차방정식의 근의 공식
a, b, c = symbols('a, b, c')
eqn = Eq( a*x**2 + b*x + c, 0 )
eqn
solve( eqn, x )
기호변수는 암묵적으로 복소수로 취급되므로, 복소근도 구해진다.
solve( Eq( x**2, -1 ), x )
연립 방정식의 해¶
$$x+y-3=0$$
방정식과 변수를 리스트로 묶어서 인수를 전달한다.
solve( [ x-y+2, x+y-3 ], [x,y] )
튜플로 묶어도 같은 결과를 얻는다.
solve( ( x-y+2, x+y-3 ), (x,y) )
Taylor 급수¶
series( sin(x), x )
x의 차수를 원하는 값으로 설정할 수 있다. 다음 예와 같이 10차 이전까지의 급수를 나타내면
series( sin(x), x, n=10 )
급수를 계산에 활용하기 위해서는, 마지막 차수항 O(x) 를 제거해야 한다. 이를 위해 removeO 메소드를 사용한다.
Sin = series( sin(x), x, n=10 ).removeO()
Sin
사인 함수를 9차의 다항식으로 근사하였다. 이 식에 $x= \pi /2 $ 를 대입하여 보면
Sin.subs( x, pi/2 ).evalf()
행렬¶
Matrix() 함수로 행렬을 만든다.
A = Matrix( [[1,2],[3,4]] )
A
일차원 리스트로 만든 행렬은 열벡터로 표현된다.
Matrix( [1,2] )
단위 행렬은 eye() 함수로 만든다.
eye(2)
행렬의 곱은 A * B 이다.
A * eye(2)
det() 함수로 행렬식(determinant)을 구한다.
A.det()
inv() 함수로 역행렬을 구한다.
A.inv()
행렬의 -1 승으로 역행렬을 구할 수도 있다.
A**-1
행렬과 역행렬의 곱은 단위 행렬이다.
A * A.inv()
행렬의 원소를 기호로 표기하여 수식적으로 다룰 수 있다.
a11, a12, a21, a22 = symbols('a11, a12, a21, a22')
A = Matrix( [[a11, a12],[a21, a22]] )
A
A.det()
A.inv()
연립 방정식의 해¶
행렬로 나타내면
$$ \mathbf {A x} = \mathbf b $$A = Matrix( [[1,-1],[1,1]] )
b = Matrix( [-2,3] )
방정식의 해는
$$ \mathbf x = \mathbf A ^{-1} \mathbf b $$x = A.inv() * b
x
아주 도움이 많이 되는 강의입니다
답글삭제