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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

分式求和python_python实现利用留数定理分解分式多项式

發(fā)布時間:2024/9/18 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分式求和python_python实现利用留数定理分解分式多项式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

編寫之初

由于利用留數(shù)定理分解分式多項式的計算麻煩,所以決定用python做一個利用留數(shù)定理分解分式多項式程序,實現(xiàn)只要輸入多項式就可以得到各種中間參數(shù)和最終拆分結(jié)果的目的。從本程序可以得到:分解后每項多項式分子值、計算分解后每項多項式分子值的過程展示、最終分解結(jié)果展示。

算數(shù)實現(xiàn)

利用留數(shù)定理分解分式多項式計算過程以下圖為例所示

對于算數(shù)運算形象的理解:以該式為例,分解后各項分母為原多項式分母中的各項(s、(s+2)、(s+3)2)加上這些項中高次冪項去掉次冪為分母的項((s+3));分解后各項分子為原多項式分母依次去掉各項后求極限所得值(-4、1/3、3)以及n(n>1)次冪項去掉該項后的n階微分式求極限所得值(-10/3)。也依據(jù)這個思路編寫程序。

依賴的包

1.sympy模塊

sympy模塊,可以進(jìn)行符號計算,可以定義符號變量,進(jìn)行代數(shù)運算,以及微分運算、積分運算等。

pip install sympy1

2.re正則化模塊

re模塊是python獨有的匹配字符串的模塊,該模塊中提供的很多功能是基于正則表達(dá)式實現(xiàn)的。

pip install re1

完整代碼及注釋

import sympy as sp

import re

s = sp.symbols('s') # 創(chuàng)建符號變量

print('以 6*(s+1)/(s*(s+2)*(s+3)**2) 形式為例')

Y = input('請輸入待分解多項式:') # 復(fù)制 例 6*(s+1)/(s*(s+2)*(s+3)**2)

# denominator = y.split('/')[0] # 分子項

molecule = Y.split('/')[1] # 分母項

moleculelist = molecule.strip('()').split('*') # 分母每項

# print(moleculelist)

reg = re.compile(r"(?<=\*)\d+") # 獲取分式中的冪數(shù)

match=reg.search(Y)

pow = match.group(0)

molecule_number = 0 # 初始化分母項索引

# 計算拆分后各項值

while molecule_number < len(moleculelist):

try:

if moleculelist[molecule_number] != '':

if moleculelist[molecule_number + 1] != '':

y = Y.replace(moleculelist[molecule_number]+'*', '') # 得到用來計算 該項分子值 的多項式

if moleculelist[molecule_number] == 's':

value = sp.limit(y, s, 0) # 求極限計算 該項分子值

print('\n計算分母為' + str(moleculelist[molecule_number]) +'項的分子:limit——>0 ', y)

print('計算得;', value)

else:

limit_value = -int(re.findall('(\d+)', moleculelist[molecule_number])[0]) # 獲取求極限時的 極限參數(shù)

value = sp.limit(y, s, limit_value) # 求極限計算 該項分子值

print('計算分母為' + str(moleculelist[molecule_number]) +'項的分子:limit——>' + str(limit_value), y)

print('計算得:', value)

else:

y = Y.replace('*' + moleculelist[molecule_number] + '**' + pow, '') # 得到用來計算 該項分子值 的多項式

limit_value = -int(re.findall('(\d+)', moleculelist[molecule_number])[0]) # 獲取求極限時的 極限參數(shù)

value = sp.limit(y, s, limit_value) # 求極限計算 該項分子值

print('計算分母為' + str(moleculelist[molecule_number]) + '**' + pow + '項的分子:limit——>' + str(limit_value), y)

print('計算得:', value)

y_diff = sp.together(sp.diff(y, s, int(pow)-1)) # 求解 除n次冪項外分式 n階導(dǎo)數(shù)

limit_value = -int(re.findall('(\d+)', moleculelist[molecule_number])[0]) # 獲取求極限時的 極限參數(shù)

value = sp.limit(y_diff, s, limit_value) # 求極限計算 該項分子值

print('計算分母為' + str(moleculelist[molecule_number]) + '項的'+ str(int(pow)-1) + '階導(dǎo)數(shù)的分子:limit——>' + str(limit_value), y_diff)

print('計算得:', value)

except: pass

molecule_number += 1

# print(molecule+'\n'+molecule)

print('分解結(jié)果為:',sp.apart(Y, s)) # 拆分結(jié)果1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

運行結(jié)果

運行代碼,首先以例示形式輸入待分解多項式,得到分解過程及結(jié)果

感悟與不足

本來打算純手寫一個留數(shù)定理分解分式多項式的程序,但是由于其中涉及到極限與微分的計算,而這兩個模塊編寫起來又要一定時間,于是借助了sympy模塊輔助編程,但是我意外地發(fā)現(xiàn),sympy模塊居然自帶多項式分解函數(shù) sympy.apart()因此我也在呈現(xiàn)分解結(jié)果時用到了這個函數(shù),免去了字符串處理當(dāng)中的一系列麻煩。因此如果大家對多項式分解的過程不在意,只想得到分解結(jié)果,只需執(zhí)行sympy.apart()函數(shù)即可,至于它其中的運算原理我也不得而知。

總結(jié)

以上是生活随笔為你收集整理的分式求和python_python实现利用留数定理分解分式多项式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。