分享

SymPy简易教程(二)

 londonKu 2012-09-30

微积分

极限

sympy中极限容易求出,它们遵循极限语法  limit(function, variable, point) ,所以计算x->0f(x)的极限,即limit(f, x, 0)

>>>from sympy import *

>>>x=Symbol("x")

>>>limit(sin(x)/x, x, 0)

1

 

>>>limit(x, x, oo)

oo

 

>>>limit(1/x, x, oo)

0

 

>>>limit(x**x, x, 0)

1

 

有一些特殊的极限的例子,你可以阅读文件test_demidovich.py

 

微分

你可以对任意SymPy表达式微分。diff(func, var)。例如:

>>>from sympy import *

>>>x = Symbol('x')

>>>diff(sin(x), x)

cos(x)

>>>diff(sin(2*x), x)

2*cos(2*x)

 

>>>diff(tan(x), x)

1 + tan(x)**2

 

你可以通过以下验证:

>>>limit((tan(x+y)-tan(x))/y, y, 0)

1 + tan(x)**2

 

计算高阶微分 diff(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)

 

级数展开

函数 series(var, point, order)

>>>from sympy import *

>>>x = Symbol('x')

>>>cos(x).series(x, 0, 10)

1 - x**2/2 + x**4/24 - x**6/720 + x**8/40320 + O(x**10)

>>>(1/cos(x)).series(x, 0, 10)

1 + x**2/2 + 5*x**4/24 + 61*x**6/720 + 277*x**8/8064 + O(x**10)

 

其他简单的例子:

from sympy import Integral, Symbol, pprint

 

x = Symbol("x")

y = Symbol("y")

 

e = 1/(x + y)

s = e.series(x, 0, 5)

 

print(s)

pprint(s)

 

执行之后打印出的结果为:

1/y + x**2*y**(-3) + x**4*y**(-5) - x*y**(-2) - x**3*y**(-4) + O(x**5)

     2    4         3

1   x    x    x    x

─ + ── + ── - ── - ── + O(x**5)

y    3    5    2    4

    y    y    y    y

 

积分

SymPy支持不定积分,超越函数与特殊函数的定积分。SymPy有力的扩展Risch-Norman 算法和模型匹配算法。

>>>from sympy import *

>>>x, y = symbols('xy')

 

初等函数:

>>>integrate(6*x**5, x)

x**6

>>>integrate(sin(x), x)

-cos(x)

>>>integrate(log(x), x)

-x + x*log(x)

>>>integrate(2*x + sinh(x), x)

cosh(x) + x**2

 

特殊函数:

>>>integrate(exp(-x**2)*erf(x), x)

pi**(1/2)*erf(x)**2/4

 

定积分:

>>>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 Symbol, exp, I

>>>x = Symbol("x")

>>>exp(I*x).expand()

exp(I*x)

>>>exp(I*x).expand(complex=True)

I*exp(-im(x))*sin(re(x)) + cos(re(x))*exp(-im(x))

>>>x = Symbol("x", real=True)

>>>exp(I*x).expand(complex=True)

I*sin(x) + cos(x)

 

函数

三角函数::

In [1]: sin(x+y).expand(trig=True)

Out[1]: cos(x)*sin(y) + cos(y)*sin(x)

 

In [2]: cos(x+y).expand(trig=True)

Out[2]: cos(x)*cos(y) - sin(x)*sin(y)

 

In [3]: sin(I*x)

Out[3]: I*sinh(x)

 

In [4]: sinh(I*x)

Out[4]: I*sin(x)

 

In [5]: asinh(I)

Out[5]:

π*I

───

 2

 

In [6]: asinh(I*x)

Out[6]: I*asin(x)

 

In [15]: sin(x).series(x, 0, 10)

Out[15]:

     3     5     7       9

    x     x     x       x

x - ── + ─── - ──── + ────── + O(x**10)

    6    120   5040   362880

 

In [16]: sinh(x).series(x, 0, 10)

Out[16]:

     3     5     7       9

    x     x     x       x

x + ── + ─── + ──── + ────── + O(x**10)

    6    120   5040   362880

 

In [17]: asin(x).series(x, 0, 10)

Out[17]:

     3      5      7       9

    x    3*x    5*x    35*x

x + ── + ──── + ──── + ───── + O(x**10)

    6     40    112     1152

 

In [18]: asinh(x).series(x, 0, 10)

Out[18]:

     3      5      7       9

    x    3*x    5*x    35*x

x - ── + ──── - ──── + ───── + O(x**10)

    6     40    112     1152

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多