求解Ax=b
一 线性方程组 Ax=b 的解释
线性方程组 Ax=b,其中矩阵 A 尺寸为 m*n, 当 A 为方正时,可使用消元法判断解是否存在并求解。当 A 为长方形矩阵时,同样可使用消元法判断解存在情况并求解。
线性方程组 Ax=b 可以使用不同观点看待:
1)可看作函数 f(x)=b,即输入任意 n 维向量 x,经过矩阵 A 变换处理,输出 m 维向量 b,即向量 b 由向量 x 通过矩阵 A 线性变换得到;
2)令
,
,Ax=b 可表示为
,
进一步改写得
,
当 b 是矩阵 A 列向量
的线性组合时,或者 b 在矩阵 A 列空间时,Ax=b 可解,否则 Ax=b 不可解;
3)当矩阵 A 存在左逆 B 时,BA=I,则有 BAx=Bb,x=Bb;当矩阵A存在右逆 C 时,AC=I, 则有 Ax=ACb,x=Cb;
求解线性方程组转换为求矩阵 A 是否存在左逆或者右逆,以及其逆是否唯一;
4)当向量
满足
时,则向量
位于矩阵 A 的零空间,令
为 Ax=b 的一个特解,则有
成立,也即 Ax=b 的解为
;
二 矩阵 A 的四个子空间
考虑矩阵 A 为 m*n,该矩阵由 n 个 m 维列向量构成,
1)对 n 个列向量进行任意线性组合
, 其中
为任意实数序列,则向量 a 构成的集合为矩阵 A 的列空间,表示为 C(A);
2)对 m 个行向量进行线性组合
,其中
为任意实数序列,则向量 b 构成的集合为矩阵 A 的行空间,表示为
;
3)求解 Ax=0,解 x 构成的集合为矩阵 A 的零空间,表示为 N(A);矩阵 A 的行空间与矩阵 A 的零空间为
下相互正交的子空间;
观察方程组 Ax=0 表示为矩阵 A 每一行与向量 x 点积为零,则任意行空间中向量与任意零空间中向量点积为零,表明两个子空间正交;
4)求解
,解 y 构成的集合为矩阵 A 的左零空间,表示为
;矩阵 A 的列空间与矩阵 A 的左零空间为
下相互正交的子空间;
观察方程组
表示为向量 y 与矩阵 A 的每一列点积为零,则任意左零空间的向量与任意列空间中的向量点积为零,表明两个子空间正交;
以上给出矩阵 A 的四个子空间,通过高斯消元法将矩阵 A 化为 U(反向消元可进一步化为 R),可以得到矩阵 A 的四个子空间的维度,以及各个子空间的基。
下面通过一个矩阵实例求解矩阵各个子空间得维度与基。
设矩阵
,使用高斯消元法得
,
消元中间变量
,
,
同样,对于长方形矩阵,A=LU 成立。观察矩阵列,可以清楚主元位于列一与列三上,即矩阵得秩等于 2。同样,观察矩阵行,只有两行非零向量。
由于矩阵消元是针对矩阵 A 上各行得线性变换,则矩阵 U 的行空间与矩阵 A 的行空间一致,则
的一组基即为
,
为
下的二维子空间。
矩阵 A 的零空间 N(A) 定义为方程组 Ax=0 的解,矩阵消元后 Ux=0 的解与 Ax=0 一致,则 Ux=0 的特解为 N(A) 的一组基,
,N(A) 为
下的二维子空间。
矩阵 A 的列空间 C(A) 的一组基为矩阵 A 上对应的主元列,由于 Ax=0 与 Ux=0 有相同解,则矩阵 A 中的列与矩阵 U 中的列使用相同的线性组合得到零向量,
故矩阵 U 上列的相关性也同样表现了矩阵 A 上列的相关性,但没有构成同一个列空间。矩阵 U 上主元所在列是线性不相关,则矩阵 U 上主元对应的矩阵 A 上的列也线性不相关。
C(A) 的一组基为
,C(A) 为
上的二维子空间。
矩阵 A 的左零空间
隐藏在矩阵消元过程中,EPA=U,U 中最后一行为零向量,满足
,
则
的一组基对应于 EP 矩阵 的最后一些元素
,
为
上的一维子空间。
三 求解 Ax=b
求解矩阵
,
通过高斯消元得
,
当 向量 b 满足
时,方程 Ax=b 有解,否则,方程无解。
任意满足
的向量 b 构成矩阵 A 的列空间,由于列空间与左零空间正交,则关系式的系数表示矩阵 A 的做了空间的基向量。
当向量 b 不满足
时,向量 b 不在矩阵 A 的列空间中,方程组无解。
当向量 b 满足
时,向量 b 在矩阵 A 的列空间中,方程组有一个或多个解,此时需要考虑矩阵 A 的秩r:
1)当矩阵 A 的秩小于 4 时,方程组存在自由变量,方程组存在许多解,其解构成 4-r 维子空间;
2)当矩阵 A 的秩等于 4 时,方程组不存在自由变量,方程组仅有一个解;当前矩阵的秩最大为3,故不可能只有一个解。
下面选择一个满足条件
的向量 b=(1,5,5),通过消元得到:
,
为自由变量,解得
,
将解写成向量形式为:
,由于
为自由变量,将其提取到出来,可整理为:
;
可以发现 Ax=b 的解由矩阵 A 的零空间加上 Ax=b 的特解组成,其特解为设置自由变量为零求解方程组得到。以下给出方程组求解的一般流程:
1)设置
求解 Ax=0 得
;
2)设置
求解 Ax=0 得
;
3)设置
求 Ax=b 特解得
;
4)方程组最终解为
,其解空间表示矩阵 A 的零空间平移
所构成的超平面。
四 矩阵 A 的逆
当矩阵为方阵时,只有矩阵的秩r等于矩阵行与列时,方阵的逆存在;
当矩阵为 m*n 长方形矩阵时,当行满秩 r=m 时,矩阵列生成一个完整的
空间,任意线性方程组有解求不唯一。则以下 m 个线性方程组
均有解,其解构成了矩阵 A 的右逆
。
由于每个方程组解不唯一,所以其右逆也不唯一,每一个右逆可求解一个方程组解。
当列满秩 r=n 时,矩阵列无法生成完整的
空间,只有向量 b 位于列空间时才有唯一解。然而矩阵行生成了整个
空间,以下 n 个线性方程组
均有解,其解构成了矩阵 A 的左逆
。
以上方程组解也不唯一,所以其左逆也不唯一,所以左逆与方程组解并不一一对应。
对于长方形矩阵,如果存在行满秩或者列满秩时,可以通过以下方法构造逆矩阵:
当 r=m 时,
;
当 r=n 时,
。
参考资料 Linear Algebra And Its Applications Gilbert Strang
求解Ax=b的更多相关文章
- matlab 求解 Ax=B 时所用算法
x = A\B; x = mldivide(A, B); matlab 在这里的求解与严格的数学意义是不同的, 如果 A 接近奇异,matlab 仍会给出合理的结果,但也会提示警告信息: 如果 A 为 ...
- python求解ax² + bx + c = 0
系数需满足条件: a,b不能同时为0 b2-4ac≠0 代码如下def quadratic(a, b, c): """ 返回ax² + bx + c = 0的 " ...
- 介绍求解AX=b:可解性与解的结构
前面用高斯消元法或矩阵LU分解求解线性方程组的解,主要是针对有唯一解(矩阵A可逆)的情况,下面进一步介绍线性方程组有多个解的情况下,解的求解.
- MIT线性代数:8.求解Ax=b,可解性和结构
- MIT线性代数:7.主变量,特解,求解AX=0
- 【原创】开源Math.NET基础数学类库使用(06)直接求解线性方程组
本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...
- POJ 3243 Clever Y (求解高次同余方程A^x=B(mod C) Baby Step Giant Step算法)
不理解Baby Step Giant Step算法,请戳: http://www.cnblogs.com/chenxiwenruo/p/3554885.html #include <iostre ...
- 开源Math.NET基础数学类库使用(06)数值分析之线性方程组直接求解
原文:[原创]开源Math.NET基础数学类库使用(06)数值分析之线性方程组直接求解 开源Math.NET基础数学类库使用系列文章总目录: 1.开源.NET基础数学计算组件Math.NET(一) ...
- 使用MTL库求解最小二乘解
最小二乘计算最优解不管是哪个行业肯定都用到的非常多.对于遥感图像处理中,尤其是对图像进行校正处理,关于控制点的几种校正模型中,都用到最小二乘来计算模型的系数.比如几何多项式,或者通过GCP求解RPC系 ...
随机推荐
- Linux sudo 找不到命令
普通用户执行需要root权限的命令,提示"找不到命令",但是root用户执行该命令不报错,可能是由于该命令未处在sudo搜索的路径. 本文以sudo easy_install 为例 ...
- Python常用功能函数系列总结(三)
本节目录 常用函数一:词频统计 常用函数二:word2vec 常用函数三:doc2vec 常用函数四:LDA主题分析 常用函数一:词频统计 # -*- coding: utf-8 -*- " ...
- Nacos配置管理最佳实践
Nacos一个最常用的功能就是配置中心,在具体使用时往往是多个团队,甚至整个公司的研发团队都使用同一个Nacos服务.那么使用时如何保证配置在各个团队之间的隔离,又能保证配置管理的便捷性?下面就来介绍 ...
- 【从小白到专家】 Istio专题之七:30分钟讲透Istio访问与控制
本文为Istio系列专题之七--Istio访问与控制.Istio通过身份认证.授权.多重安全策略,来保证微服务的安全,实现代码无侵入性.有时我们需要对微服务间的相互访问进行控制,比如满足某些条件的微服 ...
- JAVA SOCKET 详解
概述 本人在开发学习NETTY的过程中,需要了解很多的网络开发知识,在此我总结一些关于socket的基础知识,大部分是网络总结,在此篇的随笔中记录socket的知识,以便于记录,如有问题欢迎大家斧正. ...
- session反序列化
先来了解一下关于session的一些基础知识 什么是session?在计算机中,尤其是在网络应用中,称为"会话控制".Session 对象存储特定用户会话所需的属性及配置信息.这样 ...
- 如何获取Repeater行号(索引)、记录总数?
Repeater控件想必搞ASP.NET开发的人,基本上都到了用的炉火纯青的地步了.今个又吃了懒的亏,翻了好几个项目的代码都没找到如何获取Repeater记录总数的代码来,又Google了半天难得从老 ...
- 【Vue源码学习】响应式原理探秘
最近准备开启Vue的源码学习,并且每一个Vue的重要知识点都会记录下来.我们知道Vue的核心理念是数据驱动视图,所有操作都只需要在数据层做处理,不必关心视图层的操作.这里先来学习Vue的响应式原理,V ...
- rsync.sh
#!/bin/bash file1=`du -sm /var/www/vhosts/|awk '{print $1}'` ps=`ps -C rsync --no-header|wc -l` if [ ...
- python03day
回顾 pycharm简单使用 while循环 结构 pass while实现打印1-2+3-4+--+99 格式化输出:针对str,让字符串中某些位置变为动态可传入的 % s str d digist ...