什么是SymPy中的符号计算
在这篇文章中,我们将看到如何在Python中用Sympy进行符号计算。
Sympy中的符号计算是通过使用数学符号将数学与计算机科学相结合来解决数学表达问题。它可以操作数学对象和表达式。Sympy使用传统的数学符号精确地评估代数表达式,但不是近似地评估。
让我们看一个例子来区分辛普森数学运算和普通数学运算。
Basic Operations
使用数学模块可以大致计算出5的平方根值。但是使用Sympy模块,5的平方根却没有被评估出来,因为它不是一个完全的平方。
# import necessary packages
import math
import sympy
print('Using math')
print('Sqrt(25)=', math.sqrt(25))
print('Sqrt(5)=', math.sqrt(5))
print('\nUsing sympy')
print('Sqrt(25)=', sympy.sqrt(25))
print('Sqrt(5)=', sympy.sqrt(5))
输出
Using math
Sqrt(25)= 5.0
Sqrt(5)= 2.23606797749979
Using sympy
Sqrt(25)= 5
Sqrt(5)= sqrt(5)
用数学模块计算24的平方根,sympy计算完全平方的平方根,24可以写成4×6,4可以从平方根中取出2,所以√(24)=2√6。
import math
import sympy
print('Using math')
print('Sqrt(24)=', math.sqrt(24))
print('\nUsing sympy')
print('Sqrt(24)=', sympy.sqrt(24))
输出
Using math
Sqrt(24)= 4.898979485566356
Using sympy
Sqrt(24)= 2*sqrt(6)
Sympy还使用不同的方法,如有理数、平方数和积分等,以Latex形式表示数学表达式和符号。
Rational Number
使用Rational()方法来表示有理数。
from sympy import Rational
r_number = Rational(2, 5)
r_number
输出
输出
解释:有理数法接受两个数字,这两个数字是有理数的分子和分母,以有理数的形式表示为a/b。
平方根表示法
这里我们将表示平方根的符号。
from sympy import sqrt
square_root_number = sqrt(2)
square_root_number
输出
输出
Equations
在这一节中,方程被展开,也可以被因数化,甚至可以分别使用展开、因数和简化的方法来简化方程。除了指定的操作外,我们还可以解方程和在方程中进行替换。所有这些主题将在下文中用例子加以解释。
例1:扩展方程
这里首先创建了一个表达式/方程,即通过声明符号P、Q、R来创建3P+6Q-R,然后使用expand()方法将P与表达式相乘。
语法 expand(expression)
**其中***表达式是一个数学方程
from sympy import *
P, Q, R = symbols("P Q R")
expression = 3*P+6*Q-R
expanded_exp = expand(P*expression)
expanded_exp
输出
例2:将方程进行因式分解
在这里,扩大的表达式3P^2+6PQ-PR用factor()方法被分解为P(3P+6Q-R)。
语法: factor(expanded_expression)
其中 expanded_expression是我们需要分解的表达式。
from sympy import *
P, Q, R = symbols("P Q R")
expression = 3*P+6*Q-R
# 3P+6Q-R
expanded_exp = expand(P*expression)
# 3P^2+6PQ-PR
factor(expanded_exp)
输出
输出
例3:简化方程
表达式\frac{3P 2 +9}{3}用 simplify()方法简化为P 2 +3
语法:simplify(expression)
其中表达式是任何数学表达式/方程。
from sympy import *
P = Symbol("P")
expression = (3*P**2+9)/3
# (3P^2+9)/3
simplified_exp = simplify(expression)
simplified_exp
输出
输出
例4:解方程
solve()方法返回包含方程根的整数列表。
语法: solve(equation, symbol)
其中方程代表要解决的表达式/方程。
符号是方程中的变量 。
from sympy import *
P = Symbol("P")
expression = (P**2+3*P-4)/3
# P^2+3P-4
solve(expression, P)
输出
[-4,1]
例5:替代
这里我们将用subs()方法在方程中进行替换。
语法: expression.subs(symbol, constant)
其中,表达式是我们要应用替换的方程。
- 符号是方程中的变量。
- 常数是替代符号的值。
from sympy import *
P = Symbol("P")
expression = (P**2+3*P-4)
# P^2+3P-4
expression.subs(P, 3)
输出
14
Trigonometry
大家都知道,解决由三角函数相同点组成的表达式是很难的。它需要记住许多公式来简化表达式。在Sympy中,有一个叫做trigsimp()的方法可以简化三角函数的表达式。让我们来看看实现trigsimp()方法的示例代码。
from sympy import *
x = Symbol('x')
print(trigsimp(cos(x)/sin(x)))
print(trigsimp(sin(x)**2+cos(x)**2))
输出
1/tan(x)
1
衍生、整合和极限
在Sympy中,导数、积分和极限是用简单的方法应用于表达式。下面将对每一个主题进行解释,并附上一段示例代码。
例1:衍生品
使用diff()方法计算一个表达式的导数。diff方法的语法如下所示
语法 diff(expression)
这里表达式持有一个方程/表达式,我们对它进行导数。
from sympy import *
x = Symbol('x')
expression = x**10
diff(expression)
输出
10x9
示例2:整合
在Sympy中,可以使用Integrate()方法对表达式进行整合。Integrate方法的语法如下所示
from sympy import *
x = Symbol('x')
e = Symbol('e')
expression = integrate(e**x, x)
expression
输出
输出
解释:积分法对e x表达式进行积分,即∫e x dx,得到上述结果。
示例3:限制
可以通过在表达式上使用limit()方法来对表达式进行限制。
语法: limit(expression, symbol, value)
参数
- expression–数学表达式/方程
- symbol- 我们需要在哪个符号的基础上进行导数和替换。
- value- 替代符号的值
from sympy import *
x = Symbol('x')
print(limit(x**2, x, 5))
print(limit(x**3, x, oo))
输出
25
oo
Special Functions
Sympy提供了各种特殊的函数,如阶乘和重写方法。下面用一个例子来解释这些功能
例1:一个数字的阶乘
from sympy import *
factorial(5)
#5x4x3x2x1
输出
120
解释:阶乘方法接受一个整数并返回一个数字的阶乘,例如,对于5,它返回5×4×3×2×1=120。
例2:重写
使用rewrite()方法,正割(x)可以用上面提到的正弦(x)来重写。
from sympy import *
x = Symbol('x')
sec(x).rewrite(sin(x))
输出
输出
Latex
Latex方法提供了一个数学表达式的latex形式,可以在文字中以一种漂亮的方式表示表达式。让我们进入latex()方法的一个例子。获取两个数字的分数的latex代码,让它成为a/b。
from sympy import *
a = Symbol('a')
b = Symbol('b')
latex(a/b)
输出
'\\frac{a}{b}'
这个结果的latex代码可以在word中使用,并可以转换为原始表达式。这些latex表达式大多被文章作者用来以清晰的方式表示表达式,以避免混淆。