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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python实现利用留数定理分解分式多项式

發布時間:2023/12/14 python 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现利用留数定理分解分式多项式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

編寫之初

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

算數實現

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

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

依賴的包

1.sympy模塊
sympy模塊,可以進行符號計算,可以定義符號變量,進行代數運算,以及微分運算、積分運算等。

pip install sympy

2.re正則化模塊
re模塊是python獨有的匹配字符串的模塊,該模塊中提供的很多功能是基于正則表達式實現的。

pip install re

完整代碼及注釋

import sympy as sp import res = sp.symbols('s') # 創建符號變量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+") # 獲取分式中的冪數 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]) # 獲取求極限時的 極限參數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]) # 獲取求極限時的 極限參數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階導數limit_value = -int(re.findall('(\d+)', moleculelist[molecule_number])[0]) # 獲取求極限時的 極限參數value = sp.limit(y_diff, s, limit_value) # 求極限計算 該項分子值print('計算分母為' + str(moleculelist[molecule_number]) + '項的'+ str(int(pow)-1) + '階導數的分子:limit——>' + str(limit_value), y_diff)print('計算得:', value)except: passmolecule_number += 1# print(molecule+'\n'+molecule) print('分解結果為:',sp.apart(Y, s)) # 拆分結果

運行結果

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

感悟與不足

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

總結

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

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