Python线性方程求解-矩阵左除“\“、右除“/“

article/2025/9/16 14:34:12

目录

1 线性方程组求解方法

2 左除“\”→Ax=B

3 右除"/"→xA=B

4 其它说明


1 线性方程组求解方法

  • 如果Ax=B,则x=A\B,称为左除;
  • 如果xA=B,则x=B/A,称为右除。

        式中x为未知数。一般情况下,左除用的系比较多一些。在matlab里面实现左除或者右除会比较简单,直接有运算符号"\"和"/"。但是在Python里面就不能直接采用运算符号:

  • Python里面"\"不是一个运算符号;
  • Python直接采用B/A,表示的是矩阵B的每个元素除以矩阵A的每个元素,这并不是矩阵运算。

那在Python里面该如何实现矩阵的除法运算呢?

2 左除“\”→Ax=B

(1)当矩阵A是方阵,注:A的行和B的行相等

① 采用inv()函数,即:

A\setminus B=inv(A)*B

② 采用solve()函数,即:

A\setminus B=solve(A,B)

举例:

import numpy as np
A=np.array([[1,5,3],[4,8,6],[7,10,9]])
B=np.array([[6],[8],[10]])
inv_A=np.linalg.inv(A)
x_1=np.dot(inv_A,B)
x_2=np.linalg.solve(A,B)
print(f'A={A}')
print(f'B={B}')
print(f'x_1={x_1}')
print(f'x_2={x_2}')

运行结果:

A=[[ 1  5  3][ 4  8  6][ 7 10  9]]
B=[[ 6][ 8][10]]
x_1=[[-2.00000000e+00][-1.77635684e-15][ 2.66666667e+00]]
x_2=[[-2.00000000e+00][ 1.49213975e-15][ 2.66666667e+00]]

注:当A并不是方阵时,采用inv()和solve()会报错,无法求解。

(2)当A不是方阵,注:A的行和B的行相等

① 采用pinv()函数求解,即:

A\setminus B=pinv(A)*B

② 采用lstsq()函数求解:

语法:numpy.linalg.lstsq(A,B,rcond=“warn”)

  • A是一个M行N列的系数矩阵;
  • B是一个(M,)或者(M,K),如果b是一个M行K列的二维矩阵,函数会逐个计算每一列的最小二乘法;
  • rcond这个参数是可选的,是用于奇异矩阵的处理的,官方推荐我们一般用 rcond=None;
  • 返回值:返回值的第一个元素即为我们想要的结果,所以一般的用法是lstsq()[0];

举例说明:

import numpy as np
A=np.array([[1,8,5,6],[4,6,7,8],[9,10,12,14]])
B=np.array([[6],[8],[10]])
x_1=np.dot(np.linalg.pinv(A),B)
x_2=np.linalg.lstsq(A,B,rcond=None)[0]
print(f'A={A}')
print(f'B={B}')
print(f'x_1={x_1}')
print(f'x_2={x_2}')

运行结果:

A=[[ 1  8  5][ 4  6  7][ 9 10 12][ 4 10 14]]
B=[[ 6][ 8][10][ 9]]
x_1=[[0.32212839][0.68526414][0.08256129]]
x_2=[[0.32212839][0.68526414][0.08256129]]

3 右除"/"→xA=B

(1)B是方阵,注:A的列和B的列相等。

① 采用inv()函数实现,即:

B/A=A*inv(B)

② 采用solve()函数,即

B/A=solve(A^T,B^T)^T

举例:

import numpy as np
B=np.array([[1,5,3],[4,8,6],[7,10,9]])
A=np.array([6,8,10])
inv_B=np.linalg.inv(B)
x_1=np.dot(A,inv_B)
x_2=np.linalg.solve(B.T,A.T).T
print(f'A={A}')
print(f'B={B}')
print(f'x_1={x_1}')
print(f'x_2={x_2}')

运行结果:

A=[ 6  8 10]
B=[[ 1  5  3][ 4  8  6][ 7 10  9]]
x_1=[  6.66666667 -10.66666667   6.        ]
x_2=[  6.66666667 -10.66666667   6.        ]

(2)B不是方阵,注:A的列和B的列相等。

采用pinv()函数实现,即

B/A=B*A^-^1=B*pinv(A)

举例:

import numpy as np
B=np.array([[1,5],[4,8],[7,10]])
A=np.array([6,8])      #此时的A是(3,),是一维
A=A[:,np.newaxis].T    #此时的A是(3,1),是二维,必须是二维的才能用pinv()计算
print(f'A={A}')
print(f'B={B}')
x_1=np.dot(B,np.linalg.pinv(A))
print(f'A={A}')
print(f'B={B}')
print(f'x_1={x_1}')

运行结果(和matlab运行结果一样):

A=[[6 8]]
B=[[ 1  5][ 4  8][ 7 10]]
x_1=[[0.46][0.88][1.22]]

4 其它说明

① pinv能够求解方阵,只是运算代价更大一点;

② 设矩阵的行数为m列数为n,对于左除(A\B),当m≥n时,Python的求解结果和Matlab的求解结果一样;但是当m<n时,Python的求解结果不一样,原因是Matlab返回的解是尽可能多0值的解,Python返回得解是最小二乘解(范数最小)。不过这对于算法的应用区别不大,想返回何种解取决于实际问题,结果是否满足精度需求。


http://chatgpt.dhexx.cn/article/wmQv18NS.shtml

相关文章

Matlab:用矩阵的除法替代逆运算的操作(inv)

在matlab中直接用逆运算常常会提示&#xff0c;建议用矩阵的左除或右除替换&#xff0c;因为inv(A)*b速度更慢且准确度更低。 matlab中部分详细信息&#xff1a;为了求解线性方程组&#xff0c;矩阵的逆主要是理论值。 切勿使用矩阵的逆 &#xff0c;即 x inv(A)*b 来求解线性…

逆矩阵的概念、应用和求解

目录 逆矩阵的概念 求解逆矩阵 应用例子 可能没有逆矩阵 求解逆-方法1&#xff1a;初等行运算&#xff08;高斯&#xff0d;若尔当&#xff09; 求解逆-方法2&#xff1a;余子式、代数余子式和伴随 求解逆-方法3&#xff1a;程序库 逆矩阵的概念 矩阵运算中&#xff0c;…

利用矩阵的逆(伪逆)与除法求解

利用矩阵的逆&#xff08;伪逆&#xff09;与除法求解&#xff1a; 对于线性方程组Axb&#xff0c;若其为恰定方程组且A是非奇异的&#xff0c;则求x最明显的方法便是利用矩阵的逆&#xff0c;即xA\b;若不是恰定方程组&#xff0c;则可利用伪逆来求其一个特解。 运用pinv命令…

9、矩阵的简单运算

目录 一、矩阵的加减运算 二、矩阵的乘方运算 1.数与矩阵的乘法 2.矩阵与矩阵的乘法 三、矩阵的除法 四、矩阵的幂运算 五、矩阵元素的查找 六、矩阵元素的排序 七、矩阵元素的求和 八、矩阵元素的求积 九、矩阵元素的差分 一、矩阵的加减运算 进行矩阵加法、减法运…

矩阵的相乘与相除

这里写自定义目录标题 矩阵的数组乘/除及乘方参与除运算的两个矩阵同维时参与运算的矩阵有一个标量时数组乘方的运算规则Matlab的符号计算&#xff1a;Matlab画图 矩阵的数组乘/除及乘方 参与除运算的两个矩阵同维时 运算为矩阵相应的元素相除 参与运算的矩阵有一个标量时 …

矩阵乘法

两个矩阵可以相乘&#xff0c;必须满足的条件是&#xff1a;左边矩阵的列等于右边矩阵的行 如&#xff1a;一个3x4的矩阵和一个4x2的矩阵相乘&#xff0c;得到一个3x2的矩阵&#xff1b; 矩阵乘法函数&#xff1a; mat3 add(mat1 A,mat2 B){mat3 ans; for(int i0;i<s1;i)f…

算法——矩阵算法

目录 一.矩阵快速幂&#xff08;1&#xff09;矩阵定义&#xff08;2&#xff09;加法运算&#xff08;3&#xff09;减法运算&#xff08;4&#xff09;数乘&#xff08;5&#xff09;P3390 【模板】矩阵快速幂 二.矩阵求斐波那契数列三.[一个详解矩阵各种高难应用的博客] 一.…

python中的除法运算_python中矩阵除法运算的三种实现方法

介绍过python矩阵的乘法运算&#xff0c;numpy库中虽然乘法是矩阵运算的主要运算&#xff0c;但是numpy作为python中实现矩阵运算的好工具&#xff0c;也是可以轻松实现除法计算的&#xff0c;本文python中矩阵除法的三种实现方法&#xff1a;1、x/y计算对应元素相除(矩阵点除)…

矩阵算法之矩阵乘法

矩阵算法在图像处理、神经网络、模式识别等领域有着广泛的用途。 在矩阵乘法中&#xff0c;A矩阵和B矩阵可以做乘法运算必须满足A矩阵的列的数量等于B矩阵的行的数量。 运算规则&#xff1a;A的每一行中的数字对应乘以B的每一列的数字把结果相加起来。 定义 注意事项 1、当矩阵…

MATLAB数值计算——矩阵运算乘法、除法、乘方

一、矩阵 矩阵是线性代数的基本单元矩阵含有M行N列数值矩阵中的元素可以是实数或复数矩阵相关的基本运算&#xff1a;加、减、内积、逆矩阵、转置、线性方程式、特征值、特征向量、矩阵分解 二、矩阵的运算 2.1、矩阵的乘法运算 运算符&#xff1a; * %矩阵乘法 …

第三章 矩阵运算

矩阵运算 生成矩阵如何生成数值矩阵 如何生成复数矩阵矩阵变换矩阵求值矩阵的特征值和特征向量稀疏矩阵 矩阵是数组的一种表现形式。 生成矩阵 两种方式&#xff1a;1.枚举式直接赋值法。2.用函数 如何生成数值矩阵 1.实数矩阵输入规则 所有元素都要放在“[ ]”中&#xff1…

两个元素的矩阵乘除法

矩阵的乘除法&#xff1a; 1 矩阵相乘&#xff0c;两个矩阵只有当左边的矩阵的列数等于右边矩阵的行数时,两个矩阵才可以进行矩阵的乘法运算 主要方法就是&#xff1a;用左边矩阵的第一行&#xff0c;逐个乘以右边矩阵的列&#xff0c;第一行与第一列各个元素的乘积相加&#x…

线性代数代码实现(六)矩阵除法(C++)

前言&#xff1a; 距离上一篇文章发布已经五天过去了&#xff0c;在这里先给一直等待的伙伴们说声抱歉&#xff0c;因为博主最近的事情很多&#xff0c;只好暂时停更&#xff0c;望大家理解&#xff01;上一篇文章中&#xff0c;我们介绍了求解逆矩阵的方法&#xff0c;我提到&…

Comsol 2020全套教学视频 教程入门讲解新手的福音

本视频为官方中文教学视频&#xff0c;给各位想学仿真的同学提供一点福音。本培训视频共有59个视频&#xff0c;本分享提供了前4节基础强化视频&#xff0c;如有需要剩下的各个板块的内容请评论区留言。 百度云链接&#xff1a;https://pan.baidu.com/s/16CdQY77zJ2akNpJxNTlvO…

COMSOL中文指导教程全集

个人体会&#xff0c;学习COMSOL&#xff0c;案例教学最有效&#xff0c;首先从官方案例入手&#xff0c;然后是几何建模教程、网格划分教程、后处理教程&#xff0c;学完这四个部分你基本就入门了。再结合自己的研究方向多学几个案例&#xff0c;基本就可以熟练了。 最有用的…

COMSOL安装教程

点击安装包路径下的setup.exe文件。COMSOL5.2\COMSOL_Multiphysics_5.2-SSQ\COMSOL_5.2_DVD的 setup.exe 选择简体中文 选择新安装COMSOL 5.2 允许用户协议&#xff0c;将许可证格式修改为“许可证文件”&#xff0c;然后点击浏览载入安装包中“_SolidSQUAD_”目录下的“Coms…

comsol_multiphysics入门教程

COMSOL Multiphysics简介 COMSOL的起源:COMSOL最先是Matlab的一个工具箱(Toolbox)&#xff0c;叫做Toolbox 1.0。后来改名为Femlab 1.0(FEM为有限元&#xff0c;LAB是取用的Matlab)&#xff0c;这个名字也一直沿用到Femlab 3.1。 发展至今&#xff0c;COMSOL当前有一个基本模块…

COMSOL建立孔隙尺度多孔介质结构模型教程 AbyssFish

首先获取一张多孔介质图片&#xff0c;这里就以COMSOL官网教程图片为例了。 通过软件将png格式的图片转换为DXF格式文件&#xff0c;也就是AutoCAD支持的文件&#xff1a; 下一步打开COMSOL软件建立二维模型&#xff0c;导入事先准备好的dxf模型&#xff0c;需要注意导入选项…

comsol学习中心:定义与材料选择

显示选择 在几何选项中的选择栏的第一个。 创建显示选择&#xff0c;选择你要选择的几何&#xff0c;这样&#xff0c;被选择的几何就被包含在一个标签中。 注意这里非几何实体层选择的是域 同样的也可以添加空气的。 这样就可以在选择的时候直接根据标签选择&#xff0c;不…

Comsol Multiphysics安装步骤详解

安装步骤&#xff1a; 安装前先关闭杀毒软件和360卫士&#xff0c;注意安装路径不能有中文&#xff0c;安装包路径也不要有中文。 试装系统&#xff1a;win10 64bit 1.解压安装包。 2.双击打开镜像文件&#xff08;需要电脑安装有虚拟光驱&#xff0c;没有的可以下载ultrai…