初等関数

四則演算は”+ー*・”.分数は,

In [2]:
from sympy import *
from IPython.display import display
init_printing(use_latex='mathjax')

print(3/4);
0.75

であるが,Rational(有理数)というコマンドを使うと

In [2]:
Rational(3/4)
Out[2]:
$$\frac{3}{4}$$

と,分数のまま表示してくれる.

sympyを使うと$x$を変数として,そのままの記号で使うことが可能となる.ちょっと変な記述だが,

In [3]:
x = symbols('a')
eq1 = 3*x**2 -4*x + 3
pprint(eq1)
   2          
3⋅a  - 4⋅a + 3

とすると変数名としてのxとそこに割り当てられた記号としての$a$の関係がわかるだろう.

その他の関数もそのまま直感的な名前が使える.

In [4]:
pprint(sqrt(2))
√2
In [5]:
pprint(log(x))
log(a)
In [6]:
pprint(sin(x)**2+cos(x)**2)
   2         2   
sin (a) + cos (a)

値として取り出すのは,以下のふた通り.

In [9]:
print( pi.evalf() )
print( N(pi, 100) )
3.14159265358979
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068

ラジアンと角度(lost)

mpmathをいれないと駄目? でも,mpmathの説明があまりまともにされてない. 数値計算だよね.

degreesとかradiansに関しては,sympyで用意されてないようだ.

In [7]:
from math import *
degrees(pi/3)
Out[7]:
$$59.99999999999999$$
In [8]:
radians(60)
Out[8]:
$$1.0471975511965976$$
In [9]:
cos(pi/3)
Out[9]:
$$0.5000000000000001$$
In [10]:
from sympy import cos, pi

cos(pi/3)
Out[10]:
$$\frac{1}{2}$$
In [11]:
pprint(pi)
π
In [12]:
print(Rational(1/3))
6004799503160661/18014398509481984

SympyではRational, Real, Integerが数としてあるらしい.

Pi/3などをrationalとしては扱えない.したがって,三角関数の変形ではミスることになるな. んーーーん.ちとしんどいかも.

In [13]:
%matplotlib inline

from sympy import Symbol
from sympy.plotting import plot
from sympy import sin, sinc

x=Symbol('x')
plot(sinc(x))
Out[13]:
<sympy.plotting.plot.Plot at 0x1094aaba8>
In [14]:
from sympy import acos, oo, pi
acos(oo)
Out[14]:
$$\infty i$$
In [15]:
acos(0)
Out[15]:
$$\frac{\pi}{2}$$
In [16]:
%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()

ユーザ定義関数

簡単な定義

単純にユーザが関数を定義するには下の通りすれば良い.その場合,入力はsubsを使う.

In [17]:
my_func = 2*x - 3
In [18]:
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
In [19]:
from sympy.plotting import plot
p1 = plot(my_func, (x,-2,2),
         legend=True, show=False)
p1[0].line_color = 'r'
p1.show()

より厳密な定義

より厳密に関数を定義するにはFunctionで定義する必要がある.

In [20]:
f = Function('f')
In [21]:
pprint(Derivative(f(x),x))
d       
──(f(x))
dx      
In [22]:
?Function
In [23]:
class my_func(Function):
    @classmethod
    def eval(cls, x):
        return 2*x**2-3*x+4

plot(my_func(x))
Out[23]:
<sympy.plotting.plot.Plot at 0x112ff85f8>
In [24]:
diff(my_func(x),x)
Out[24]:
$$4 x - 3$$
In [25]:
plot(diff(my_func(x),x),my_func(x))
Out[25]:
<sympy.plotting.plot.Plot at 0x1130e6a20>
In [ ]: