SymPy基礎應用
SymPy基礎應用¶
Rational值¶
SymPy 具有用於處理有理數的Rational。 有理數是可以表示為兩個整數(分子 p 和非零分母 q)的商或分數 p / q 的任何數字。
from sympy import Rational
r = Rational(1/10)
val = r * 3
print(val.evalf())
val2 = 1/10 * 3
print(val2)
print(type(val))
print(type(val2))
print(val.evalf())
print(val2)
from sympy import pprint, Symbol, exp, sqrt
from sympy import init_printing
init_printing(use_unicode=True) # 對於某些字符,我們需要啟用 unicode 支持
x = Symbol('x')
a = sqrt(2)
pprint(a)
print(a)
print("------------------------")
c = (exp(x) ** 2)/2
pprint(c)
print(c)
平方根¶
平方根是一個數字,乘以它會產生指定的數量。
from sympy import sqrt, pprint, Mul
x = sqrt(2)
y = sqrt(2)
pprint(Mul(x, y, evaluate=False)) # 使用evaluate屬性推遲對乘法表達式的求值。
print('equals to ')
print(x * y)
Mul(x,y)
SymPy 符號¶
符號計算適用於符號,以后可以對其進行求值。 使用符號之前,必須在 SymPy 中定義符號。
from sympy import Symbol, symbols
from sympy.abc import x, y
expr = 2*x + 5*y
print(expr)
a = Symbol('a')
b = Symbol('b')
expr2 = a*b + a - b
print(expr2)
i, j = symbols('i j')
expr3 = 2*i*j + i*j
print(expr3)
from sympy.abc import x, y
可以從sympy.abc模塊導入符號。 它將所有拉丁字母和希臘字母導出為符號,因此我們可以方便地使用它們。
SymPy 規范表達形式¶
SymPy 會自動將表達式轉換為規范形式。 SymPy 僅執行廉價操作; 因此,表達式可能無法求值為最簡單的形式。
from sympy.abc import a, b
expr = b*a + -4*a + b + a*b + 4*a + (a + b)*3
print(expr)
SymPy 擴展代數表達式¶
使用expand()
,我們可以擴展代數表達式; 即該方法嘗試消除冪和乘法。
from sympy import expand, pprint
from sympy.abc import x
expr = (x + 1) ** 2
pprint(expr)
print('-----------------------')
print('-----------------------')
expr = expand(expr)
pprint(expr)
SymPy 簡化表達式¶
可以使用simplify()將表達式更改為更簡單的形式。
from sympy import sin, cos, simplify, pprint
from sympy.abc import x,y
expr = sin(x+y) / (sin(y)*cos(x))
pprint(expr)
print('-----------------------')
expr = simplify(expr)
pprint(expr)
SymPy 比較表達式¶
SymPy 表達式與equals()
而不是==運算符進行比較。
from sympy import pprint, Symbol, sin, cos
x = Symbol('x')
a = cos(x)**2 - sin(x)**2
b = cos(2*x)
print(a.equals(b)) # 在應用該方法之前,SymPy 嘗試簡化表達式。
# we cannot use == operator
print(a == b)
SymPy 求值表達式¶
可以通過替換符號來求值表達式。
from sympy import pi
print(pi.evalf(10)) # 保留十位有效數字
# 通過用數字替換a和b符號來求值表達式
from sympy.abc import a, b
from sympy import pprint
expr = b*a + -4*a + b + a*b + 4*a + (a + b)*3
print(expr.subs([(a, 3), (b, 2)]))
SymPy 求解方程¶
用solve()
或solveset()
求解方程。
from sympy import Symbol, solve
x = Symbol('x')
sol = solve(x**2 - x, x)
print(sol)
solve()
的第一個參數是公式。 該公式以適合 SymPy 的特定形式編寫; 即x**2 - x
代替x**2 = x
。 第二個參數是我們需要解決的符號。
或者,我們可以將Eq用於公式。
from sympy import pprint, Symbol, Eq, solve
x = Symbol('x')
eq1 = Eq(x + 1, 4)
pprint(eq1)
sol = solve(eq1, x)
print(sol)
from sympy.solvers import solveset
from sympy import Symbol, Interval, pprint
x = Symbol('x')
sol = solveset(x**2 - 1, x, Interval(0, 50))
print(sol)
使用solveset()
,我們找到了給定間隔的解決方案。
SymPy 序列¶
序列是其中允許重復的對象的枚舉集合。 序列可以是有限的或無限的。 元素的數量稱為序列的長度。 與集合不同,同一元素可以在序列中的不同位置出現多次。 元素的順序很重要。
from sympy import summation, sequence, pprint
from sympy.abc import x
s = sequence(x, (x, 1, 10))
print(s)
pprint(s)
print(list(s))
print(s.length)
print(summation(s.formula, (x, s.start, s.stop)))
# print(sum(list(s)))
SymPy 極限¶
極限是函數(或序列)“接近”作為輸入(或索引)“接近”某個值的值。
from sympy import sin, limit, oo
from sympy.abc import x,y
l1 = limit(1/x, x, oo)
print(l1)
l2 = limit(exp(x)/(y), x, 1)
print(l2)
from sympy import Matrix, pprint
M = Matrix([[1, 2], [3, 4], [0, 3]])
print(M)
pprint(M)
N = Matrix([2, 2])
print("---------------------------")
print("M * N")
print("---------------------------")
pprint(M*N)
SymPy 繪圖¶
SymPy 包含用於繪圖的模塊。 它基於 Matplotlib 構建。
import sympy
from sympy.abc import x
from sympy.plotting import plot
plot(sin(x))
一元函數的導函數¶
from sympy import *
x = symbols('x')
expr = sin(x) * exp(x)
pprint(diff(expr, x))
求不定積分¶
from sympy import *
x = symbols('x')
expr = exp(x) * sin(x) + exp(x) * cos(x)
pprint(integrate(expr, x))
求定積分¶
from sympy import *
x = symbols('x')
expr = exp(x) * sin(x) + exp(x) * cos(x)
pprint(integrate(expr, x, (x,-oo,oo)))
求微分方程的解¶
from sympy import *
y = Function('y')
t = Symbol('t')
sol = dsolve(Eq(y(t).diff(t, t) - y(t), exp(t)), y(t))
print(sol)
打印latex公式¶
from sympy import *
x = symbols('x')
expr = cos(x)**2
latex(Integral(expr, (x, 0, pi)))
latex(expr)
pprint(Integral(expr, (x, 0, pi)))