Sympy 库的使用

参考资料:

官方文档,天下第一: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}
View Code
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))
View Code
原文地址:https://www.cnblogs.com/zach0812/p/13326342.html