3.1 基本操作

3.1.1 替换

使用数学表达式最常见的一种方法是替换。替换将表达式中某物的所有实例替换为另一物。这是使用symbols对象的subs方法完成的。

普通替换

[]:expr=cos(x)+sin(pi/2)

expr.subs(x, pi/2)

循环替换

[]:expr=1/(1+x)

for i in range(5): expr=expr.subs(x, 1/(1+x))

expr

3.1.2 字符串转为SymPy表达式

使用simpify函数,可以将字符串类型的表达式转为SymPy表达式 例:将字符串类型表达式"x**2+2*x+1"转为SymPy表达式:

[]:str_expr=’x\*\*2+2\*x+1’

expr=sympify(str_expr)

expr

3.1.3 表达式求值

使用exalf(precision)可以对数值表达式求值,precision为小数保留位数,precision默认为15。

[]:expr=sqrt(13)

expr.evalf(13)

3.1.4 使用NumPy和SciPy计算

尽管subs和evalf可以很好的帮助我们进行计算,但是如果我们希望同时代入大量参数到一个公式进行计算,那么这时候你可能就忍受不了SymPy的运行效率了。

另外SymPy在计算精度上不如NumPy和SciPy,如果对机器精度有较高的要求的话,应该使用NumPy或SciPy这样的库。

将一个SymPy符号表达式转换成一个数值计算表达式最简单的方法是使用lambdify函数。lambdify的作用类似于lambda函数,只不过它将SymPy名称转换为特定数值库的名称,通常是NumPy。(?)

lambdify()函数用于转换表达式进行数值计算时需要指定三个参数,分别是变量,表达式和数值库。

[]:import numpy

arr=numpy.arange(10)

expr=sin(x)+cos(x)

f=lambdify(x, expr, 'numpy')

type(f)

[]:function

[]:f(arr)

[]:array([ 1. , 1.38177329, 0.49315059, -0.84887249, -1.41044612, -0.67526209, 0.68075479, 1.41088885, 0.84385821, -0.49901178])

Last updated