python学习笔记

当作计算机使用

1、SymPy有三个内建的数子类型:实数,有理数和整数。

有理数类用两个整数来表示一个有理数。

>>>from sympy import *
>>>a = Rational(1,2)

>>>a
1/2

>>>a*2
1

>>>Rational(2)**50/Rational(10)**50
1/88817841970012523233890533447265625

我们也可以有一些特殊的常数,像e和pi,它们会被当作符号去对待。(1+pi不会求得值,反而它会保持为1+pi),例如

>>>pi**2
pi**2

>>>pi.evalf()//显示pi的值
3.14159265358979

>>>(pi+exp(1)).evalf()
5.85987448204884

正如你看到的,evalf()函数可以用求出表达式的浮点数。

有一个无穷大的类型,被成为oo

2、symbols函数

Symbols函数

对比与其他的计算机代数系统,在SymPy中你不得不明确的声明符号变量:

>>>from sympy import *
>>>x = Symbol('x')
>>>y = Symbol('y')

然后你可以这样使用:

>>>x+y+x-y
2*x

>>>(x+y)**2
(x + y)**2

>>>((x+y)**2).expand()
2*x*y + x**2 + y**2

可以使用subs(old, new) 函数把数字或者符号代入(substitute)表达式:

>>>((x+y)**2).subs(x, 1)
(1 + y)**2//把x当作1

>>>((x+y)**2).subs(x, y)
4*y**2//把x当作y

3、代数

局部的代数式展开,使用apart(expr, x):

In [1]: 1/( (x+2)*(x+1) )
Out[1]:
       1
───────────────
(2 + x)*(1 + x)

In [2]: apart(1/( (x+2)*(x+1) ), x)
Out[2]:
  1       1
───── - ─────
1 + x   2 + x

In [3]: (x+1)/(x-1)
Out[3]:
-(1 + x)
────────
 1 - x

In [4]: apart((x+1)/(x-1), x)
Out[4]:
      2
1 - ─────
    1 - x

代数式的合并(相当于展开的逆运算),使用together(expr, x):

In [7]: together(1/x + 1/y + 1/z)
Out[7]:
x*y + x*z + y*z
───────────────
     x*y*z

In [8]: together(apart((x+1)/(x-1), x), x)
Out[8]:
-1 - x
──────
1 - x

In [9]: together(apart(1/( (x+2)*(x+1) ), x), x)
Out[9]:
       1
───────────────
(2 + x)*(1 + x)

微积分

1、极限

在sympy中极限容易求出,它们遵循极限语法 limit(function, variable, point) ,所以计算x->0时f(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

2、微分

你可以对任意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)

3、级数展开

函数 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)

4、积分

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)

5、函数

三角函数

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

球谐函数:

In [1]: from sympy.abc import theta, phi

In [2]: Ylm(1, 0, theta, phi)
Out[2]:
     ————
╲╱ 3 *cos(θ)
────────────
        ——
  2*╲╱ π

In [3]: Ylm(1, 1, theta, phi)
Out[3]:
    ——            I*φ
-╲╱ 6   *│sin(θ)│*ℯ
────────────────────
           ——
      4*╲╱ π

In [4]: Ylm(2, 1, theta, phi)
Out[4]:
   ———                  I*φ
-╲╱ 30  *│sin(θ)│*cos(θ)*ℯ
────────────────────────────
                ——
          4*╲╱ π

阶乘和伽玛函数:

In [1]: x = Symbol("x")

In [2]: y = Symbol("y", integer=True)

In [3]: factorial(x)
Out[3]: Γ(1 + x)

In [4]: factorial(y)
Out[4]: y!

In [5]: factorial(x).series(x, 0, 3)
Out[5]:
                    2           2    2  2
                   x *EulerGamma    π *x
1 - x*EulerGamma + ────────────── + ───── + O(x**3)
                         2            12

Zeta函数:

In [18]: zeta(4, x)
Out[18]: ζ(4, x)

In [19]: zeta(4, 1)
Out[19]:
 4
π
──
90

In [20]: zeta(4, 2)
Out[20]:
      4
     π
-1 + ──
     90

In [21]: zeta(4, 3)
Out[21]:
        4
  17   π
- ── + ──
  16   90

多项式:

In [1]: chebyshevt(2, x)
Out[1]:
        2
-1 + 2*x

In [2]: chebyshevt(4, x)
Out[2]:
       2      4
1 - 8*x  + 8*x

In [3]: legendre(2, x)
Out[3]:
          2
       3*x
-1/2 + ────
        2

In [4]: legendre(8, x)
Out[4]:
           2         4         6         8
 35   315*x    3465*x    3003*x    6435*x
─── - ────── + ─────── - ─────── + ───────
128     32        64        32       128

In [5]: assoc_legendre(2, 1, x)
Out[5]:
             —————
          ╱     2
-3*x*╲╱  1 - x

In [6]: assoc_legendre(2, 2, x)
Out[6]:
       2
3 - 3*x

In [7]: hermite(3, x)
Out[7]:
           3
-12*x + 8*x

微分方程

在isymp:

In [4]: f(x).diff(x, x) + f(x) #注意在使用输入该命令之前,一定要声明f=Function(‘f’)
Out[4]:
2
d
─────(f(x)) + f(x)
dx dx

In [5]: dsolve(f(x).diff(x, x) + f(x), f(x))
Out[5]: C₁*sin(x) + C₂*cos(x)
代数方程ympy中:

In [7]: solve(x**4 - 1, x)
Out[7]: [i, 1, -1, -i]

In [8]: solve([x + 5*y - 2, -3*x + 6*y - 15], [x, y])
Out[8]: {y: 1, x: -3}

线性代数

矩阵
矩阵由矩阵类创立:

>>>from sympy import Matrix
>>>Matrix([[1,0], [0,1]])
[1, 0]
[0, 1]

不只是数值矩阵,亦可为代数矩阵,即矩阵中存在符号:

>>>x = Symbol('x')
>>>y = Symbol('y')
>>>A = Matrix([[1,x], [y,1]])
>>>A
[1, x]
[y, 1]

>>>A**2
[1 + x*y,     2*x]
[    2*y, 1 + x*y]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值