找回密码
 注册
Simdroid-非首页
查看: 178|回复: 8

matlab 求解方程组 A*x=b 用 x=A\b 和 x=inv(A)*b 为何计算结果不同

[复制链接]
发表于 2013-9-5 01:18:45 | 显示全部楼层 |阅读模式 来自 法国
本帖最后由 newdiver 于 2013-9-6 21:31 编辑

求解方程组 A*x=b
用 x=A\b  和 x=inv(A)*b 两种试了
为何计算结果不同

谢谢大家回复,A是n*n矩阵,b大小是1*n,用上面两种方法算出来结果相差6%。
A的特征值我也用det(A)算了结果是inf,这样算是可逆的吗
对于一个具体n*n的矩阵,怎样判断他是否可逆呢

点评

方便的话把A和b以附件的形式传上来吧。  发表于 2013-9-12 21:50
发表于 2013-9-5 03:02:48 | 显示全部楼层 来自 英国
Simdroid开发平台
1. \是左除,所以应该是x = A\b
2. 绝大多数情况下不推荐用inv().

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2013-9-5 03:29:58 | 显示全部楼层 来自 法国
nwcwww 发表于 2013-9-5 03:02
1. \是左除,所以应该是x = A\b
2. 绝大多数情况下不推荐用inv().

对的,是我写错了
为什么不推荐呢

点评

而且就效率来讲,直接左除也比求逆再相乘高些。  发表于 2013-9-5 10:56
左除不要求矩阵可逆,也适用于奇异矩阵  发表于 2013-9-5 08:21
回复 不支持

使用道具 举报

发表于 2013-9-5 16:28:40 | 显示全部楼层 来自 台湾
两者算法不同, 结果及适用处当然有些微不同
\适用范围较广些, 採最小二乘方误差, 可适用於非方矩阵, 但inv只能是方矩阵

不明白LZ所谓"为何计算结果不同"的含意!?
个人水平有限, 由LZ两种都试了, 猜测为方矩阵
但既然是方矩阵, 结果应该是相同的(算法不同造成些微不同)
希望澄清下

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2013-9-5 21:36:02 | 显示全部楼层 来自 加拿大
x=inv(A)*b 只适用于 A 为可逆方阵。但是对于 欠定 (方程个数< 未知数个数, 即A的行数 > 列数) 和超定 (方程个数 > 未知数个数, 即A的行数 < 列数)方程组,就不能使用 inv 了,但是可以用 x = A\b 求解最小二乘解。这个问题实际上 matlab help 里有详细解释。

help \

>> help \
\   Backslash or left matrix divide.
    A\B is the matrix division of A into B, which is roughly the
    same as INV(A)*B , except it is computed in a different way.
    If A is an N-by-N matrix and B is a column vector with N
    components, or a matrix with several such columns, then
    X = A\B is the solution to the equation A*X = B
. A warning
    message is printed if A is badly scaled or nearly singular.
    A\EYE(SIZE(A)) produces the inverse of A.

    If A is an M-by-N matrix with M < or > N and B is a column
    vector with M components, or a matrix with several such columns,
    then X = A\B is the solution in the least squares sense to the
    under- or overdetermined system of equations A*X = B
. The
    effective rank, K, of A is determined from the QR decomposition
    with pivoting. A solution X is computed which has at most K
    nonzero components per column. If K < N this will usually not
    be the same solution as PINV(A)*B.  A\EYE(SIZE(A)) produces a
    generalized inverse of A.

点评

Yes!  发表于 2013-9-6 07:37

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2013-9-6 21:35:28 | 显示全部楼层 来自 法国
winner245 发表于 2013-9-5 21:36
x=inv(A)*b 只适用于 A 为可逆方阵。但是对于 欠定 (方程个数< 未知数个数, 即A的行数 > 列数) 和超定  ...

对于一个具体n*n的矩阵,怎样判断它是可逆矩阵呢
我用det(A)算,结果是inf,应该不是奇异矩阵吧
奇异矩阵是det(A)=0

哪里说错了还请大家纠正
回复 不支持

使用道具 举报

发表于 2013-9-7 19:24:03 | 显示全部楼层 来自 加拿大
本帖最后由 winner245 于 2013-9-7 23:05 编辑
newdiver 发表于 2013-9-6 21:35
对于一个具体n*n的矩阵,怎样判断它是可逆矩阵呢
我用det(A)算,结果是inf,应该不是奇异矩阵吧
奇异矩阵 ...

你说得没错,奇异或非奇异矩阵首先是针对方阵而言,在方阵的前提下,如果行列式为0就为奇异矩阵,否则,为非奇异矩阵。

det(A) = Inf 说明行列式非0,所以,至少在数学上,逆矩阵是一定存在的。因为 Inf 在matlab里只是一个很大的数,是自然界一个可以量化的数值,并非真正的 无穷大。只不过,因为 Inf 的出现,matlab可能无法(或者无法精确)求出其逆矩阵,但也未必一定不能。下面我举个例子,matlab能算的情形:
  1. A = diag([exp(700),exp(700)]);
  2. det(A)
  3. inv(A)
复制代码
ans =

   Inf


ans =

  1.0e-304 *

    0.9860         0
         0    0.9860

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2013-9-11 19:16:54 | 显示全部楼层 来自 LAN
winner245 发表于 2013-9-7 19:24
你说得没错,奇异或非奇异矩阵首先是针对方阵而言,在方阵的前提下,如果行列式为0就为奇异矩阵,否则,为 ...

如果是行列式值是-Inf呢,还有逆矩阵吗
回复 不支持

使用道具 举报

发表于 2013-9-11 23:32:40 | 显示全部楼层 来自 加拿大
newdiver 发表于 2013-9-11 19:16
如果是行列式值是-Inf呢,还有逆矩阵吗

会有啊,比如:
  1. A = diag([exp(700),-exp(700)]);
  2. det(A)
  3. inv(A)
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-22 10:44 , Processed in 0.073398 second(s), 21 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表