《用Python進行科學計算》 SymPy

2021-08-28 14:18:42 字數 2529 閱讀 3679

sympy是python的數學符號計算庫,用它可以進行數學公式的符號推導。

e** iπ + 1 = 0

e是自然指數的底,i是虛數單位,π是圓周率。

驗證這個公式:

from sympy import *

print(e**(i*pi)+1)

# 0

尤拉恒等式可以用下面的公式運算:

e** ix = cos x + i sin x

#coding:utf-8

from sympy import *

from pprint import pprint

print(e**(i*pi)+1)

# 0#為了用sympy求證上面的公式,需要引入變數x,在sympy中,數學符號是

#symbol類的物件,所以先要建立

x=symbol('x')

#expand函式可以將公式展開,

print(expand(e**(i*x)))

# exp(i*x)

# exp不是math.exp或者numpy.exp,而是sympy.exp,它

# 是乙個類,用來表述自然指數函式

# expand函式有關鍵字引數complex,當它為true時,expand將把公式

#分為實數和虛數兩個部分

print(expand(exp(i*x),complex=true))

# i*exp(-im(x))*sin(re(x)) + exp(-im(x))*cos(re(x))

#顯然這裡將符號x當作複數了,指定符號x必須為實數。

x=symbol('x',real=true)

print(expand(exp(i*x),complex=true))

# i*sin(x) + cos(x)

# 用泰勒多項式展開

tmp=series(exp(i*x),x,0,10)

pprint(tmp)

"""1 + i*x - x**2/2 - i*x**3/6 + x**4/24 + i*x**5/120 - x**6/720 - i*x**7/5040 +

x**8/40320 + i*x**9/362880 + o(x**10)

"""# 分別獲得tmp的實部和虛部,分別和cos和sin的展開公式進行比較

pprint(re(tmp))

"""x**8/40320 - x**6/720 + x**4/24 - x**2/2 + re(o(x**10)) + 1

"""pprint(series(cos(x),x,0,10))

"""1 - x**2/2 + x**4/24 - x**6/720 + x**8/40320 + o(x**10)

"""pprint(im(tmp))

"""x**9/362880 - x**7/5040 + x**5/120 - x**3/6 + x + im(o(x**10))

"""pprint(series(sin(x),x,0,10))

"""x - x**3/6 + x**5/120 - x**7/5040 + x**9/362880 + o(x**10)

"""

使用scipy數值積分可以計算球體體積,而sympy的符號積分函式integrate則可以幫助我們進行符號積分。

integrate進行不定積分:

in [3]: x=symbol('x')

in [4]: integrate(x*sin(x),x)

out[4]: -x*cos(x) + sin(x)

如果指定x的取值範圍的話,integrate則進行定積分運算:

in [5]: integrate(x*sin(x),(x,0,2*pi))

out[5]: -2*pi

計算球體體積。

y(x)=(r*r-x*x)**0.5
in [11]: #建立多個符號

in [12]: x,y,y=symbols('x,y,r')

in [13]: r=symbols('r',positive=true)

in [14]: #定義r大於0

in [18]: circle_area=2*integrate(sqrt(r**2-x**2),(x,-r,r))

in [19]: circle_area

out[19]: pi*r**2

in [16]: #得到了球與x-y平面軸交線圓的面積

in [17]: #因為球體積是對切面進行積分,所以替換r為切面方程

in [21]: circle_area=circle_area.subs(r,sqrt(r**2-x**2))

in [22]: circle_area

out[22]: pi*(r**2 - x**2)

in [23]: integrate(circle_area,(x,-r,r))

out[23]: 4*pi*r**3/3

用Python做科學計算

python是一種物件導向的 動態的程式語言,具有非常簡潔而清晰的語法,既可以用於快速開發程式指令碼,也可以用於開發大規模的軟體,特別適合於完成各種高層任務。隨著numpy,scipy,matplotlib,enthought librarys等眾多程式庫的開發,python越來越適合於做科學計算。...

用python進行階乘計算

問題描述 輸入乙個正整數n,輸出n 的值。其中n 123 n。演算法描述 n 可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用乙個陣列a來表示乙個大整數a,a 0 表示a的個位,a 1 表示a的十位,依次類推。將a乘以乙個整數k變為將陣列a的每乙個元素都乘以k,請注意處理相應的...

python科學計算 numpy

畢設的程式設計中使用了python來處理資料,主要使用的是numpy包,網上大部分對numpy進行介紹的教程比較老舊,想要使用的功能不太容易找到。因此,寫這篇文章來對現有的一些資源就行整理,當然想要更全面的了解numpy的使用還是從訪問官方手冊開始。win下 pip isntall numpy當然最...