分式求和python_python实现利用留数定理分解分式多项式
編寫之初
由于利用留數(shù)定理分解分式多項式的計算麻煩,所以決定用python做一個利用留數(shù)定理分解分式多項式程序,實現(xiàn)只要輸入多項式就可以得到各種中間參數(shù)和最終拆分結果的目的。從本程序可以得到:分解后每項多項式分子值、計算分解后每項多項式分子值的過程展示、最終分解結果展示。
算數(shù)實現(xiàn)
利用留數(shù)定理分解分式多項式計算過程以下圖為例所示
對于算數(shù)運算形象的理解:以該式為例,分解后各項分母為原多項式分母中的各項(s、(s+2)、(s+3)2)加上這些項中高次冪項去掉次冪為分母的項((s+3));分解后各項分子為原多項式分母依次去掉各項后求極限所得值(-4、1/3、3)以及n(n>1)次冪項去掉該項后的n階微分式求極限所得值(-10/3)。也依據這個思路編寫程序。
依賴的包
1.sympy模塊
sympy模塊,可以進行符號計算,可以定義符號變量,進行代數(shù)運算,以及微分運算、積分運算等。
pip install sympy1
2.re正則化模塊
re模塊是python獨有的匹配字符串的模塊,該模塊中提供的很多功能是基于正則表達式實現(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('請輸入待分解多項式:') # 復制 例 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階導數(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) + '階導數(shù)的分子:limit——>' + str(limit_value), y_diff)
print('計算得:', value)
except: pass
molecule_number += 1
# print(molecule+'\n'+molecule)
print('分解結果為:',sp.apart(Y, s)) # 拆分結果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
運行結果
運行代碼,首先以例示形式輸入待分解多項式,得到分解過程及結果
感悟與不足
本來打算純手寫一個留數(shù)定理分解分式多項式的程序,但是由于其中涉及到極限與微分的計算,而這兩個模塊編寫起來又要一定時間,于是借助了sympy模塊輔助編程,但是我意外地發(fā)現(xiàn),sympy模塊居然自帶多項式分解函數(shù) sympy.apart()因此我也在呈現(xiàn)分解結果時用到了這個函數(shù),免去了字符串處理當中的一系列麻煩。因此如果大家對多項式分解的過程不在意,只想得到分解結果,只需執(zhí)行sympy.apart()函數(shù)即可,至于它其中的運算原理我也不得而知。
總結
以上是生活随笔為你收集整理的分式求和python_python实现利用留数定理分解分式多项式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第三季度快递服务满意度调查:72 小时准
- 下一篇: 怎么修改存储路径_Power Query