📜  SymPy 中的符号计算是什么?

📅  最后修改于: 2022-05-13 01:54:37.699000             🧑  作者: Mango

SymPy 中的符号计算是什么?

在本文中,我们将了解如何在Python中的 Sympy 中执行符号计算。

Sympy 中的符号计算用于通过使用数学符号将数学与计算机科学相结合来解决数学表达式。它操纵数学对象和表达式。 Sympy 精确地使用传统的数学符号而不是近似地计算代数表达式。

让我们看一个例子来区分 Sympy 数学运算和普通数学运算。

基本操作

使用数学模块,大约计算出 5 的平方根值。但是使用 Sympy 模块,5 的平方根没有被计算,因为它不是一个完美的平方。

Python3
# 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))


Python3
import math
import sympy
  
print('Using math')
print('Sqrt(24)=', math.sqrt(24))
  
print('\nUsing sympy')
print('Sqrt(24)=', sympy.sqrt(24))


Python3
from sympy import Rational
  
r_number = Rational(2, 5)
r_number


Python3
from sympy import sqrt
  
square_root_number = sqrt(2)
square_root_number


Python3
from sympy import *
  
P, Q, R = symbols("P Q R")
expression = 3*P+6*Q-R
  
expanded_exp = expand(P*expression)
expanded_exp


Python3
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)


Python3
from sympy import *
  
P = Symbol("P")
expression = (3*P**2+9)/3
# (3P^2+9)/3
  
simplified_exp = simplify(expression)
simplified_exp


Python3
from sympy import *
  
P = Symbol("P")
expression = (P**2+3*P-4)/3
# P^2+3P-4
  
solve(expression, P)


Python3
from sympy import *
  
P = Symbol("P")
expression = (P**2+3*P-4)
# P^2+3P-4
  
expression.subs(P, 3)


Python3
from sympy import *
  
x = Symbol('x')
  
print(trigsimp(cos(x)/sin(x)))
print(trigsimp(sin(x)**2+cos(x)**2))


Python3
from sympy import *
  
x = Symbol('x')
expression = x**10
diff(expression)


Python3
from sympy import *
  
x = Symbol('x')
e = Symbol('e')
  
expression = integrate(e**x, x)
expression


Python3
from sympy import *
  
x = Symbol('x')
  
print(limit(x**2, x, 5))
print(limit(x**3, x, oo))


Python3
from sympy import *
  
factorial(5)
#5x4x3x2x1


Python3
from sympy import *
  
x = Symbol('x')
sec(x).rewrite(sin(x))


Python3
from sympy import *
  
a = Symbol('a')
b = Symbol('b')
  
latex(a/b)


输出

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。

Python3

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 还使用有理、sqrt 和积分等不同的方法以乳胶形式表示数学表达式和符号。

有理数

使用 Rational() 方法表示有理数。

Python3

from sympy import Rational
  
r_number = Rational(2, 5)
r_number

输出

输出

说明:有理方法接受两个数,即有理数的分子和分母,并以有理形式表示为 a/b。

平方根表示

在这里,我们将表示平方根符号。

Python3

from sympy import sqrt
  
square_root_number = sqrt(2)
square_root_number

输出

输出

方程

在本节中,方程被扩展,也可以被分解,甚至方程可以分别使用扩展、因子和简化方法来简化。除了指定的操作外,我们还可以求解方程并在方程中进行替换。下面通过示例解释所有这些主题。

示例 1:扩展方程

这里首先创建一个表达式/等式,即通过声明符号 P、Q、R 来创建 3P+6Q-R,并且通过将 P 与表达式相乘来使用expand() 方法

Python3

from sympy import *
  
P, Q, R = symbols("P Q R")
expression = 3*P+6*Q-R
  
expanded_exp = expand(P*expression)
expanded_exp

输出

输出

示例 2:因式分解方程

这里使用 factor() 方法将扩展表达式 3P^2+6PQ-PR 分解为 P(3P+6Q-R)。

Python3

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} 使用 simple() 方法简化为 P 2 +3

Python3

from sympy import *
  
P = Symbol("P")
expression = (3*P**2+9)/3
# (3P^2+9)/3
  
simplified_exp = simplify(expression)
simplified_exp

输出

输出

示例 4:求解方程

solve() 方法返回包含方程根的整数列表。

Python3

from sympy import *
  
P = Symbol("P")
expression = (P**2+3*P-4)/3
# P^2+3P-4
  
solve(expression, P)

输出

[-4,1]

示例 5:替换

在这里,我们将使用 subs() 方法在等式中应用替换。

Python3

from sympy import *
  
P = Symbol("P")
expression = (P**2+3*P-4)
# P^2+3P-4
  
expression.subs(P, 3)

输出

14

三角学

众所周知,解决由三角恒等式组成的表达式很难解决。它需要记住许多公式以简化表达式。在 Sympy 中,有一个名为trigsimp()的方法可以简化三角表达式。让我们看一个实现 trigsimp() 方法的示例代码。

Python3

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方法的语法如下 -

Python3

from sympy import *
  
x = Symbol('x')
expression = x**10
diff(expression)

输出

10x9

示例 2:集成

在 Sympy 中,可以使用Integrate()方法对表达式进行积分。下面提到了 Integrate 方法的语法 -

Python3

from sympy import *
  
x = Symbol('x')
e = Symbol('e')
  
expression = integrate(e**x, x)
expression

输出

输出

说明: Integrate 方法对 e x表达式,即∫e x dx 进行积分,得到上述结果。

示例 3:限制

可以通过对表达式使用 limit() 方法将限制应用于表达式。

Python3

from sympy import *
  
x = Symbol('x')
  
print(limit(x**2, x, 5))
print(limit(x**3, x, oo))

输出

25
oo

特殊功能

Sympy 提供了各种特殊功能,例如阶乘和重写方法。下面通过一个示例来解释这些中的每一个

示例 1:数字的阶乘

Python3

from sympy import *
  
factorial(5)
#5x4x3x2x1

输出

120

解释:阶乘方法接受一个整数并返回一个数字的阶乘,即对于 5 它返回 5×4×3×2×1=120

示例 2:重写

如上所述,使用 rewrite() 方法,可以根据 sine(x) 重写 secant(x)。

Python3

from sympy import *
  
x = Symbol('x')
sec(x).rewrite(sin(x))

输出

输出

乳胶

Latex 方法提供了一种数学表达式的乳胶形式,可以用单词以一种很好的方式表示表达式。让我们来看一个 latex() 方法的例子。获取两个数字的分数的乳胶代码,让它成为 a/b。

Python3

from sympy import *
  
a = Symbol('a')
b = Symbol('b')
  
latex(a/b)

输出

'\\frac{a}{b}'

这个生成的乳胶代码可以在 word 中使用,并且可以转换为原始表达式。文章作者主要使用这些乳胶表达式以清晰的方式表示表达式以避免混淆。