https://everyday-image-processing.tistory.com/119
https://seong6496.tistory.com/203
https://frhyme.github.io/python-lib/sympy%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%AF%B8%EB%B6%84/
https://docs.sympy.org/latest/index.html
https://github.com/sympy/sympy
수식을 풀어주는 모듈이다. 상당히 많은 수학 연산이 이 모듈로 가능하다.
만일 미분, 적분을 컴퓨터로 푼다고 가정하면, 우리가 하듯이 바로 미분 혹은 적분 식을 보여줄 수가 없다. 범위를 무한에서 -무한까지로 둘 수가 없기 때문이다. 따라서 finite differential를 구하는 방법으로 해 줘야 된다. 즉, numpy에서 제공하는 np.diff를 이용해서, 미분값을 구하고 그를 이용해서 선을 긋는 방식이다. 이걸 쉽게 해주는 것이 sympy모듈이다. 그리고 이때 sympy.plotting에서 plot를 import하면 plot도 쉽게 해준다.
기초 연산
sympy.Rational(1,2): 분수(1/2)
sympy.pi : 파이. 문자 파이를 출력한다.
sympy.N(~) : ~안의 값을 수치로 출력. ex) sympy.N(sympy.pi)
sympy.I : 복소수 i
간단 수식
x,y=sympy.symbols('x y') : x와 y를 변수로 지정.
x=sympy.symbol('x'): x라는 변수 하나를 지정. => 이후 Symbol타입이 된다.
이후 이 symbol를 이용하면
f=x**2+x+sympy.sqrt(x) 처럼 수식을 만들 수 있다.
sympy.simplify() : 식을 간단하게 줄여준다.
sympy.expand() : 안의 식을 전개해서 알려준다.
sympy.factor() : 안의 식을 인수분해서 알려준다.
sympy.collect(ex,x) : ex 식을 x에 대해 정리해 준다.
ex.coeff(x) : x에 대한 계수만을 ex에서 뽑아준다.
sympy.cancel(ex) : ex식을 약분해서 보여준다.
f=sympy.exp(x) : 지수함수 e^x를 f에 저장한다.
방정식
f=sympy.Eq(x+1,1) : 좌변, 우변 순으로 방정식을 만든다.
sympy.solve(f) ; 방정식의 해를 구해준다.
sympy.solve([f1,f2],[x,y]) : 연립방정식 f1,f2에 대한 x,y의 해를 구해준다.
f1=f.subs(x,1).evalf() : subs로 x에 1을 넣어준다. 이후, evalf로 값을 float결과 반환. 여러 변수에 값을 넣을 때는 딕셔너리 이용하면 됨.
급수
sympy.series(sympy.sin(x),x,n=5) : sinx를 x에 대한 테일러 급수로 생성, n=5차항까지(생략가능) 출력해 준다.
~.removeO()를 하면 O(x^6)등을 지워준다.
미분 적분
sympy.diff(f,x) : f라는 식을 x에 대해 미분한다. (f이 여러 변수에 대한 식이면 편미분)
sympy.integrate(f,x) : f라는 식을 x에 대해 적분한다.
미분, 적분 식에 대해서도 sympy.solve를 사용한다.
sympy.Limit((fh-fa)/h,h,0).doit() : 극한 식을 계산한다. f'(a)에 해당된다.