Examples ¶
방정식,equation 풀기: expr=0 꼴을 풀려면 solve(expr, var)
ex. 이차방정식,quadratic_equation 풀기
ex. 이차방정식,quadratic_equation 풀기
solve(x**2 - 3*x + 2, x)하면 두 근 1, 2가 [1,2] 형식으로 나옴
integrate(sin(x))
하면 적분,integration하여 -cos(x)가 나옴
Ivan Savov ¶
float는 16자리까지만 정확.
정확한 수의 표현은 SymPy 객체로 함.
: Pow(2, 1/2)
: S('1/7') or Rational(1, 7)
: Pow(2, 1/2)
: S('1/7') or Rational(1, 7)
SymPy 객체의 근사값을 float로 얻으려면 .evalf() or .n()
심볼 정의: p = Symbol('p') or p = symbols('p')
p + 2 : Add(Symbol('p'), Integer(2))
일련의 변수 정의
a0, a1, a2 = symbols('a0:3')
a0, a1, a2 = symbols('a0:3')
I | 허수단위,imaginary_unit |
E | 자연로그의_밑,e |
S() | sympify함수 |
N() | 수치 근사값 구하기에 쓰임 |
O | big-O 표기법에 쓰임 |
_ | 마지막 인쇄된 값이 들어있는 특수 변수 |
식
>>> expr=2*x+3*x-sin(x)-3*x+42 >>> simplify(expr) 2*x - sin(x) + 42 >>> factor(x**2-2*x-8) (x - 4)*(x + 2) >>> expand((x-4)*(x+2)) x**2 - 2*x - 8 >>> collect(x**2+x*m+n*x+m*n, x) m*n + x**2 + x*(m + n)
값을 식에 대입하고 숫자로 얻기
>>> expr = sin(x) + cos(y) >>> expr sin(x) + cos(y) >>> expr.subs({x:1, y:2}) cos(2) + sin(1) >>> expr.subs({x:1, y:2}).n() 0.425324148260754
솔브
>>> solve(x**2 + 2*x - 8, x) [-4, 2] >>> a, b, c = symbols('a b c') >>> solve(a*x**2 + b*x + c, x) [(-b + sqrt(-4*a*c + b**2))/(2*a), -(b + sqrt(-4*a*c + b**2))/(2*a)] --- 근의 공식이 나옴 >>> solve([x + y - 3, 3*x - 2*y], [x, y]) --- 연립방정식 x+y=3 and 3x-2y=0을 x, y에 대해 푼다 {x: 6/5, y: 9/5}
유리식 결합
>>> a,b,c,d=symbols('a b c d') >>> a/b+c/d a/b + c/d >>> together(a/b+c/d) (a*d + b*c)/(b*d)
유리식 분자를 분모로 나누기
>>> apart((x**2 + x + 4) / (x + 2)) x - 1 + 6/(x + 2)
삼각함수
>>> sin(pi/6) 1/2 >>> cos(pi/6) sqrt(3)/2 >>> expand(sin(2*x)) sin(2*x) >>> expand_trig(sin(2*x)) 2*sin(x)*cos(x)
복소수
>>> I*I -1 >>> z=4+3*I >>> re(z) 4 >>> im(z) 3 >>> Abs(z) 5 >>> arg(z) atan(3/4) >>> conjugate(z) 4 - 3*I
오일러 공식
x가 실수임을 지정하고, 복소수 전개에 관심이 있음을 expand에 알려야 한다.
x가 실수임을 지정하고, 복소수 전개에 관심이 있음을 expand에 알려야 한다.
>>> x=symbols('x',real=True) >>> exp(I*x).expand(complex=True) I*sin(x) + cos(x)복소수 지수를 사용해 사인과 코사인 함수를 다시 쓰기
>>> cos(x).rewrite(exp) exp(I*x)/2 + exp(-I*x)/2
무한대는 oo으로 표현.
>>> oo+1 oo >>> 60000<oo True >>> 1/oo 0
극한
>>> limit((1+1/n)**n, n, oo) E >>> limit(1/x, x, oo) 0
미분
>>> diff(x**3, x) 3*x**2 >>> diff(x**2*sin(x), x) x**2*cos(x) + 2*x*sin(x) >>> diff(x**3, x, 2) # 2계 미분 6*x
부정적분
>>> integrate(x**3, x) x**4/4 >>> integrate(sin(x), x) -cos(x) >>> integrate(ln(x), x) x*log(x) - x정적분
>>> integrate(x**3, (x, 0, 1)) 1/4
수열은 함수 표기 a(n) 대신 a_n을 씀.
>>> a_n=1/n >>> b_n=1/factorial(n) >>> a_n.subs({n:5}) # a_n의 5항의 값은? 1/5 >>> [a_n.subs({n:i}) for i in range(0,8)] [zoo, 1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7] --- 책에 oo로 나오는게 zoo라고 나오는 이유가 뭐지? >>> [b_n.subs({n:i}) for i in range(0,8)] [1, 1, 1/2, 1/6, 1/24, 1/120, 1/720, 1/5040]
급수 (급수,series, 합,sum)
>>> a_n=1/n >>> b_n=1/factorial(n) >>> summation(a_n, [n, 1, oo]) oo --- 발산 >>> summation(b_n, [n, 0, oo]) E --- e에 수렴
벡터
특별한 벡터 객체를 쓰지 않고 Matrix를 사용.
특별한 벡터 객체를 쓰지 않고 Matrix를 사용.
>>> u=Matrix([[4,5,6]]) # row vector >>> v=Matrix([[7],[8],[9]]) # col vector >>> v.T Matrix([[7, 8, 9]]) >>> u.T Matrix([ [4], [5], [6]]) >>> u[0] # 0-based indexing for entries 4 >>> u.norm() # length of u sqrt(77) >>> uhat = u/u.norm() # unit vector >>> uhat Matrix([[4*sqrt(77)/77, 5*sqrt(77)/77, 6*sqrt(77)/77]]) >>> uhat.norm() 1
내적/외적
>>> u=Matrix([ 4,5,6]) >>> v=Matrix([-1,1,2]) >>> u.dot(v) 13 >>> u.cross(v) Matrix([ [ 4], [-14], [ 9]])
미분방정식: 질량-용수철 시스템의 미분방정식
즉 각속도,angular_velocity 일 때
을 푸는 법.
>>> t = Symbol('t') # time t >>> x = Function('x') # position function x(t) >>> w = Symbol('w', positive=True) # angular frequency w >>> sol = dsolve(diff(x(t), t, t) + w**2*x(t), x(t)) >>> sol x(t) = C1*sin(t*w) + C2*cos(t*w) >>> x = sol.rhs >>> x C1*sin(t*w) + C2*cos(t*w)답 는 단순조화운동(단조화운동,simple_harmonic_motion,SHM)을 묘사한다.