1.什么是符号计算?
符号计算象征性地处理数学对象的计算。这意味着数学对象是准确而非近似地表示的,带有未评估变量的数学表达式以符号形式保留。
例,假设我们想使用内置的Python函数来计算平方根
code:
import math
print(math.sqrt(9))
结果
3.0
9是一个完美的平方,所以我们得到了确切的答案3。但是,假设我们计算出的数字的平方根不是一个完美的平方
code
print(math.sqrt(8))
结果
2.82842712475
2.82842712475不是8的确切平方根,只是一个近似结果,假设我们确切一点
code
import sympy
print(sympy.sqrt(8))
Out:
2*sqrt(2)
在这里我们开始看到符号计算的真正功能,符号化的符号结果可以简化。
2.更有趣的例子
让我们定义一个符号表达式,代表数学表达式 。
code:
from sympy import symbols
x, y = symbols('x y')
expr = x + 2*y
expr
Out[2]:
x + 2*y
注意,我们写 就像 和 是普通的Python变量一样。 但是在这种情况下,表达式不求值,而是保持为 。 现在让我们做一下:
expr + 1
Out[3]:
x + 2*y + 1
expr - x
Out[4]:
2*y
当我们输入 时,我们没有得到 ,而只有 。 和 相互抵消。在SymPy中并非总是如此。
x*expr
Out[5]:
x*(x + 2*y)
在这里,我们可能期望
转换为
,但大多数简化都不是自动执行的。
在SymPy中,有些功能可以从一种形式转换为另一种形式
from sympy import expand, factor
expanded_expr = expand(x*expr)
expanded_expr
Out[6]:
x**2 + 2*x*y
factor(expanded_expr)
Out[7]:
x*(x + 2*y)
3.符号计算的魅力
诸如SymPy之类的符号计算系统的真正能力是能够以符号方式进行各种计算。SymPy可以简化表达式,求导,积分和极值,求解方程式,使用矩阵等等,都可以用符号来完成。
from sympy import *
x, t, z, nu = symbols('x t z nu')
init_printing(use_unicode=True)# 这将使所有其他示例使用unicode字符进行打印
例1:对 求导
print(diff(sin(x)*exp(x), x))
exp(x)*sin(x) + exp(x)*cos(x)
例2:计算
print(integrate(exp(x)*sin(x) + exp(x)*cos(x), x))
exp(x)*sin(x)
例3:计算
print(integrate(sin(x**2), (x, -oo, oo)))
sqrt(2)*sqrt(pi)/2