参考资料:
官方文档,天下第一:https://docs.sympy.org/latest/index.html
知识点:
What is Sym?
符号计算以符号的方式处理数学对象的计算。这意味着数学对象被精确地表示,而不是近似地表示。例如,1/3 如果数值表示,那么它就是0.3333333.... 这是不精确的,如果符号表示就是1/3 ,它是精确的。
Why Sym?
首先,SymPy是完全免费的。它是开源的,并且是在自由的BSD许可下授权的,所以你可以修改源代码,如果你想的话甚至可以出售它。这与流行的商业系统如Maple或Mathematica形成鲜明对比,后者的许可证费用高达数百美元。
其次,SymPy使用Python。大多数计算机代数系统都发明了自己的语言。SymPy 则不是。SymPy完全是用Python编写的,完全是用Python执行的。这意味着,如果您已经了解Python,那么开始使用SymPy会容易得多,因为您已经知道语法(如果您不了解Python,则非常容易学习)。我们已经知道Python是一种设计良好、经过战斗考验的语言。SymPy开发人员对自己编写数学软件的能力充满信心,但编程语言设计则完全不同。通过重用现有的语言,我们能够专注于那些重要的事情:数学。
小试牛刀
from sympy import * x,t = symbols('x t') init_printing(use_unicode=True) ret = diff(sin(x) * exp(x), x) # diff() 函数是求导函数 print(ret) # exp(x)*sin(x) + exp(x)*cos(x) ret2 = integrate(exp(x) * sin(x) + exp(x) * cos(x), x) # integrate() 计算积分 print(ret2) # sin(x)*exp(x) ret3 = integrate(sin(x ** 2), (x, -oo, oo)) # 计算从-oo 到 oo 的积分 print(ret3) # sqrt(2)*sqrt(pi)/2 ret4 = limit((sin(x) / x), x, 0) # 计算x 趋近于0 的极限值 print(ret4) # 1 ret5 = solve(x ** 2 - 2, x) # 求解方程 x**2 -2 =0 x 的值 print(ret5) # [-sqrt(2), sqrt(2)] # Solve the differential equation y‘’−y = e^t. 求解微分方程 y(t) y = Function('y') ret6 = dsolve(Eq(y(t).diff(t,t) - y(t),exp(t)),y(t)) print(ret6) # Eq(y(t), C2*exp(-t) + (C1 + t/2)*exp(t)) # 求矩阵的特征值 ret7 = Matrix([[1,2],[2,2]]).eigenvals() print(ret7) # {3/2 - sqrt(17)/2: 1, 3/2 + sqrt(17)/2: 1} # 使用Latex 格式打印数学式子 ret8 = latex(sqrt(2)*sqrt(pi)/2) print(ret8) # frac{sqrt{2} sqrt{pi}}{2}
from sympy import * x, y, z = symbols("x y z") # 判断两个表达式是否相同 a = (x + 1) ** 2 b = x ** 2 + 2 * x + 1 print(simplify(a - b) == 0) # .equals() 是通过在随机取点上的数值得到是否相等 print(a.equals(b)) # sympy 中幂用的是 ** 因为Python中^ 表示的是异或 # sympy 中分数表达要用 Rational(),因为Python中的/ 表示的是除法 print(x ** 2) print(x + Rational(1, 2))