一直很喜欢两个老爷爷,一个是MIT主讲线性代数的Gilbert Strang,另一个就是Matlab的首席数学科学家Cleve Moler。记得作者在几年前,下载了他个人主页上的两本书。一本叫《Numerical Computing with MATLAB》,另外一本叫《Experiments with MATLAB》。当时研究了一下,就没了下文,近来我又把他的《Experiments with MATLAB》翻出来看了一下,虽然网上也有中文版,但我还是勉强的啃着英文看。

这两天看到了书中的一篇文章,讲的是MATLAB解方程组Ax=b时最常用的反斜杠“\”。现在我打算把他的这篇文章翻译一下,分享给大家,中间可能会补充一些自己的东西。

两个数的平均值等于3,请问这两个数分别是多少?请记住你脑子里蹦出的两个数,我们会在这一章的结尾讨论这个问题。

我们先从一个非常简单的线性方程说起,一个未知数,一个方程。

求:

很明显答案是:

现在我们常数换成代数,试求解:

得到:

方程有唯一解

那么如果a=0呢?这就要看b了。如果b不等于0,那么也就没有任何x能满足:

因此,方程无解

那如果换成b=0呢,如果b=0,那么任何x都可以满足方程:

也就是说,方程有无穷多个解。数学家们已经对“如何判断方程是否有解?”和“如果有解,那么解是否唯一?”这两个问题讨论了几个世纪了。我们马上就会看到,那些令数学家们讨论了几个世纪的问题,对于今天的工程计算依然依然继续着。

买水果问题:

爱丽丝买了3个苹果,12个香蕉和1个香瓜,总共花了2.36美元。鲍勃买了12个苹果和2个香瓜,总共花了5.26美元。卡罗买了2个香蕉和3个香瓜,总共花了2.77美元。请问,这三种水果的单价是多少?

我们用未知数,分别表示苹果,香蕉和香瓜的单价。并把上述的文字描述用方程的方式分别表示出来,得到一个三元一次方程组:

然后,我们再用一个矩阵右乘一个未知数列向量的方式来表示上述的三元一次方程组:

这就是我们最常见的,也是最熟悉:

其中,A代表了3x3矩阵,x和b分别是两个3x1的列向量。b也叫right hand side。

一般而言,如果你是一个对于矩阵运算比较了解的人,那么你会马上想到用A的逆矩阵来解方程,即:

但是,这种解法虽然能用,但并不是一个好的想法,事实上我们不需要求出A的逆,也能求出方程的解x。

比如说,假设你是一个对矩阵计算完全不了解的人,基于前面求解一元一次方程ax=b的解法,你可能会想到这么算:

从线性代数本身的理论出发,很遗憾,你不能这么算,你不能除一个矩阵。但在Matlab中,你可以这也用。

我们先输入3x3的系数矩阵A,Matlab命令如下:

A = [3 12 1; 12 0 2; 0 2 3]

Matlab会输出如下结果:

接下来我们把方程组的右边b也输进去:

b = [2.36 5.26 2.77]'

输出:

现在,在Matlab中求解Ax=b,就可以使用反斜杠“\”操作符了:

这就好像是让等式Ax=b左右两边都除以A,得到:

苹果0.29美元一个,香蕉0.05美元一个,香瓜0.89美元一个。

斜杠(除号)与反斜杠(反除号):

对于我们最开始的一次方程7x=21而言,我们可以用反斜杠的方式表示解:

其实,我们也可以用斜杠写成:

当然这也是我们最常用的表达方式。当然,不论是正除还是反除,他们的结果一样,都是3。

对于矩阵的运算也一样:大多数情况下,我们求解的线性方程组都可以表示成

的形式。

但在某些特殊情况下,我们的线性方程组会表示成

对于这种情况的线性方程组,我们在求解的时候就不再使用反斜杠“\”了,而是直接使用斜杠“/”

有时候,A\bb/A被分别称为矩阵的左除和右除,不论哪一种除法,矩阵A都是分母。

奇异矩阵singular matrix:

现在我们把前面的买水果问题做一点小小的调整。假设,卡罗同样用2.77美元,买了6个苹果和1个香瓜。则,原始的矩阵A变成:

而原来的矩阵右边b不变:

乍一眼看上去,这组方程和原来的方程比变化不大,只是A的最后一行方程发生了改变:

如果你继续用

来求解这个方程的话,你会发现MATLAB会做出如下提示:

其中,-InfInf分别表示正负无穷大,这是由于在计算的过程中遇到了除0的情况。而NaN指的是“Not-a-Number”,这是因为在计算的时候遇到了无穷大的数。

究其原因是因为,卡罗购买的水果和所花的钱和爱丽丝,鲍勃购买的水果,以及他们所花的钱,出现了冲突。

卡罗购买的水果品种和鲍勃一样,数量只有鲍勃的一半,但他花的钱却不等于鲍勃的二分之一。 鲍勃的一半是2.63而不是现在的2.77。矩阵A种的第三行等于第二行的一半,而方程右端b的第三个数不是第二个数的一半。这种不合理性,直接导致了Ax=b的解不存在。

如果是一半呢?

现在我们把鲍勃的花销改成跟卡罗的花销一致,也就是维持矩阵A不变,把b改成:

这样一来我们最后的两个方程就变成下面这个样子了:

而这两个方程其实可以用一个方程来表示,多出来的一个并没有提供更多的性息。

现在我们试着用反斜杠来解一下这个方程组:

系统报错了,说A是奇异矩阵(并不是所有奇异矩阵MATLAB都不能求解),MATLAB解不了这个方程,我们只能自己手动求解了!

在解这种方程组时,我们应该牢记,对于奇异矩阵A而言,他的全部解等于一个特解加上一个任意实数乘以零空间

上图中的笔记有误,把“最终得到:Ax=b的解”改成“最终得到:Ax=b的解”,同时,在上面的求解步骤中,我还使用了Matlab的另外一个函数null()来求解A的零空间也就是Ax=0的解

Matlab code:

close all
clear all
% J27,2022/08/22
%% BackSlash
%Alice buys three apples, a dozen bananas, and one cantaloupe for $2.36.
%Bob buys a dozen apples and two cantaloupes for $5.26. Carol buys two
%bananas and three cantaloupes for $2.77. How much do single pieces of
%each fruit cost?
A=[3 12 1;12 0 2;0 2 3]
b=[2.36 5.26 2.77]'x=A\b%% Forward Slash
x=b'/A'%% Inconsistent Singular matrix
%Assume now that Carol buys six apples and
%one cantaloupe for $2.77.A=[3 12 1;12 0 2;6 0 1]
b=[2.36 5.26 2.77]'x=A\b%% Consistent matrix
% The source of the difficulty is that the new information about Carol’s purchase
% is inconsistent with the earlier information about Alice’s and Bob’s purchases. We
% have said that Carol bought exactly half as much fruit as Bob. But she paid 2.77
% when half of Bob’s payment would have been only 2.63. The third row of A is equal
% to one-half of the second row, but b(3) is not equal to one-half of b(2). For this
% particular matrix A and vector b, the solution to the linear system of equations
% Ax = b does not exist.
% What if we make Carol’s purchase price consistent with Bob’s? We leave A
% unchanged and revise b withb(3)=2.63%% one partiluar solution
U=rref([A b])%% Let x(3) = 0,solve Ax=b
Achange = [3 12 0;12 0 0;6 0 0]
Xp=[2.63/6 (2.36-2.63/2)/12 0]'
A*Xp%% calc Null space of A
z=null(A,'r')
A*z%% general solution of Ax=0
t=rand
Xn=t*z%% Ax=b的通解等于Ax=b的特解 + Ax=0的通解
x=Xn+Xp
A*x

补充部分:

这里我也把求解Ax=0和Ax=b的全部过程写了下来:

解Ax=0:

在求解Ax=0时,我们要注意Ax=0的解等于高斯消元后的矩阵Rx=0的解,也就是说,高斯消元(行与行之间的消元)不改变A的零空间。

解Ax=b:

(全文完)

作者 --- 松下J27

格言摘抄:

《长歌行》

青青园中葵,朝露待日晞。
阳春布德泽,万物生光辉。
常恐秋节至,焜黄华叶衰。
百川东到海,何时复西归?
少壮不努力,老大徒伤悲!

鸣谢(参考文献):

1,《Experiments with MATLAB》 - Cleve Moler

(*配图与本文无关*)

版权声明:所有的笔记,可能来自很多不同的网站和说明,在此没法一一列出,如有侵权,请告知,立即删除。欢迎大家转载,但是,如果有人引用或者COPY我的文章,必须在你的文章中注明你所使用的图片或者文字来自于我的文章,否则,侵权必究。 ----松下J27

Matlab --- 求解Ax=b时的反斜杠“\“,backslash相关推荐

  1. 用Xshell连接Linux系统时输入反斜杠成W

    场景 使用XShell连接Ubuntu Server 时输入换行符即右斜杠时变成W. 实现 XShell-文件-属性-外观-字体名 将字体名改为Courier New

  2. python 添加绝对路径时用反斜杠和正斜杠的区别

    #使用绝对路径 双反斜杠 with open('E:\\use\\data.txt') as file_object: contents = file_object.read() print(cont ...

  3. matlab 求解 Ax=B 时所用算法

    x = A\B; x = mldivide(A, B); matlab 在这里的求解与严格的数学意义是不同的, 如果 A 接近奇异,matlab 仍会给出合理的结果,但也会提示警告信息: 如果 A 为 ...

  4. matlab ax=b x=,matlab 求解 Ax=B 时所用算法

    Weblogic是瓦特?和JVM是瓦特关系? 所谓固定内存60M是瓦特? 以下内容是个瓦特? "总内存大小=堆内存+非堆内存1200m:为堆内存大小,如果不指定后者参数则有最大数限制,网上很 ...

  5. matlab输出斜杠,MATLAB中的反斜杠运算符用于向量

    正如其他人所说,这个系统是不确定的(正如丹尼斯所说的那样).由于你有一些后续问题,让我进一步深入. 在A中有一行,你基本上有一个等式,有7个未知数.你基本上可以将任何6个未知数设置为零,然后求解为7. ...

  6. 正斜杠 “/” 与反斜杠 “\”辨析

    文章目录 1. 正斜杠 /// 2. 反斜杠 \\backslash\ 3. 正斜杠与反斜杠的区别 4. 注意 注意,/// 为正斜杠(forward slash),而 \\backslash\ 为反 ...

  7. Python : 反斜杠

    使用python写字符串常量时,raw string是个很好用的东东,比如在C里我要写一个Windows下的路径,得这么 写: char *path = "C:\\mydir\\myfile ...

  8. python 字符串结束符_python字符串以反斜杠结尾

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! eol while scanning string literal解析器似乎可以 ...

  9. 【20221205】Windows系统反斜杠(倒斜杠 \ )和 Linux系统正斜杠(斜杠 / )

    /撇是正斜杠,\捺是反斜杠(Windows单词的第一笔,即字母W的第一笔,就是反斜杠). 1.单正斜杠(斜杠/)和双正斜杠(//) 1.1 在linux系统中的路径分隔符 ../表示上一级路径 ./表 ...

最新文章

  1. Linux的init进程(内核态到用户态的变化)
  2. Python-OpenCV——亮度和对比度
  3. 编译android源码遇到错误及其解决方法
  4. listview异步加载图片
  5. 微服务太分散?使用Fundebug集中式bug监控
  6. MySQL-06:pyMySQL增删改查基本命令笔记
  7. PHP header的一些用法
  8. localhost可以访问 ip不能访问_为啥用 ip 不可以访问知乎,而百度却可以?
  9. 2019-4-21 - plan
  10. 设计模式—工厂模式(思维导图)
  11. 金融行业数据仓库分层
  12. mysql删除字段sql语句_删除字段的sql语句是什么
  13. 树莓派3自带了wifi
  14. elementui进度条如何设置_Progress 进度条
  15. wii模拟器linux版,Dolphin模拟器_Dolphin模拟器最新版下载[Wii模拟器]-下载之家
  16. 什么是超级立方体,HyperCube
  17. 攻防世界mfw--详细笔记
  18. Redis 9种数据结构
  19. windows10拦截广告设置
  20. Office 365 IT Professional—— 如何将Office 365中的文档同步到客户端,加强协同管理

热门文章

  1. GMOS6803为7频段高精度RTK系统应用桥梁监测
  2. java屏蔽游戏中骂人的话,替换为*,屏蔽敏感词汇
  3. 容器与Servlet生命周期
  4. GIS基础(1)空间参考
  5. 好强的英语句法(看了这些想不过四六级都难~~~)
  6. python画图小猪佩奇_python绘图 -- 小猪佩奇源码分享
  7. (python 作业)线性回归预测房价
  8. python之季节调整(调用x12a和x13as)
  9. ASM - TreeApi Method组件和接口简介
  10. windows+vscode配置C++环境