zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    【Android】HAL分析
    【qt】QT 的信号与槽机制
    【驱动】DM9000A网卡驱动框架源码分析
    【驱动】LCD驱动(FrameBuffer)分析
    告别我的OI生涯
    诸神的黄昏——北林退役帖合集
    cf592d
    北京林业大学就读体验
    hdu 5442 (ACM-ICPC2015长春网络赛F题)
    JAVA入门[4]-IntelliJ IDEA配置Tomcat
  • 原文地址:https://www.cnblogs.com/Netsharp/p/12990124.html
Copyright © 2011-2022 走看看