tft每日頭條

 > 科技

 > python基本算術運算操作

python基本算術運算操作

科技 更新时间:2024-12-05 08:30:48
什麼是 SymPy?

SymPy 是一款用于符号運算的 Python 庫。它旨在成為 Mathematica 或 Maple 等系統的替代品,同時保持代碼盡可能簡單且易于擴展。SymPy 完全用 Python 編寫,不需要任何外部庫。

python基本算術運算操作(用Python做科學計算工具篇)1

目錄
  • sympy第一步

将symy用作計算器

符号

  • 代數操作

展開

化簡

  • 微積分

極限

微分

級數展開

積分

  • 方程求解
  • 線性代數

矩陣

微分方程


3.2.1. SymPy 的第一步3.2.1.1. 使用 SymPy 作為計算器

SymPy 定義了三種數值類型實數,有理數和整數。

有理數類将有理數表示為一對兩個整數:分子和分母,因此 表示 1/ 2、5/2 等:Rational(1, 2)Rational(5, 2)

>>>

>>> import sympy as sym >>> a = sym.Rational(1, 2) >>> a 1/2 >>> a*2 1

SymPy 在後台使用 mpmath,這使得使用任意精度算術執行計算成為可能。這樣,一些特殊的常數,如e, pi, 無窮大(Infinity) 被視為符号并且可以以任意精度計算:

>>>

>>> sym.pi**2 pi**2 >>> sym.pi.evalf() 3.14159265358979 >>> (sym.pi sym.exp(1)).evalf() 5.85987448204884

evalf将表達式計算為浮點數。

還有一個表示數學無窮大的類, oo:

>>>

>>> sym.oo > 99999 True >>> sym.oo 1 oo

3.2.1.2. 符号

與其他計算機代數系統相比,在 SymPy 中你必須顯式聲明符号變量:

>>>

>>> x = sym.Symbol('x') >>> y = sym.Symbol('y')

然後可以操作它們:

>>>

>>> x y x - y 2*x >>> (x y) ** 2 (x y)**2

現在可以使用一些 python 運算符來操作符号: 、(算術)、&、| , ~ , >>, << (布爾值)。-`, ``***

print

Sympy 允許控制輸出的顯示。從這裡我們使用以下設置進行print:

>>>

>>> sym.init_printing(use_unicode=False, wrap_line=True)

3.2.2.代數運算

SymPy 能夠執行強大的代數運算。我們将研究一些最常用的:展開和化簡。

3.2.2.1.展開

使用它來展開代數表達式。它将嘗試消除幂和乘法:

>>>

>>> sym.expand((x y) ** 3) 3 2 2 3 x 3*x *y 3*x*y y >>> 3 * x * y ** 2 3 * y * x ** 2 x ** 3 y ** 3 3 2 2 3 x 3*x *y 3*x*y y

可以在關鍵字的表單中提供更多選項:

>>>

>>> sym.expand(x y, complex=True) re(x) re(y) I*im(x) I*im(y) >>> sym.I * sym.im(x) sym.I * sym.im(y) sym.re(x) sym.re(y) re(x) re(y) I*im(x) I*im(y) >>> sym.expand(sym.cos(x y), trig=True) -sin(x)*sin(y) cos(x)*cos(y) >>> sym.cos(x) * sym.cos(y) - sym.sin(x) * sym.sin(y) -sin(x)*sin(y) cos(x)*cos(y)

3.2.2.2. 化簡

如果您想将表達式轉換為更簡單的形式,請使用簡化:

>>>

>>> sym.simplify((x x * y) / x) y 1

化簡是一個有點模糊的術語,并且存在更精确的化簡替代方案:(powsimp指數的簡化),( trigsimp對于三角表達式) ,logcombine,radsimp

3.2.3. 微積分3.2.3.1.極限

限制在 SymPy 中很容易使用,語法limit(Function, variable, point),比如要計算f(x)在x趨于0的極限,使用limit(f, x, 0)

>>>

>>> sym.limit(sym.sin(x) / x, x, 0) 1

還可以計算無窮大的極限:

>>>

>>> sym.limit(x, x, sym.oo) oo >>> sym.limit(1 / x, x, sym.oo) 0 >>> sym.limit(x ** x, x, 0) 1

3.2.3.2.微分

使用 diff(func, var) 計算任何 SymPy 的表達式。例子:

>>>

>>> sym.diff(sym.sin(x), x) cos(x) >>> sym.diff(sym.sin(2 * x), x) 2*cos(2*x) >>> sym.diff(sym.tan(x), x) 2 tan (x) 1

通過以下方式檢查它是否正确:

>>>

>>> sym.limit((sym.tan(x y) - sym.tan(x)) / y, y, 0) 2 tan (x) 1

可以使用以下方法計算更高階的導數:diff(func, var, n)

>>>

>>> sym.diff(sym.sin(2 * x), x, 1) 2*cos(2*x) >>> sym.diff(sym.sin(2 * x), x, 2) -4*sin(2*x) >>> sym.diff(sym.sin(2 * x), x, 3) -8*cos(2*x)

3.2.3.3.級數展開

SymPy 還知道如何計算一個表達式的泰勒級數。使用:series(expr, var)

>>>

>>> sym.series(sym.cos(x), x) 2 4 x x / 6\ 1 - -- -- O\x / 2 24 >>> sym.series(1/sym.cos(x), x) 2 4 x 5*x / 6\ 1 -- ---- O\x / 2 24

3.2.3.4.積分

SymPy 支持通過integrate()工具對先驗基本函數和特殊函數進行不定和定積分,它使用強大的擴展 Risch-Norman 算法和一些啟發式和模式匹配。

>>>

>>> sym.integrate(6 * x ** 5, x) 6 x >>> sym.integrate(sym.sin(x), x) -cos(x) >>> sym.integrate(sym.log(x), x) x*log(x) - x >>> sym.integrate(2 * x sym.sinh(x), x) 2 x cosh(x)

特殊函數也很容易處理:

>>>

>>> sym.integrate(sym.exp(-x ** 2) * sym.erf(x), x) ____ 2 \/ pi *erf (x) -------------- 4

可以計算定積分:

>>>

>>> sym.integrate(x**3, (x, -1, 1)) 0 >>> sym.integrate(sym.sin(x), (x, 0, sym.pi / 2)) 1 >>> sym.integrate(sym.cos(x), (x, -sym.pi / 2, sym.pi / 2)) 2

也支持不定積分:

>>>

>>> sym.integrate(sym.exp(-x), (x, 0, sym.oo)) 1 >>> sym.integrate(sym.exp(-x ** 2), (x, -sym.oo, sym.oo)) ____ \/ pi

3.2.4. 方程求解

SymPy 能夠解決代數方程,在一個和多個變量中使用solveset()

>>>

>>> sym.solveset(x ** 4 - 1, x) {-1, 1, -I, I}

它将一個應該等于 0 的表達式作為第一個參數。它還(有限)支持超越方程:

>>>

>>> sym.solveset(sym.exp(x) 1, x) {I*(2*n*pi pi) | n in Integers}

線性方程組

Sympy 能夠求解大部分多項式方程,并且還能夠求解關于多個變量的多個方程,将元組作為第二個參數。使用以下solve()命令:

>>>

>>> solution = sym.solve((x 5 * y - 2, -3 * x 6 * y - 15), (x, y)) >>> solution[x], solution[y]

(-3, 1)

多項式方程的另一種選擇是 factor。factor返回分解為不可約項的多項式,并且能夠計算各個域的分解:

>>>

>>> f = x ** 4 - 3 * x ** 2 1 >>> sym.factor(f) / 2 \ / 2 \ \x - x - 1/*\x x - 1/ >>> sym.factor(f, modulus=5) 2 2 (x - 2) *(x 2)

SymPy 還能夠求解布爾方程,即确定某個布爾表達式是否可滿足。為此,我們使用可滿足的函數:

>>>

>>> sym.satisfiable(x & y) {x: True, y: True}

這告訴我們,無論何時都是 True并且兩者都是 True。如果一個表達式不能為真,即沒有任何參數值可以使表達式為真,它将返回 False:(x & y)xy

>>>

>>> sym.satisfiable(x & ~x) False

3.2.5. 線性代數3.2.5.1. 矩陣

矩陣是作為 Matrix 類的實例創建的:

>>>

>>> sym.Matrix([[1, 0], [0, 1]]) [1 0] [ ] [0 1]

與 NumPy 數組不同,還可以将 Symbols 放入其中:

>>>

>>> x, y = sym.symbols('x, y') >>> A = sym.Matrix([[1, x], [y, 1]]) >>> A [1 x] [ ] [y 1] >>> A**2 [x*y 1 2*x ] [ ] [ 2*y x*y 1]

3.2.5.2. 微分方程

SymPy 能夠求解(一些)普通微分問題。要求解微分方程,請使用 dsolve。首先,通過将 cls=Function 傳遞給 symbols 函數來創建一個未定義的函數:

>>>

>>> f, g = sym.symbols('f g', cls=sym.Function)

f 和 g 現在是未定義的函數。我們可以調用 f(x),它将代表一個未知函數:

>>>

>>> f(x) f(x) >>> f(x).diff(x, x) f(x) 2 d f(x) ---(f(x)) 2 dx >>> sym.dsolve(f(x).diff(x, x) f(x), f(x)) f(x) = C1*sin(x) C2*cos(x)

可以為此函數提供關鍵字參數,以幫助找到可能的最佳解析系統。例如,如果你知道它是一個可分離方程,你可以使用關鍵字hint='separable' 強制 dsolve 将它解析為一個可分離方程:

>>>

>>> sym.dsolve(sym.sin(x) * sym.cos(f(x)) sym.cos(x) * sym.sin(f(x)) * f(x).diff(x), f(x), hint='separable') / C1 \ / C1 \ [f(x) = - acos|------| 2*pi, f(x) = acos|------|] \cos(x)/ \cos(x)/

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved