0

我在matlab中有一个简单的问题。我有等式: A*H=b 我知道 A 和 b 我尝试使用这个表达式:

H=A\b;

但我得到错误的值:例如:

       A =

       231   481
       233   488
       241   481
       243   489
b =

    11    31
     6    20
    21    31
    18    22

我得到

H =

    1.1627    0.2713
   -0.5396   -0.0791

所以

A*H

ans =

    9.0386   24.6299
    7.5868   24.6189
   20.6659   27.3434
   18.6745   27.2532

这不是 b

4

2 回答 2

1

help slash命令提示符下键入:

\ 反斜杠或左除法。

A\B 是 A 到 B 的矩阵除法,与 INV(A)*B 大致相同,只是计算方式不同。如果 A 是 N×N 矩阵且 B 是具有 N 个分量的列向量,或具有多个此类列的矩阵,则 X = A\B 是方程 A*X = B 的解。警告消息是如果 A 缩放不良或几乎是奇异的,则打印。A\EYE(SIZE(A)) 产生 A 的倒数。

如果 A 是具有 M < 或 > N 的 M×N 矩阵,并且 B 是具有 M 个分量的列向量,或具有多个此类列的矩阵,则 X = A\B 是最小二乘意义上的解方程组 A*X = B 的欠定或超定系统。A 的有效秩 K 由带旋转的 QR 分解确定。计算出每列最多有 K 个非零分量的解 X。如果 K < N,这通常不是与 PINV(A)*B 相同的解决方案。A\EYE(SIZE(A)) 产生 A 的广义逆。

因此,第二段适用于您的情况。换句话说,没有什么H可以满足A*H = b您的问题,但 Matlab 会计算出它的最佳近似值(在最小二乘意义上)。所以你得到的结果是正确的。

于 2012-08-19T19:05:21.430 回答
-1
h = b ./ A;

h = 0.0476    0.0644
    0.0258    0.0410
    0.0871    0.0644
    0.0741    0.0450

A.*h = 11    31
        6    20
       21    31
       18    22

或者,您可以添加.到您的部门,即h = A .\ b

于 2012-08-19T17:07:40.293 回答