MATLAB中pinv函数用法

目录

语法

说明

示例

使用伪逆求解线性方程组


        pinv的功能是得到矩阵的Moore-Penrose 伪逆。

语法

B = pinv(A)
B = pinv(A,tol)

说明

        B = pinv(A) 返回矩阵 A 的 Moore-Penrose 伪逆。

        B = pinv(A,tol) 指定容差的值。pinv 将 A 中小于容差的奇异值视为零。

示例

使用伪逆求解线性方程组

        比较通过反斜杠 (\) 和 pinv 求得的线性方程组的解。

        如果矩形系数矩阵 A 低秩,则使 norm(A*x-b) 最小化的最小二乘问题将有无限多个解。x1 = A\b 和 x2 = pinv(A)*b 返回两个解。这两个解具有以下特征:x1 只有 rank(A) 个非零分量,norm(x2) 是小于任何其他解的范数。

        创建一个 rank(A) = 3 的 8×6 矩阵。

A = magic(8); 
A = A(:,1:6) 
A = 8×6

    64     2     3    61    60     6
     9    55    54    12    13    51
    17    47    46    20    21    43
    40    26    27    37    36    30
    32    34    35    29    28    38
    41    23    22    44    45    19
    49    15    14    52    53    11
     8    58    59     5     4    62

为方程组的右侧创建一个向量。

b = 260*ones(8,1)
b = 8×1

   260
   260
   260
   260
   260
   260
   260
   260

        为右侧选择的数字 260 是 A 的 8×8 幻数和。如果 A 仍然是 8×8 矩阵,则 x 有一个解是由 1 组成的向量。如果只有六列,方程仍然是一致的,因此仍然存在解,但解并非全部由 1 组成。由于矩阵低秩,因此有无限多个解。

        使用反斜杠和 pinv 求两个解。

x1 = A\b
Warning: Rank deficient, rank = 3, tol =  1.882938e-13.
x1 = 6×1

    3.0000
    4.0000
         0
         0
    1.0000
         0

x2 = pinv(A)*b
x2 = 6×1

    1.1538
    1.4615
    1.3846
    1.3846
    1.4615
    1.1538

        从 norm(A*x1-b) 和 norm(A*x2-b) 仅存在舍入误差的意义上来说,这两个解都是精确的。解 x1 的特殊之处在于它只有三个非零元素。解 x2 的特殊之处在于 norm(x2) 小于其他任何解的对应值,包括 norm(x1)。

norm(x1)
ans = 5.0990
norm(x2)
ans = 3.2817

提示

  • 可以将应用于向量 b 的大部分 pinv(比如在 pinv(A)*b 中)替换为 lsqminnorm(A,b),以计算线性方程组的最小范数最小二乘解。lsqminnorm 通常比 pinv 更有效,而且还支持稀疏矩阵。

算法

        pinv 通过奇异值分解来形成 A 的伪逆。S 对角线上小于 tol 的奇异值被视为零,而 A 的表示变成:

        因此 A 的伪逆等于:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值