TeX 出力のためには次のコードを読み込ませること。
from sympy import *
from IPython.display import display
init_printing(use_unicode=True)
# シンボル定義
x = Symbol('x')
y = Symbol('y')
何と言ってもまずは公式。
次のサイトは sympy の結果をランダムで色々教えてくれる。 適当に眺めるのにすごくいい。
次のサイトにアクセスすれば sympy をインストールしなくてもオンラインで使える。
display で出力すると mathjax 連携してくれて素敵.
display(x + y + x - 4 * y)
a = Integral(cos(x)*exp(x), x)
display(Eq(a, a.doit()))
import sympy
display(sympy.sqrt(3))
勝手に計算やってくれるので素敵.
display(sympy.sqrt(8))
from sympy import symbols
x, y = symbols('x y')
expr = x + 2*y
display(expr)
display(expr + 1)
display(expr - x)
display(x*expr)
from sympy import expand, factor
expanded_expr = expand(x*expr)
display(expanded_expr)
display(factor(expanded_expr))
from sympy import *
x, t, z, nu = symbols('x t z nu')
導関数の計算.
display(diff(sin(x)*exp(x), x))
display(integrate(exp(x)*sin(x) + exp(x)*cos(x), x))
## 計算: integrate(sin(x**2), (x, -oo, oo))
display(integrate(sin(x**2), (x, -oo, oo)))
display(limit(sin(x)/x, x, 0))
display(solve(x**2 - 2, x))
f = Function('f')
display(dsolve(Eq(f(t).diff(t, t) - f(t), exp(t)), f(t)))
display(Matrix([[1, 2], [2, 2]]).eigenvals())
print('besselj(nu, z).rewrite(jn)')
display(besselj(nu, z).rewrite(jn))
besselj(nu, z).rewrite(jn)
print('latex(Integral(cos(x)**2, (x, 0, pi)))')
display(latex(Integral(cos(x)**2, (x, 0, pi))))
latex(Integral(cos(x)**2, (x, 0, pi)))
'\\int_{0}^{\\pi} \\cos^{2}{\\left (x \\right )}\\, dx'
display(pi**2)
display(pi.evalf())
display((pi + exp(1)).evalf())
display(sqrt(2).evalf(100))
display(oo)
display(oo + 1)
display(oo > 99999)
display(expand(x + y, complex=True))
display(I*im(x) + I*im(y) + re(x) + re(y))
display(expand(cos(x + y), trig=True))
display(cos(x)*cos(y) - sin(x)*sin(y))
expr = (x + y)**5
display(expr)
display(expand(expr))
$\cos^2 y + \sin^2 y = 1$ を自動で計算してくれる.
a = (x + x**2)/(x*sin(y)**2 + x*cos(y)**2)
display(x)
display(simplify(a))
display(div(x**2 - 4 + x, x-2))
display(gcd(2*x**2 + 6*x, 12*x))
display(lcm(2*x**2 + 6*x, 12*x))
display(factor(x**4/2 + 5*x**3/12 - x**2/3))
display(factor(x**2 + 4*x*y + 4*y**2))
display(solve(x**2 + 4*x*y + 4*y**2))
display(solve(x**2 + 4*x*y + 4*y**2, y))
display(solve(x**2 + 4*x + 181, x))
display(solve(x**3 + 4*x + 181, x))
display(solve_poly_system([y**2 - x**3 + 1, y*x], x, y))
f = x**2 + 3*x + 2
display(f)
この多項式に $x=1$ を代入する.
f1 = f.subs([(x, 1)])
display(f1)
expr = cos(x) * ln(y) + 2/y
display(expr)
display(solve(expr, x))
display(solve(x**4 - 1, x))
display(solve([x + 5*y - 2, -3*x + 6*y - 15], [x, y]))
$x^4 - 3 x^2 + 1 = 0$ を解く.
f = x**4 - 3*x**2 + 1
display(factor(f))
display(factor(f, modulus=5))
display(solve(exp(x) + 1, x))
display(satisfiable(x & y))
display(satisfiable(x & ~x))
{y: True, x: True}
False
x, y, z = symbols('x y z')
eq1 = x * y * z + 234
display(eq1)
eq2 = x + y + z - 20
display(eq2)
eq3 = 5 * x - y + 2 * z - 85
display(eq3)
solve([eq1,eq2,eq3], [x,y,z])
from sympy import Matrix
display(Matrix([[1,0], [0,1]]))
Numpy
と違ってシンボルを含む行列が書ける¶x = Symbol('x')
y = Symbol('y')
A = Matrix([[1,x], [y,1]])
display(A)
display(A**2)
display(limit(tan(x), x, pi/2))
display(limit(tan(x), x, pi/2, dir="-"))
display(limit(sin(x)/x, x, 0))
コードとして無限大は oo
で書く.
display(limit(sin(x)/x, x, oo))
display(diff((sin(x) * x**2) / (1 + tan(cot(x)))))
display(diff(cot(x*y), y))
display(diff(y(x)**2 - 5* sin(x), x))
f = x**2 / y + 2 * x - ln(y)
display(diff(f,x))
微分の階数は第 3 引数で指定する.
display(diff(sin(2*x), x, 1))
display(diff(sin(2*x), x, 2))
display(diff(sin(2*x), x, 3))
f, g = symbols('f g', cls=Function)
display(f)
f
display(f(x))
display(f(x).diff(x, x) + f(x))
diffeq = f(x).diff(x) + f(x)
display(dsolve(diffeq, f(x)))
diffeq = f(x).diff(x, x) + f(x)
display(dsolve(diffeq, f(x)))
diffeq = f(x).diff(x, x, x) + f(x)
display(dsolve(diffeq, f(x)))
方程式が可分離であることを知っているならキーワードとして hint='separable'
display(dsolve(sin(x)*cos(f(x)) + cos(x)*sin(f(x))*f(x).diff(x), f(x), hint='separable'))
display(dsolve(x * f(x).diff(x) + f(x) - f(x) ** 2))
display(dsolve(x * f(x).diff(x) + f(x) - f(x) ** 2, hint='Bernoulli'))
display(sin(x).series(x))
display(series(sin(x), x, pi/2))
display(integrate(6*x**5, x))
display(integrate(sin(x), x))
display(integrate(log(x), x))
display(integrate(2*x + sinh(x), x))
expr = cos(x) * ln(y) + 2/y
display(integrate(expr, x))
display(integrate(tan(x)))
display(integrate(2*x + y, y))
display(integrate(2*x + y, (x, 1, 3)))
display(integrate(2*x + y, (x, 1, 3), (y, 2, 4)))
display(integrate(exp(-x**2)*erf(x), x))
display(integrate(x**3, (x, -1, 1)))
display(integrate(sin(x), (x, 0, pi/2)))
display(integrate(cos(x), (x, -pi/2, pi/2)))
display(integrate(exp(-x), (x, 0, oo)))
display(integrate(exp(-x**2), (x, -oo, oo)))
display(integrate(tan(x), (x, 0, pi/2)))
display(integrate(1/(x**2 + 1), (x, 0, oo)))
display(integrate(exp(x) / (1 + exp(2 * x))))
display(integrate((2 * x+3)**7))
%matplotlib inline
from sympy import init_printing
from sympy.plotting import plot
from sympy.core import Function
from sympy import symbols
f = symbols('f', cls=Function)
x = symbols('x')
f = 2 * x ** 2 - 3 * x + 1
# 関数の定義
# xが[-1, 2]の範囲を図示する
plot(f, (x, -1, 2))
<sympy.plotting.plot.Plot at 0x19781d84160>
%matplotlib inline
from sympy import init_printing
from sympy.plotting import plot
from sympy.core import Function
from sympy import symbols
from sympy.plotting import plot_implicit
# 描画領域の修正:円がきちんと表示できるように
plt.rcParams['figure.figsize'] = (1, 1)
x, y = symbols("x y")
# f(x, y)は半径1の円を表す
f = x ** 2 + y ** 2 - 1
# f(x, y)を図示する
plot_implicit(f, (x, -2, 2), (y, -2, 2))
<sympy.plotting.plot.Plot at 0x197841781d0>