溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python sympy的安裝和使用

發(fā)布時間:2020-05-23 09:35:09 來源:億速云 閱讀:1345 作者:Leah 欄目:編程語言

  本篇文章主要探討python的sympy的安裝和使用。有一定的參考價值,有需要的朋友可以參考一下,跟隨小編一起來看解決方法吧。

 1.安裝

  pip3 install sympy

  建議使用anaconda,里面有大量的科學(xué)包,方便使用!

  2.使用

  我會根據(jù)我的理解和官方教程來進行使用,英語好的可以直接去官網(wǎng)看,防止我可能出現(xiàn)的理解誤差。

  請認(rèn)真看注釋!

  from sympy import * //引入包

  x = symbols('x') //聲明變量'x'

  a = Integral(cos(x)*exp(x),x) //

  print(Eq(a,a.doit()))

  Symbol()函數(shù)定義單個數(shù)學(xué)符號;symbols()函數(shù)定義多個數(shù)學(xué)符號

  3.數(shù)學(xué)符號

  學(xué)了那么久python,忽然發(fā)現(xiàn)自己連數(shù)學(xué)符號都不會打,趁這次機會學(xué)習(xí)一下好了。

  sqrt:根號

  pi:圓周率

  exp(x):exe^xex

  詳見《python之math庫的使用》

  復(fù)數(shù)的表示

  aComplex = 1 + 2j //申明一個復(fù)數(shù)

  aComplex

  (1+2j)

  aComplex.real //復(fù)數(shù)實部

  1.0

  aComplex.imag //復(fù)數(shù)虛部

  2.0

  aComplex.conjugate() //共軛復(fù)數(shù)

  (1-2j)

  //  取整除 - 向下取接近除數(shù)的整數(shù)

  比較運算符

  ==  等于 - 比較對象是否相等  (a == b) 返回 False。

  !=  不等于 - 比較兩個對象是否不相等  (a != b) 返回 True。

  >  大于 - 返回x是否大于y  (a > b) 返回 False。

  <  小于 - 返回x是否小于y。所有比較運算符返回1表示真,返回0表示假。這分別與特殊的變量True和False等價。注意,這些變量名的大寫?! ?a < b) 返回 True。

  >=  大于等于 - 返回x是否大于等于y。  (a >= b) 返回 False。

  <=  小于等于 - 返回x是否小于等于y。  (a <= b) 返回 True。

  賦值運算符

  以下假設(shè)變量a為10,變量b為20:

  運算符  描述  實例

  =  簡單的賦值運算符  c = a + b 將 a + b 的運算結(jié)果賦值為 c

  +=  加法賦值運算符  c += a 等效于 c = c + a

  -=  減法賦值運算符  c -= a 等效于 c = c - a

  *=  乘法賦值運算符  c *= a 等效于 c = c * a

  /=  除法賦值運算符  c /= a 等效于 c = c / a

  %=  取模賦值運算符  c %= a 等效于 c = c % a

  **=  冪賦值運算符  c **= a 等效于 c = c ** a

  //=  取整除賦值運算符  c //= a 等效于 c = c // a

  :=  海象運算符,可在表達式內(nèi)部為變量賦值。Python3.8 版本新增運算符?! ≡谶@個示例中,賦值表達式可以避免調(diào)用 len() 兩次:if (n := len(a)) > 10: print(f"List is too long ({n} elements, expected <= 10)")

  示例:

  4.擴展運用

  折疊表達式

  factor()函數(shù)可以折疊表達式(提取公因子),而expand()函數(shù)可以展開表達式(類似于一般式)

  舉個例子:x3+y2x2+zxx^3+y^2x^2+zxx3+y2x2+zx,折疊后:x(x2+y2x+z)x(x^2+y^2x+z)x(x2+y2x+z).

  import math

  import sympy

  x,y,z = symbols('x y z')

  expr = x**3+(x**2)*(y**2)+z*x

  f_expr = factor(expr)

  e_expr = expand(f_expr)

  print(f_expr)

  print(e_expr)

  輸出結(jié)果:

  x*(x**2 + x*y**2 + z)

  x**3 + x**2*y**2 + x*z

  表達式化簡

  simplify()函數(shù)可以對表達式進行化簡,相當(dāng)于合并同類項

  from sympy import *

  x,y = symbols('x y')

  expr=(2*x)**3*(-5*x*y**2)

  s_expr=simplify(expr)

  print(s_expr)

  輸出: -40*x**4*y**2

  求解方程組

  一元方程組,例:6x+6(x?2000)=1500006x+6(x-2000)=1500006x+6(x?2000)=150000, (需要移項)

  from sympy import *

  x = Symbol('x')

  print(solve(6*x + 6*(x-2000)-150000,x)) //默認(rèn)使用一邊為0來求解

  二元一次方程組,例:

  from sympy import *

  x,y = symbols('x y')

  print(solve([x + y-10,2*x+y-16],[x,y]))

  輸出: {x: 6, y: 4}

  n元同理,不再示例。

  一元二次方程組

  from sympy import *

  x,y = symbols('x y')

  a,b,c = symbols('a b c')

  expr = a*x**2 + b*x + c

  s_expr = solve(expr, x) //告知要解的參數(shù)

  print(s_expr)

  輸出 :[(-b + sqrt(-4*a*c + b**2))/(2*a), -(b + sqrt(-4*a*c + b**2))/(2*a)]

  微積分Calculus

  一個非常重點的內(nèi)容,請認(rèn)真看并記住!

  求極限

  Sympy是使用limit(表達式,變量,極限值)函數(shù)來求極限的

  例子:lim?y→0sin(x)x\displaystyle \lim_{y \to0}\frac{sin(x)}{x}y→0limxsin(x)

  from sympy import *

  x,y = symbols('x y')

  expr = sin(x)/x

  l_expr = limit(expr, x, 0)

  print(l_expr)

  結(jié)果為1

  求導(dǎo)鄭州人流醫(yī)院 http://m.zzzy120.com/

  可以使用diff(表達式,變量,求導(dǎo)的次數(shù))函數(shù)對表達式求導(dǎo)(matlab也和這個差不多)

  例子:sin(x)exsin(x)e^xsin(x)ex

  from sympy import *

  x,y = symbols('x y')

  expr = sin(x)*exp(x)

  diff_expr = diff(expr, x)

  diff_expr2 = diff(expr,x,2) //n階導(dǎo)同理

  print(diff_expr)

  print(diff_expr2)

  求不定積分

  Sympy是使用integrate(表達式,變量)來求不定積分的

  例子:exsin(x)+excos(x)e^xsin(x)+e^xcos(x)exsin(x)+excos(x)

  from sympy import *

  x,y = symbols('x y')

  expr=exp(x)*sin(x) + exp(x)*cos(x)

  i_expr=integrate(expr,x)

  print(i_expr)

  輸出原函數(shù):exp(x)*sin(x)

  求定積分

  Sympy同樣是使用integrate()函數(shù)來做定積分的求解,

  例子:sin(x2)sin(x^2)sin(x2)

  from sympy import *

  x,y = symbols('x y')

  expr=sin(x**2)

  i_expr=integrate(expr, (x, -oo, oo))

  print(i_expr)

  輸出:sqrt(2)*sqrt(pi)/2 即:2π2\frac{\sqrt 2 \sqrt \pi}{2}22π (哭了,手算算不出來,無法驗證)

  注意:

  本人也是一個初學(xué)者,如有不對的地方望批評指正!

  5.其他函數(shù)及參數(shù)的用法

  這個涉及的知識就會比較深了,一般只有較高級的運用才會使用的到,一般仿照上面的代碼使用就可以解決絕大多數(shù)問題,純個人想加深理解,選讀 (等我有能力的時候再看下源碼吧!)

  傳參:

  from sympy import *

  x = symbols('x')

  fx = 5*x+4

  # 使用evalf函數(shù)傳值

  y1 = fx.evalf(subs={x:6})

  print(y1)

  微分:

  矩陣:

  構(gòu)建矩陣:

  from sympy import *

  # 一緯矩陣

  m1 = Matrix([1, 2, 3])

  #二維矩陣

  m2 = Matrix([[1, -1], [3, 4], [0, 2]])

  print(latex(m1)

  print(latex(m2))

  輸出:

  \left[\begin{matrix}1\\2\\3\end{matrix}\right]

  \left[\begin{matrix}1 & -1\\3 & 4\\0 & 2\end{matrix}\right]

  完了,有些看不懂,趕緊去查查! 詳情請看《LaTeX之?dāng)?shù)學(xué)公式及符號的語法及表達》

  擴展知識:

  Eq():創(chuàng)建方程 (例:Eq(x**7+a^2,0) 等式的左邊和右邊

  solve:求解方程

  部分單詞擴展:

  integral :積分

  indefinite:不定積分 definite:定積分

  differential:微分

  eigenvalues:特征值

  看完上述內(nèi)容,你們對python的sympy大概了解了嗎?如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI