python 利用虛數解一元方程組

2021-08-21 14:27:43 字數 1492 閱讀 4636

最近在寫乙個產生資料的指令碼,該指令碼可以設定表字段間的邏輯關係。比如:table1.col1 + table2.col2 = table3.col3。如果設定了這種邏輯關係,那麼勢必會遇到知道其中兩個欄位的值,需要計算第三個字段值的情況。

一開始,沒有往深入想,覺得不會很難,就傻乎乎的在寫了。越寫越覺得不好寫,越寫越覺得難處理。雖然最終寫出乙個能解四則運算的方法來,但是覺得心力交瘁。邏輯上上下下,亂糟糟的,根本不是我想要的。

在這個時候,突然看到可以用python內建的eval方法可以解決上述問題,而且只要幾行**,就ok了(當然,知道這個結果的時候,我的內心是奔潰的,畢竟折磨了我好幾個晚上)。

比如要解這麼乙個方程:

"(a + b) * c - d = e * f"
首先,把等式右邊都移到等式左邊來,使等式右邊為0

expression = "(a + b) * c - d = e * f"

expression = expression.replace("=", "-(") + ")"

上述方程處理後expression的值為(a + b) * c - d -( e * f)

若此時知道方程組內的各個值,僅f的值未知:

比如各個值如下:

若此時你用eval方法執行,會報錯,因為表示式中f沒有賦值,無法計算。倘若此時給f賦值為1j(虛數),那麼表示式可以執行並算出這個算式的結果。

如下:

c = eval(expression, )
得到c = (2129-9930j)

接下去最關鍵的一步來了:

f = -c.real/c.imag
你可能還不熟悉realimag分別是什麼含義。它們其實分別表示某個數的實部與虛部。

>>>c = 10

>>>c.real

10>>>c.imag

0

至此,一元方程組已經解決了。可能還是有人不懂,為什麼最後一步,-c.real/c.imag就是方程的解呢? 虛數a+bj的實部a對應平面座標的橫軸,虛部b對應平面座標的縱軸。a+bj可與平面內(a, b)這個點相對應。

可以這麼理解:

當我們設定未知變數為虛數1j的時候,那麼這個點肯定在平面內的某個點上,即 a+bj。在處理等式的第一步,我們就已經把等式右邊處理成0了,那麼:a+bj=0是必定成立的。若要等式成立,當初設定的虛數j應該等於多少呢?

j = -a/b
a 是實部,b是虛部,與上面一致。第乙個想出這個方法的人,不得不膜拜!!

牛頓迭代法解一元方程組

牛頓迭代法是牛頓在17世紀提出的一種求解方程f x 0.多數方程不存在求根公式,從而求精確根非常困難,甚至不可能,從而尋找方程的近似根就顯得特別重要。設r是f x 0的真根。其中xn 1 xn f xn f xn 稱為r的n 1次近似值。上式稱為牛頓迭代公式。其中f xn 是f xn 的一階導數 下...

Python 解一元二次方程

請定義乙個函式quadratic a,b,c 接收3個引數,返回一元二次方程 ax2 bx c 0的兩個解。coding utf 8 可將quadratic a,b,c 單獨寫為b.py,之後在a.py中通過from b import quadratic呼叫這個函式 import math def ...

Python 解一元二次方程

今天看到廖雪峰老師的python3,看到函式後面的練習 如何解一元二次方程 感覺蠻簡單的就開啟text sblime去試試 糟糕 竟然忘了怎麼求一元二次方程!查資料 終於查好了!開始動手 1,匯入math模組 2.定義函式def n d return math.sqrt d def quadrati...