Пакет символьных вычислений SymPy
Научные вычисления базируются на получении приближенного численного решения задачи. Они могут дополняться символьными вычислениями, которые подразумевают преобразования и работу с математическими равенствами и формулами, которые рассматриваются как последовательность символов. Системы аналитических вычислений (системы компьютерной алгебры) используются для символьного интегрирования и дифференцирования, вычисления пределов, подстановки одних аналитических выражений в другие, упрощения формул и т.д.
Символьные вычисления в Python поддерживаются пакетом SymPy73. Это полнофункциональная и одновременно простая для использования и легко расширяемая система компьютерной алгебры. Пакет SymPy полностью написан на Python и при использовании не требует никаких внешних библиотек.
Для задания одной символьной переменной используется функция Symbol О, нескольких — symbols О или var(). При работе с числами с плавающей запятой имеется возможность выбора точности вычислений с использованием функции N() (арифметика произвольной точности). Поддерживаются вычисления с комплексными числами (в SymPy \Л-1 = I, е = Е). Для представления дробей используется функция Rationale). Дополнительные возможности при выводе результатов предоставляет функция pprint(). Следующий пример иллюстрирует отмеченные возможности пакета SymPy.
import sympy as sm x, у = sm.symbols (’xy’)
print ’pi:’, sm.N(sm.pi, 50)
print ’complex:’, sm.N(l/(2 + sm.I), 50)
x = sm.Rational(1, 2)
у = sm.Rational(3, 7)
gm.pprint(x + y)
Поддерживаются основные символьные операции с выражениями. Для упрощения символьного выражения применяется функция simplifyO. Для упрощения тригонометрических функций используется trigsimpO, для численных упрощений — nsimplifyO.
import sympy as sm
x = sm. Symbol Ox’)
si = (l-2*x)*(3+x) + x**2
print ’simplify:’, sm.simplify(si)
s2 = sm.sin(x)**2 + sm.cos(x)**2
print ’trigsimp:’, sm.trigsimp(s2)
s3 = sm.nsimplify(sm.pi*7, tolerance=0.01)
print ’nsimplify:’, s3
Раскрытие скобок в символьных выражениях обеспечивается функцией expand О (ниже приведен пример для полиномов и тригонометрических функций комплексного переменного). Отметим также функцию apart О для
разложения на простые дроби.
*
import sympy as sm x = sm. Symbol (’x’) у = sm.Symbol(’y’) si = (x+y)**3
print ’expand (basic):’, sm.expand(sl) s2 = sm.sin(x + sm.I*y)
print ’expand (complex):’, sm.expand(s2, complex=True)
s3 = 2/( (x-l)*(x+l) )
print ’apart:’, sm.apart (s3, x)
!!||Щ|§||Д^
expand ; ( complex ). cosh (im (x) + fe (y ))* sin:(-~im(y): • re (x)^ : I*Cps(“im(y) -{- re (x)) * s i n h (liii (x) 4- r e; (у ])
В пакете Sympy поддерживаются основные операции математического анализа. Для аналитического дифференцирования используется функция diff ()} для интегрирования — integrate().
import sympy as sm x = sm.Symbol(’x’) si = sm.log(l+x) + 1/(1+x) print ’diff:’, sm.diff(sl, x) s2 = sm.log(x**2)
print ’integrate:’, sm.integrate(s2, x) s3 = x / (x**2 + 2*x+l)
print ’integrate (0,1):’, sm.integrate(s3, (x, 0, 1))
Вычисление пределов обеспечивается функцией limit О. Для разложения функции в ряд Тейлора в заданной точке используется series О.
import sympy as sm x = sm.Symbol(’x’) si = x**x
print ’limit (x->0):’, sm.limit(si, x, 0) s2 = sm.cos(x)
print ’series:’, s2.series(x, 0, 8)
Для решения алгебраических уравнений и систем в пакете Sympy используется функция solve() (уравнения записываются в виде fi(x0) жт), i = 0,1, Кроме того имеется возможность получения аналитического реше
ния задачи Коши для обыкновенных дифференциальных уравнений — функция dsolveQ. В примере ищется общее решение уравнения
d2u
Л?+“ = 0-
import sympy as sm x, у = sm.symbols(’xy’) u = sm.Function(’u’) si = x**4 - 1
print ’solve:’, sm.solve(si, x) s2 = (x**2 + y**2 - 1, x - у + 1) print ’solve (system):’, sm.solve(s2, x, y) eq = sm.Derivative(u(x), x, x) + u(x)
print ’dsolve:’, sm.dsolve(eq, u(x))
s olve. [1, -1, -I, I]
Do'stlaringiz bilan baham: |