四則演算は”+ー*・”.分数は,
from sympy import *
from IPython.display import display
init_printing(use_latex='mathjax')
print(3/4);
0.75
であるが,Rational(有理数)というコマンドを使うと
Rational(3/4)
と,分数のまま表示してくれる.
sympyを使うと$x$を変数として,そのままの記号で使うことが可能となる.ちょっと変な記述だが,
x = symbols('a')
eq1 = 3*x**2 -4*x + 3
pprint(eq1)
2 3⋅a - 4⋅a + 3
とすると変数名としてのxとそこに割り当てられた記号としての$a$の関係がわかるだろう.
その他の関数もそのまま直感的な名前が使える.
pprint(sqrt(2))
√2
pprint(log(x))
log(a)
pprint(sin(x)**2+cos(x)**2)
2 2 sin (a) + cos (a)
値として取り出すのは,以下のふた通り.
print( pi.evalf() )
print( N(pi, 100) )
3.14159265358979 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
mpmathをいれないと駄目? でも,mpmathの説明があまりまともにされてない. 数値計算だよね.
degreesとかradiansに関しては,sympyで用意されてないようだ.
from math import *
degrees(pi/3)
radians(60)
cos(pi/3)
from sympy import cos, pi
cos(pi/3)
pprint(pi)
π
print(Rational(1/3))
6004799503160661/18014398509481984
SympyではRational, Real, Integerが数としてあるらしい.
Pi/3などをrationalとしては扱えない.したがって,三角関数の変形ではミスることになるな. んーーーん.ちとしんどいかも.
%matplotlib inline
from sympy import Symbol
from sympy.plotting import plot
from sympy import sin, sinc
x=Symbol('x')
plot(sinc(x))
<sympy.plotting.plot.Plot at 0x1094aaba8>
from sympy import acos, oo, pi
acos(oo)
acos(0)
%matplotlib inline
from sympy import *
x = Symbol('x')
p1 = plot(sinh(x), cosh(x), (x,-pi,pi),
legend=True, show=False)
p1[0].line_color = 'b'
p1[1].line_color = 'r'
p1.show()
my_func = 2*x - 3
from sympy import *
a, x = symbols('a x')
pprint(my_func.subs({x:x}))
pprint(my_func.subs({x:a}))
2⋅x - 3 2⋅a - 3
from sympy.plotting import plot
p1 = plot(my_func, (x,-2,2),
legend=True, show=False)
p1[0].line_color = 'r'
p1.show()
Python 標準のdefを使うことも可能.
from sympy import *
x = symbols('x')
def func(x):
return x**2
p1 = plot(func(x), (x,-2,2),
legend=True, show=False)
p1[0].line_color = 'r'
p1.show()
integrate(func(x),x)
より厳密に関数を定義するにはFunctionで定義する必要がある.
f = Function('f')
pprint(Derivative(f(x),x))
d ──(f(x)) dx
?Function
class my_func(Function):
@classmethod
def eval(cls, x):
return 2*x**2-3*x+4
plot(my_func(x))
<sympy.plotting.plot.Plot at 0x112ff85f8>
diff(my_func(x),x)
plot(diff(my_func(x),x),my_func(x))
<sympy.plotting.plot.Plot at 0x1130e6a20>