0%

Python学习笔记-数学运算

因为写工程/写作业时频繁要(偷懒地)使用计算机辅助计算,之前一直用的是Mathematica,但是语法和界面一直不尽如人意。遂开始研究IPython+Numpy的组合,同时发现了超强的符号运算库Sympy.

温馨提醒:Ctrl+L可清空屏幕。

Numpy/Scipy

1
2
np.linalg
scipy.linalg.polar(np.array) # 极分解

Sympy

一些前置概念:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from sympy import *
x, y, z, t = symbols('x y z t')
k, m, n = symbols('k m n', integer=True)
f, g, h = symbols('f g h', cls=Function)
init_printing()

Ms = MatrixSymbol('Ms', 3, 3) # 创建3×3的矩阵Symbol, not necessary

f.subs(x, VALUE) # 代入
f.subs({x: }) # 代入多个变量
f.subs({Ms: }).doit() # 矩阵运算是惰性的,需要手动
POLY(VALUE) # 计算多项式在VALUE处的取值
EXPR.evalf(n) # 输出n位小数

f.expand()
expand(f) # 展开
f.simplify()
simplify(f) # 化简
f.factor()
factor(f) # 因式分解
f.as_expr() # 将f作为表达式

solve(x-y+1, (x,y)) # 解方程组 x-y+1=0
limit(x**x,x,0) # 求极限
limit(1/x,x,oo,dir='+') # 右极限
Derivative(f,x,x,y,z)
f.diff(f,(x,2),y,z) # 计算导数
integrate() # 求积分
dsolve() # 解微分方程

gcdex() # 扩展欧几里得

A.exp()

A.jordan_form()
A.is_positive_semidefinite()
A.QRdecomposition()
A.LUdecomposition()
A.LUdecomposition_Simple() # 不满秩情况
A.LDLdecomposition(hermitian=True) # Return L,D; A = LDL^H
A.cholesky(hermitian=True)
A.bidiagonal_decomposition() # Return U,B,V^H; A = UBV^H
A.singular_value_decomposition()

A.eigenvals()
A.eigenvects()
A.left_eigenvects()
A.singular_values()

IPython

1
%hist  # 输出历史