理查德.费曼 2021-10-30 21:07 采纳率: 100%
浏览 298
已结题

matlab中非方阵的矩阵左除右除怎么用python实现实现

矩阵的除法是对方阵使用的,但matlab里面可以对非方阵也能左除,右除,查资料说是matlab对非方阵按列进行了householder变换,但是没查到python里面怎么实现这个功能。求助一下各位大佬,这个怎么实现?

  • 写回答

1条回答 默认 最新

  • 技术专家团-Joel 2021-10-30 21:38
    关注

    你可以看看matlab官方说明:

    (1)backslash \

    说明
    示例
    x = A\B 对线性方程组 A*x = B 求解。矩阵 A 和 B 必须具有相同的行数。如果 A 未正确缩放或接近奇异值,MATLAB® 将会显示警告信息,但还是会执行计算。
    如果 A 是标量,那么 A\B 等于 A.\B。
    如果 A 是 n×n 方阵,B 是 n 行矩阵,那么 x = A\B 是方程 A*x = B 的解(如果存在解的话)。
    如果 A 是矩形 m×n 矩阵,且 m ~= n,B 是 m 行矩阵,那么 A\B 返回方程组 A*x= B 的最小二乘解。
    

    你要用python实现backslash,其实很简单

    import numpy as np
    def backslash(a,b):
        m,n=a.shape
        p,q=b.shape
        if(m!=p):
            print('dimensions do not match!')
            return -1
        if(m==n):
            return np.linalg.solve(a,b)
        else:
            a1 = a.T.dot(a)
            b1 = a.T.dot(b)
            return np.linalg.solve(a1,b1)
    

    (2)slash /
    官方说明

    x = B/A 对线性方程组 x*A = B 求解 x。矩阵 A 和 B 必须具有相同的列数。如果 A 未正确缩放或接近奇异值,MATLAB® 将会显示警告信息,但还是会执行计算。
    如果 A 是标量,那么 B/A 等于 B./A。
    如果 A 是 n×n 方阵,B 是 n 列矩阵,那么 x = B/A 是方程 x*A = B 的解(如果存在解的话)。
    如果 A 是矩形 m×n 矩阵,且 m ~= n,B 是 n 列矩阵,那么 x=B/A 返回方程组 x*A = B 的最小二乘解。
    

    这个就更简单了,只需要:

    import numpy as np
    def slash(a,b):
        a=a.T
        b=b.T
        x = backslash(a,b)
        return x.T
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月31日
  • 已采纳回答 10月30日
  • 创建了问题 10月30日

悬赏问题

  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿