标签:竞赛 pre div 线性代数 结果 法则 port 问题 import
我们从一个鸡兔同笼的问题说起:
据《孙子算经》记载:今有雉兔同笼,上有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)
对于更多元的解法也是一样的,在线性代数里,这个方法叫:克拉默法则
标签:竞赛 pre div 线性代数 结果 法则 port 问题 import
原文地址:https://www.cnblogs.com/Netsharp/p/12990124.html