- Запуск notebook
- Основы
- Вывод красиво (в начале пишем)
- Числа в python
- Символы - symbols
- Выражения
- Математические функции и константы
- expand, factor, collect - раскрыть скобки, сгруппировать, в форме полинома
- тригонометрические функции trigsimp и expand_trig
- subs - подстановка, evalf, n, N - вычислить
- apart, together - работа с дробями
- Limit
- series Разложить в ряд
- summation Сумма
- diff Производная
- integrate Интегрирование
- solve - решение уравнений и систем уравнений
- Ссылки
Запуск notebook
ipython notebookОсновы
Вывод красиво (в начале пишем)
import sympy sympy.init_printing() %pylab inline
Числа в python
В Python есть два типа для хранения чиселint
и float
У int
работает целочисленное деление (берется целая часть результата)
>>> type(3) int >>> type(3.14) float >>> 1/3 0
sqrt
может вычислить квадратный корень
>>> import math as mth >>> mth.sqrt(9) 3.0 >>> mth.sqrt(8) 2.82842712475
float
, например, 1/3 + 2/3 это 1. Но если посчитать в виде десятичных дробей, то потеряем точность и не получим 1.
Хочется считать точно и не терять корни.
>>> import sympy >>> sympy.sqrt(3) sqrt(3) >>> sympy.sqrt(8) 2*sqrt(2)

sympy
Символы - symbols
В python можно было первое использование переменной было ее созданиемx = 3
>>> x + 1 Traceback (most recent call last): ... NameError: name 'x' is not defined Traceback (most recent call last): ... NameError: name 'x' is not defined

sympy
нужно сначала определить переменные
>>> x = symbols('x') >>> x + 1 x + 1
>>> x, y, z = symbols('x y z')
>>> height = symbols('height')
>>> crazy = symbols('unrelated') >>> crazy + 1 unrelated + 1
Они имеют специальные значения.
Выражения
Можно записать несколько переменных в выражение. Можно придумать любое имя выражению, например, expr или aaa.>>> expr = 2*x + 3*x - sin(x) - 3*x + 42 >>> expr 2*x + 3*x - sin(x) - 3*x + 42 >>> aaa = x**2 + 2*x +1 >>> aaa x**2 + 2*x +1
>>> expr = x + 2*y >>> expr x + 2*y >>> expr + 1 x + 2*y + 1 >>> expr - x 2*y >>> x*expr x*(x + 2*y)
Математические функции и константы

oo
не забудьте или писать sm.oo
или
>>> from sympy import oo
oo | ∞ |
sqrt(x) | x ** 0.5 |
root(8, 3) | 2 = корень 3 степени из 8 |
root(x, n) | x ** (1.0/n) |
factorial(n) | n! |
sin(x) cos(x) tan(x) cot(x) | sin, cos, tangence, cotangence |
log(x) | ln(x) |
log(x, b) | logb(x) |
simplify - упростить выражение
>>> simplify(sin(x)**2 + cos(x)**2) 1
expand, factor, collect - раскрыть скобки, сгруппировать, в форме полинома
>>> expr = x + 2*y >>> expanded_expr = expand(x*expr) >>> expanded_expr x**2 + 2*x*y >>> factor(expanded_expr) x*(x + 2*y)
>>> factor( x**2-2*x-8 ) (x - 4)*(x + 2) >>> expand( (x-4)*(x+2) ) x**2 - 2*x - 8 >>> collect(x**2 + x*b + a*x + a*b, x) x**2 + (a+b)*x + a*b # collect terms for diff. pows of x
тригонометрические функции trigsimp и expand_trig
>>> expand_trig(sin(x + y)) sin(x)⋅cos(y) + sin(y)⋅cos(x) >>> trigsimp(sin(x)*cos(y) + sin(y)*cos(x)) sin(x + y)
subs - подстановка, evalf, n, N - вычислить
>>> expr = sin(x) + cos(y) >>> expr sin(x) + cos(y) >>> expr.subs({x:1, y:2}) sin(1) + cos(2) >>> expr.subs({x:1, y:2}).n() 0.425324148260754
apart, together - работа с дробями
>>> 1/( (x+2)*(x+1) ) 1 --------------- (x + 1)*(x + 2) >>> apart(1/( (x+2)*(x+1) ), x) 1 1 - ----- + ----- x + 2 x + 1 >>> (x+1)/(x-1) x + 1 ----- x - 1 >>> apart((x+1)/(x-1), x) 2 1 + ----- x - 1
>>> together(1/x + 1/y + 1/z) x*y + x*z + y*z --------------- x*y*z
Limit
limit(функция, переменная, значение)
- найти предел функции при переменной стремящейся к значению
>>> limit(sin(x)/x, x, 0) 1 >>> limit(x, x, oo) oo >>> limit(1/x, x, oo) 0 >>> limit(x**x, x, 0) 1
series Разложить в ряд
Функция.series(переменная, точка, порядок)
- разложить функцию по переменной в окрестностях точки с точностью до порядка
>>> cos(x).series(x, 0, 10) 2 4 6 8 x x x x / 101 - + - + ----- + O\x / 2 24 720 40320 >>> (1/cos(x)).series(x, 0, 10) 2 4 6 8 x 5*x 61*x 277*x / 101 + + ---- + ----- + ------ + O\x / 2 24 720 8064
summation Сумма
b ____ \ ` summation(f, (i, a, b)) = ) f /___, i = a
>>> summation(2*i - 1, (i, 1, n)) 2 n >>> summation(1/2**i, (i, 0, oo)) 2 >>> summation(1/log(n)**n, (n, 2, oo)) oo ___ \ ` \ -n / log (n) /__, n = 2 >>> summation(i, (i, 0, n), (n, 0, m)) 3 2 m m m -- + + - 6 2 3 >>> summation(x**n/factorial(n), (n, 0, oo)) x e
diff Производная
diff(func, var)
производная функции func
по переменной var
>>> diff(sin(x), x) cos(x) >>> diff(sin(2*x), x) 2*cos(2*x) >>> diff(tan(x), x) 2 tan (x) + 1
diff(func, var, n)
производная функции func
по переменной var
порядка n
>>> diff(sin(2*x), x, 1) 2*cos(2*x) >>> diff(sin(2*x), x, 2) -4*sin(2*x) >>> diff(sin(2*x), x, 3) -8*cos(2*x)
integrate Интегрирование
Неопределенный интеграл
>>> integrate(6*x**5, x) 6 x >>> integrate(sin(x), x) -cos(x) >>> integrate(log(x), x) x*log(x) - x >>> integrate(2*x + sinh(x), x) 2 x + cosh(x)
Определенный интеграл
>>> integrate(x**3, (x, -1, 1)) 0 >>> integrate(sin(x), (x, 0, pi/2)) 1 >>> integrate(cos(x), (x, -pi/2, pi/2)) 2 >>> integrate(exp(-x), (x, 0, oo)) 1 >>> integrate(log(x), (x, 0, 1)) -1
Численное интегрирование
Сначала делаем интеграл. Потом вычисляем его численное приближение разными способами. Делаем интеграл:>>> from sympy import sin, sqrt >>> from sympy.abc import x, n >>> from sympy.integrals import Integral >>> e = Integral(sin(x), (x, 3, 7)) # делаем интеграл >>> e Integral(sin(x), (x, 3, 7))
- n - The number of subintervals to use, optional.
- method
- left
- right
- midpoint
- trapezoid
- evaluate - If False, returns an unevaluated Sum expression. The default is True, evaluate the sum.
>>> e.as_sum(2, 'left') 2*sin(5) + 2*sin(3)
>>> e.as_sum(2, 'midpoint') 2*sin(4) + 2*sin(6)
>>> e.as_sum(2, 'right') 2*sin(5) + 2*sin(7)
>>> e = Integral(1/sqrt(x), (x, 0, 1)) >>> e.as_sum(5).n(4) 1.730 >>> e.as_sum(10).n(4) 1.809 >>> e.doit().n(4) # the actual value is 2 2.000 >>> e.as_sum(5, 'left') # бесконечность zoo
Замена переменных transform(x, u)
Performs a change of variables from x to u using the relationship given by x and u which will define the transformations f and F (which are inverses of each other) as follows:- If x is a Symbol (which is a variable of integration) then u will be interpreted as some function, f(u), with inverse F(u). This, in effect, just makes the substitution of x with f(x).
- If u is a Symbol then x will be interpreted as some function, F(x), with inverse f(u). This is commonly referred to as u-substitution.
>>> from sympy.abc import a, b, c, d, x, u, y >>> from sympy import Integral, S, cos, sqrt >>> i = Integral(x*cos(x**2 - 1), (x, 0, 1)) >>> i.transform(x, u) Integral(u*cos(u**2 - 1), (u, 0, 1)) >>> i.transform(x**2 - 1, u) Integral(cos(u)/2, (u, -1, 0))
>>> Integral(cos(x**2 - 1), (x, 0, 1)).transform(x**2 - 1, u) Traceback (most recent call last): ... ValueError: The mapping between F(x) and f(u) did not give a unique integrand.
solve - решение уравнений и систем уравнений
Для решения уравнения вида f(x) = 0>>> solve( x**2 + 2*x - 8, x) [2, 4]
>>> gen_sol = solve( a*x**2 + b*x + c, x) >>> [ gen_sol[0].subs({'a':1,'b':2,'c':-8}), gen_sol[1].subs({'a':1,'b':2,'c':-8}) ] [2, -4]
>>> solve([x + y - 3, 3*x - 2*y], [x, y]) {x: 6/5, y: 9/5}
Ссылки
- wakari / Gallery / Lecture 5 Sympy J. Robert Johansson
- sympy_tutorial.pdf: SymPy tutorial