日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sympy简单教程(6)

發布時間:2023/12/29 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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) 是負的
>>> sign(1.55), sign(-1), sign(S.Zero)

上述代碼得到結果??

(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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。