numpy二元一次方程求解


我們從一個雞兔同籠的問題說起:

據《孫子算經》記載:今有雉兔同籠,上有35頭,下有94足,問雉兔各有幾何

這是二年級奧林匹克數學競賽的題目,大人用二元一次方程來解就沒意思了,本文關注numpy如何通過矩陣求解。

假設,雞:x只 ;兔 : y 只,列二元一次方程為

1x + 1y = 35(頭)
2x + 4y = 94(足)

列矩陣為:A * w = b

| 1     1 |          | x |    | 35 |
| 2     4 |     *    | y |  = | 94 |    

求得未知數 w = b / A

因為矩陣不支持矩陣除法,但是可以通過A的逆矩陣(A_)來計算 : w = b *A_

 

import numpy as np
import numpy.linalg as ll

A = np.array([[1, 1], [2, 4]])
b = np.array([[35], [94]])

A_ = ll.inv(A)     # 求A的逆矩陣
w = np.dot(A_, b)  # A_ x b

結果為

In   [67]:
[[23.]
 [12.]]

numpy.linalg提供了solve方法可以直接求解,參見如下代碼

import numpy as np
import numpy.linalg as ll

A = np.array([[1, 1], [2, 4]])
b = np.array([[35], [94]])

w = ll.solve(A, b)
print(w)

 對於更多元的解法也是一樣的,在線性代數里,這個方法叫:克拉默法則

 numpy.matlib提供了矩陣matirx的處理,ndarray是處理多為數組,matrix只是二維,在matrix里可以直接求逆矩陣

import numpy as np

# 可以通過字符串格式構造一個矩陣
A = np.mat("1 1 ; 2 4")
b = np.mat("35 ; 94")

# .I是求逆矩陣
w = np.dot(A.I, b)

print(w)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM