Sympy

Sympy

Sympy

Python モジュールの一つ。Jypter には標準装備されている。

記号処理を行う

J塾内の Sympy サンプルは,事前にSympy 初期化プログラムが動作していることが前提となっているものが多い。

関連

逆引き:Python

数検 Python

Sympy 公式文書

Sympy

ソース書式

>|python|
for cnt in range(10):
    print(cnt)
 ||<


Python ライブラリーの一つで,代数演算をサポート

Sympy 公式サイト

数II・B, 数検2級レベルの数式

数III, 数検準1級レベルの数式

演習:微分

演習:積分

演習:極限

演習:行列

演習:三角関数

演習:いろいろな関数

演習:極座標と極方程式

演習:確率

離散事象シミュレーションライブラリの SimPy と名前が似ているが別物。

Jupyter notebook と組み合わせて使用すると,ブラウザを電子ノートとしてその上で式展開などができる。

Sympy を使うための用語(J塾独自のもの)

数学用語

  • 左辺 lhs left-hand side
  • 右辺 rhs right-hand side
Sympy 初期化プログラム サンプル動作の前に,事前動作するもの,設定&確認プログラム

matplotlib, numpy も使用

#Sympy 初期化プログラム Ver 1.10 2019/01/16
import numpy as np
import matplotlib.pyplot as plt
from sympy import *
from sympy.plotting import *
from sympy.stats import *
from sympy.ntheory import *
%matplotlib inline
var("a:z") # a から z までの一文字変数は,記号変数とする
rt = sqrt
init_printing()
Integral(x**2+x, x), rt(2)

使い方

Sympy 初期化プログラムを事前に動作させる。

matplotlib, numpy も使用

方程式を作る Eq( )

siki = Eq(y, x+2)
siki # y=x+2

グラフ表示

#陽関数の場合は,sympy.plotting.plot()
#陰関数の場合は,sympy.plot_implicit()

p1 = plot_implicit(x**2+y**2-1, (x, -2, 2), (y, -2, 2), show=False)
p2 = plot(x, line_color="red", show=False)
p1.extend(p2)
p1.show()


evalf( ) 数値にする

y = 2 * pi * r
r = 3
y, y.evalf() # r が残るときは,さらに,y.evalf().evalf() とする

pi の桁数を固定する

piv = pi.evalf(2)
print(piv) # 3.1

subs代入 substitution

siki = x + y * z
siki.subs([(x, 1), (y, 2), (z, -3)])
y = p + r/(x-q)
ys = y.subs([(p, 3), (q, 4),(r, -5)])
plot(ys, (x, -10, 10), ylim=(-10, 10))
y, ys

Rational( , ) S( ) 分数

b = Rational(2,5)
c = S(3)/5
print (b, c) # 2/5 3/5
b = b * 1.0
c = c * 1
cv = c *1.0
print (b, c, cv) # 00.400000000000000 3/5 0.600000000000000

expand( ) 展開する

a, b, c = symbols('a b c')
siki = (a+b)*(a+b)
expand(siki)

factor( ) 因数分解をする

siki = x**2 -2*x*y + y**2
factor(siki)

cancel( ) 約分する

siki = (x**2 - y**2) / (x - y)
cancel(siki)

π

π = pi
r = symbols('r')
S = 2*π*r**2

plot(式) グラフを描く

plot(x**3)

slove( ) 方程式を解く

方程式は, = 0 の形としておく。

ans = solve(x**2 - 2*x + 1, x)
ans
連立方程式を解く
ans = solve ([x**2 - y, 2*x - y], [x, y]) 
plot(x**2, 2*x)
print(ans)

factorint( ) 素因数分解する

D = factorint(60)
print(D) #{2: 2, 3: 1, 5: 1}

%matplotlib

ipywidgets (値変化を対話型で動作させる)

Azure Notebooks で動作可能

from ipywidgets import interact
@interact(n=5)
def f(n):
    return n

三角関数グラフ表示

xa = np.linspace(0, 10, 100)
print(xa)
plt.plot(xa, np.sin(xa))
plt.plot(xa, np.cos(xa))

単位円を描く

f = x ** 2 + y ** 2 - 1
plt.rcParams['figure.figsize'] = (4, 4)
p1 = plot_implicit(f, (x, -1.5, 1.5), (y, -1.5, 1.5), show=False)
p1.show()
plt.rcParams['figure.figsize'] = (3,3)
plot_parametric(cos(t), sin(t), (t, 0, 2*pi))

数II, 数検2級レベル

三角関数加法定理

expand(sin(x+y), trig=True)

Power( ) 累乗

pw = Pow(x, 10)
pw

log () 対数

log(x * x + 1)

sum( ) Σ

Sx = Sum(n**x, (n, 1, k))
Sx

diff 微分

⇒ 演習:微分

fx = x**3 + x**2 + 1
dfx = diff(fx)
dfx

数列

数III, 数検準1級レベル

Matrix( ) 行列

A = Matrix([[1,x], [y,1]])
A * 3

limit( ) 極限を計算,表示する

fx = 3/x
ans = limit(fx, x, oo) # oo(オー,オー) は,∞ を表す)
ex = Limit(fx, x, oo)  # Limit の L は,大文字
print (ans) # 計算する
ex          # 式をきれいに表示
fx = sin(5*x) / sin(2*x) # 関数の式
ans = limit(fx, x, 0) # 極限の計算式
ex = Limit(fx, x, 0) # 極限の表示式
print(ans)
ex
limit(1/x, x, 0)
limit(1/x, x, 0, dir='-')

無限級数を計算,表示する

siki = 1/((2*k-1)*(2*k+1)) # k の式
sx = Sum(siki,(k, 1, n)) # Σ
ans = limit(sx, n, oo) # 無限級数の計算式
ex = Limit(sx, n, oo) # 無限級数の表示式
print(ans)
ex

その他,無限級数問題?

分数式, 双曲線,apart( )

#分数関数の式変形
y = (2*x + 1)/ (x + 3)
plot(y, (x, -10, 10), ylim=(-10, 10))
y, apart(y)
# 分数関数の一般式に代入
y = p + r/(x-q)
ys = y.subs([(p, 3), (q, 4),(r, -5)])
plot(ys, (x, -10, 10), ylim=(-10, 10))
y, ys