解一元方程式的方法整理和美化輸出

前一篇文章介紹,我們可以用 sympy 這個套件的功能,來解一元方程式的根。這裡我們整理如何匯入所需的模組或函式庫,以方便求方程式的解,並美化輸出的數學式的格式。

在 Spyder 的左邊那欄,是編輯程式碼的畫面,我們可以在這裡寫程式碼,再點選 Run 或 按鍵盤上的 F5 鍵來執行程式。程式執行的情形,會在 Spyder 右下方的 IPython console 顯示執行情形。

如上圖,我們把求方程式的根和美化輸出所需匯入的模組或函式庫:

 from sympy import solveset, S
 
 from sympy.abc import x
 
 from sympy import init_printing

 init_printing()

寫在左欄編輯器裡,然後存檔,取一個檔名,例如這裡用 findroot.py 做為檔名。

然後再點 Run 或按 F5 鍵,程式就會執行,將以上的指令在 IPython console 中執行。這時會看到 IPython 中出現一行執行 findroot.py 檔的指令。

 In [1]: runfile('/home/david/Desktop/pyworking01/findroot.py', wdir='/home/david/Desktop/pyworking01')

接下來,我們在 IPython 視窗裡輸入求一元方程式的根的指令。這裡,我們求這個一元四次方程式的解。
x^{4} + x + 3 = 0

 In [2]: solveset(x ** 4 +  x + 3, x)
 Out[2]: 
 # 註:答案的數學式圖檔太長,請由此下載欣賞

我們把 findroot.py 這個程式碼存檔下來,未來要解決類似的問題,我們就可以開啟這個檔案,直接執行,就可以迅速匯入所需要的模組或函式庫了。

比較:尚未美化的輸出

如果我們沒有用 init_printing() 的功能,同樣計算上面的一元四次方程式,在 Spyder 的 IPython 上會得到一串很長較不易閱讀的輸出,相比之下,就可以看出兩者的明顯差異。

 In [2]: solveset(x ** 4 +  x + 3, x)
 Out[2]: 
 FiniteSet(-I*sqrt(2/(1/16 + sqrt(255)*I/16)**(1/3) - 2/sqrt(2/(1/16 + sqrt(255)*I/16)**(1/3) + 2*(1/16 + sqrt(255)*I/16)**(1/3)) + 2*(1/16 + sqrt(255)*I/16)**(1/3))/2 - sqrt(2/(1/16 + sqrt(255)*I/16)**(1/3) + 2*(1/16 + sqrt(255)*I/16)**(1/3))/2, -I*sqrt(2/(1/16 + sqrt(255)*I/16)**(1/3) + 2/sqrt(2/(1/16 + sqrt(255)*I/16)**(1/3) + 2*(1/16 + sqrt(255)*I/16)**(1/3)) + 2*(1/16 + sqrt(255)*I/16)**(1/3))/2 + sqrt(2/(1/16 + sqrt(255)*I/16)**(1/3) + 2*(1/16 + sqrt(255)*I/16)**(1/3))/2, -sqrt(2/(1/16 + sqrt(255)*I/16)**(1/3) + 2*(1/16 + sqrt(255)*I/16)**(1/3))/2 + I*sqrt(2/(1/16 + sqrt(255)*I/16)**(1/3) - 2/sqrt(2/(1/16 + sqrt(255)*I/16)**(1/3) + 2*(1/16 + sqrt(255)*I/16)**(1/3)) + 2*(1/16 + sqrt(255)*I/16)**(1/3))/2, sqrt(2/(1/16 + sqrt(255)*I/16)**(1/3) + 2*(1/16 + sqrt(255)*I/16)**(1/3))/2 + I*sqrt(2/(1/16 + sqrt(255)*I/16)**(1/3) + 2/sqrt(2/(1/16 + sqrt(255)*I/16)**(1/3) + 2*(1/16 + sqrt(255)*I/16)**(1/3)) + 2*(1/16 + sqrt(255)*I/16)**(1/3))/2)

另一個方法,使用 Jupyter Notebook 的 IPython

Jupyter Notebook 是另一個很方便的 Python 編輯和執行工具。特色是除了可以使用 IPython console,也可以同時插入文字和圖片註解,即所謂的 Markdown。

我試用了 Jupyter Notebook,它的數學式輸出非常地美觀,並且提供多種格式做選擇,在輸出的數學式上按滑鼠右鍵,還可以看到各種格式的選項,也可以把結果輸出成 TeX 或是 MathML code,方便與其它數學編輯或顯示程式交流。

下圖是 Jupyter Notebook 的輸出畫面,有興趣的朋友,可以安裝使用。

您也可以瀏覽從 Jupyter Notebook 下載匯出的 html 網頁,在數學式上點滑鼠右鍵嘗試各種格式選項。建議在電腦上用 firefox 瀏覽器,相容功能最完整。

參考閱讀:
https://docs.sympy.org/latest/tutorial/printing.html