Sympy简单教程(6)
SymPy - 函數類
Sympy 包中有函數?Function 類, 定義在模塊?sympy.core.function 之中. 它是所有的應用數學函數的基類, 另外也作為抽象(未定義的)函數的構造函數.
如下的函數類型是從?Function 類繼承而來??
- 復數函數
- 三角函數
- 整數相關函數
- 組合函數
- 其它不常用函數
復(數)函數
此類函數定義在模塊?sympy.functions.elementary.complexes?之中.
實部 re
這個函數返回一個表達式的實部??
>>> from sympy import * >>> re(5+3*I)上述代碼給出結果 ?
5
>>> re(I)上述代碼給出結果 ?
0
虛部 Im
這個函數給出表達式的虛部 ?
>>> im(5+3*I)上述代碼給出結果??
3
>>> im(I)上述代碼給出結果??
1
符號 sign
這個函數返回一個表達式的復數符號.
對于實數表達式, 符號將會是??
- 1 如果表達式是正的
- 0 如果表達式等于零
- -1 如果表達式是負的
如果表達式是純虛數將返回結果如下 ?
- I 如果 im(expression) 是正的
- -I 如果 im(expression) 是負的
上述代碼得到結果??
(1, -1, 0)
>>> sign (-3*I), sign(I*2)上述代碼給出結果??
(-I, I)
絕對值(模)Abs
這個函數返回復數的絕對值或者模. 也就是在復平面上從點 (a,b) 到原點 (0,0) 的距離. 這個函數是內建函數 abs() 的拓展以接收符號值.
>>> Abs(2+3*I)上述代碼給出結果??
共軛復數conjugate
這個函數返回復數的共軛. 為尋求共軛復數只需要把虛部改變符合即可.
>>> conjugate(4+7*I)執行上述代碼得到??
4 - 7i
三角函數
SymPy 定義了所有的三角函數例如?- sin cos, tan 等, 另外還有它們的反函數,例如?asin, acos, atan 等. 這些函數計算給定的各種角無論是弧度或者角度.
>>> sin(pi/2), cos(pi/4), tan(pi/6)執行上述代碼得到??
(1, sqrt(2)/2, sqrt(3)/3)
>>> asin(1), acos(sqrt(2)/2), atan(sqrt(3)/3)執行上述代碼得到??
(pi/2, pi/4, pi/6)
整數上的函數
這一類函數是針對整數進行的各種操作.
上取整ceiling
這個函數是一個一元函數返回不小于給定參數的最小整數. 在復數情形下, 則是分別對實部和虛部進行上取整.
>>> ceiling(pi), ceiling(Rational(20,3)), ceiling(2.6+3.3*I)執行上述代碼得到??
(4, 7, 3 + 4*I)
下取整floor
這個函數返回不超過參數的最大整數. 在復數情形下, 這個函數對于實部和虛部分別下取整.
>>> floor(pi), floor(Rational(100,6)), floor(6.3-5.9*I)執行上述代碼得到??
(3, 16, 6 - 6*I)
分數frac
這個函數返回 x 的分數部分.
>>> frac(3.99), frac(Rational(10,3)), frac(10)執行上述代碼得到??
(0.990000000000000, 1/3, 0)
組合函數
組合數學 Combinatorics 是數學的一個領域, 關注于選擇、排列以及在一個有限或離散系統上操作的數學問題.
階乘函數factorial
階乘在組合數學組合是非常重要的, 結果表示n 個對象不同的排列總數. 用符號可以表示為"!". 這個階乘函數定義于非負整數, 如果參數是負的則返回復無窮complex infinity.
>>> x=Symbol('x') >>> factorial(x)執行上述代碼得到??
x!
>>> factorial(5)執行上述代碼得到??
120
>>> factorial(-1)執行上述代碼得到??
∞∽
組合數 binomial
這個函數給出從n個不同元素中選取k個不同元素的方法總數.
>>> x,y=symbols('x y') >>> binomial(x,y)執行上述代碼得到 ?
>>> binomial(4,2)
執行上述代碼得到??
6
楊輝三角(西方人稱為Pascal's triangle)的行可以通過組合數函數得到.
>>> for i in range(5): print ([binomial(i,j) for j in range(i+1)])執行上述代碼得到??
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
斐波那契數列fibonacci
斐波那契數列?是由初始條件?F0=0, F1=1 以及遞歸式定義的數列?
>>> [fibonacci(x) for x in range(10)]執行上述代碼得到??
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
三階斐波那契數列tribonacci
斐波那契數列 事實上就是二階差分方程 因此?三階斐波那契數列也可以類似定義為:初始條件為?F0=0, F1=1, F2=1, 迭代關系式為?Fn=Fn-1+Fn-2+Fn-3的數列.
>>> tribonacci(5, Symbol('x'))執行上述代碼得到??
>>> [tribonacci(x) for x in range(10)]
執行上述代碼得到??
[0, 1, 1, 2, 4, 7, 13, 24, 44, 81]
不常用函數
接下來是一些常用函數??
Min?? 返回列表的最小值t. 它的名稱?Min 之所以首字母大寫是為了和內建函數?min相區分.
Max?? 返回列表的最大值. 它的名稱?Max 是為了不和內建函數 max 沖突.
root?? 返回 x 的第 n 個根.
sqrt?? 返回 x 的主平方根.
cbrt?? 這個函數計算 x 的主三次方根, (就是?x**Rational(1,3)的簡寫).
接下來就是上述不常用函數的示例及其各自的輸出??
>>> Min(pi,E)e
>>> Max(5, Rational(11,2))112112
>>> root(7,Rational(1,2))49
>>> sqrt(2)2–√2
>>> cbrt(1000)10
SymPy - 解方程
因為符號?= 和?== 定義為Python中的賦值和等式算子,所以它們不能用于刻畫符號方程. 在 SymPy 中提供了函數?Eq() 來建立一個方程.
>>> from sympy import * >>> x,y=symbols('x y') >>> Eq(x,y)上述命令給出一個等價于如下結果的輸出 ?
x = y
因為?x=y 是可能的當且僅當?if x-y=0, 上述方程可以寫作??
>>> Eq(x-y,0)上述代碼給出一個等價于如下結果的輸出??
x ? y = 0
SymPy 中?solver 模塊中的函數 solveset() 它的原型如下 ?
solveset(equation, variable, domain)默認的定義域是復數域?S.Complexes. 使用函數?solveset(), 我們可以解一個代數方程, 例如??
>>> solveset(Eq(x**2-9,0), x)上述命令輸出結果 ?
{?3, 3}
>>> solveset(Eq(x**2-3*x, -2),x)執行上述命令得到如下結果 ?
{1,2}
solveset 的輸出是一個解的?FiniteSet 有限集合. 如果沒有解, 返回空集EmptySet
>>> solveset(exp(x),x)
執行上述命令得到如下結果??
?
線性方程
我們必須使用函數?linsolve() 以求解線性方程組.
例如, 如下的線性方程組 ?
>>> from sympy import * >>> x,y=symbols('x y') >>> linsolve([Eq(x-y,4),Eq( x + y ,1) ], (x, y))執行上述命令得到如下結果??
函數 linsolve() 也可以求解用矩陣形式表示的線性方程組.
>>> a,b=symbols('a b') >>> a=Matrix([[1,-1],[1,1]]) >>> b=Matrix([4,1]) >>> linsolve([a,b], (x,y))執行上述命令得到如下結果??
非線性方程(組)
我們使用 nonlinsolve() 函數計算非線性方程(組). 這類方程的示例如下??
>>> a,b=symbols('a b') >>> nonlinsolve([a**2 + a, a - b], [a, b])執行上述命令得到如下結果??
微分方程(組)
首先通過給函數 symbols 傳遞一個參數?cls=Function 來定義一個未知函數. 解微分方程(組)使用函數 desolve.
>>> x=Symbol('x') >>> f=symbols('f', cls=Function) >>> f(x)執行上述命令得到如下結果??
f(x)
這里的?f(x) 是一個未定義的函數. 它的導數定義如下??
>>> f(x).diff(x)執行上述命令得到如下結果??
首先創建對應于如下微分方程的?Eq 對象
>>> eqn=Eq(f(x).diff(x)-f(x), sin(x)) >>> eqn執行上述命令得到等價于如下表達式的結果??
>>> dsolve(eqn, f(x))
執行上述命令得到等價于如下表達式的結果??
總結
以上是生活随笔為你收集整理的Sympy简单教程(6)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel 散点图添加颜色
- 下一篇: 对象关系映射(ORM)介绍理解