(給機器學習算法與Python學習加星標,提升AI技能)
在三行函數中解決任何線性方程式的技巧,甚至可以在兩行代碼中重寫,不想了解一下嘛?據筆者所知,這是解決Python中線性方程的最有效方法。
defsolve_linear(equation,var= x ): expression =equation.replace("=","-(")+")" grouped =eval(expression.replace(var, 1j )) return -grouped.real/grouped.imag
這是標準代數過程示例,最後得出答案。
它的原理是怎樣的呢?首先定義一個線性方程式,它必須以純形式可解。這意味着它只能有一個變量,通常寫爲x。二元方程需要求解多個線性方程(方程組)。
線性方程式由三個主要部分組成:常數,變量和乘數。
不管是幾元方程還是運算的組合(加,減,乘和除),在括號範圍內都是有效的。只要遵守線性方程的這些定義,就可以通過函數解決。
接下來逐步分解該函數,用以下線性方程式的演示爲例。
將第一行中等式右側的整個表達式移到左側,將等式轉換爲要求值的表達式。
expression= equation.replace("="," - (")+")"
IDE中的演示如下:
等式中的所有“變量”已移至一側,等號後已無變量,該表達式等於0。
在第二行代碼中計算新表達式的值,表示爲ax + b =0。使用Python的內置複數處理,其中j表示數學常數i =√-1。
grouped= eval(expression.replace(var, 1j )
注意,在函數初始化時將var指定爲x。
eval函數有一個表達式。通過用已知的j(i)替換未知變量x,Python將兩類表達式元素分開求值,即變量和常量。對表達式求值時,答案爲a * j +b,Python認定這是一個複數。由於使用j代替了x,所以結果是一個簡化且易於求解的線性方程。
首先,在eval()的演示工作流程中,它可以接收字符串中給出的任何Python命令:
因此,數學表達式與任何Python表達式的處理方式相同。eval()的獨到之處在於無需手動執行繁重的工作,而是利用Python的字符串處理。
Python會認爲x實際上是i來自動求值字符串,這與下圖中的操作相同:
最後獲得了簡化形式ax + b = 0。通過標準和簡單的代數運算,發現x等於-b / a,或者通過創建的複數來運算,實數部分的負數(上例中爲9)除以虛數乘數(上例中爲1)。
return -grouped.real/grouped.imag
在最後一行代碼中,通過返回複數實數部分的負數除以虛數部分來簡單地返回此代數步驟。
通過操縱和利用Python的內置數學求值功能,這三行函數就可以對任何線性方程式(無論其長度或複雜度)進行處理啦。
相關鏈接:
https://medium.com/swlh/the-most-efficient-way-to-solve-any-linear-equation-in-three-lines-of-code-bb8f66f1b463
推薦閱讀
厲害了!潘石屹Python考試首秀99分!
下載 | 5 本程序員成長必讀書籍
太讚了!微軟官方再次上線了Python教程,這次比較高級
太牛逼了!一位中國博士把整個CNN都給可視化了,每個細節看的清清楚楚!
放棄Excel,擁抱Python!神級編輯器統一表格與Python