虚反矩阵指令pinv之应用

简介: pinv指令     在多数解的例子中,有时并不是仅要将其中一变数设定为零之解。为使整个系统得到最佳化,亦可利用pinv指令求得最小模组之合理解。pinv(A)又称为虚反矩阵(pseudoinverse),其功能与反矩阵之计算相同,但它会基于svd(A)函数(或称奇异值分解函数)之计算方式,求得一个不是属于全阶之矩阵A之反矩阵。

pinv指令
     在多数解的例子中,有时并不是仅要将其中一变数设定为零之解。为使整个系统得到最佳化,亦可利用pinv指令求得最小模组之合理解。pinv(A)又称为虚反矩阵(pseudoinverse),其功能与反矩阵之计算相同,但它会基于svd(A)函数(或称奇异值分解函数)之计算方式,求得一个不是属于全阶之矩阵A之反矩阵。这是长方形矩阵求解时,在多重解中求其反矩阵之折衷方式。故若矩阵A为方矩阵或非零矩阵,则其结果应与inv(A)相同。只是在这样的状况,宁可使用inv(A)较为省事。处理这些长方矩阵或特异矩阵时,使用pinv(A)会有意想不到的效果。其解法是根据反矩阵法:

A=[3 2 1; 10 -25 5];

C=[5000 2000]';

>> T=inv(A)*C

Error using inv

inv Matrix must be square.

>> T=pinv(A)*C

 

T =

 

   1.0e+03 *

 

    1.2039

    0.4852

    0.4180

  上面之例因为A不是方形矩阵,故求其反矩阵时会有错误的信息,但若用虚反矩阵指令pinv,反而相安无事,这是将T1、T2以其馀一变数T3表示之情况下,求得其最小平方之组合。其结果是否合用则端视问题之限制与应用而定。 PINV(A,TOL) 之指令後面另有参数TOL,可以输入容许值。其预设值为MAX(SIZE(A)) * NORM(A) * EPS(class(A)),读者可参考手册之说明,以了解其使用方法。

 

inv与pinv的区别

对于非奇异且不接近奇异的方阵两个命令输出结果相同,但是对于接近奇异的矩阵使用两个命令结果却不同,

1.对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A)
2.对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A)求其伪逆

 

Matlab中的‘\ ’和‘/’和pinv的关系以及运算

  当A是N阶方阵B为N行的列向量时,X=A\B就是线性方程组A*X=B的解,算法是用高斯消去法。A\EYE(SIZE(A))产生的是方阵A的逆矩阵。

  如果A是M*N的矩阵且M≠N,B是跟A行数(M行)相同的列向量时,X=A\B是非满秩的线性方程组A*X=B的解系,A的秩K由QR分解得出。如果K<N通常结果与PINV(A)*B不等(PINV(A)是求A的广义逆矩阵)。 A\EYE(SIZE(A))得到的是A的广义逆矩阵。

 

  总而言之,A\B就是求A*X=B的解,你可以看作是A的逆矩阵,只不过是广义逆矩阵,这样A不是方阵也可以计算的。

 

  至于A/B,在解线性方程组上比\少用一些,因为通常都把B写成列向量,所以用反除\就可以了。用/的话,B通常是行向量。

可以把B/A看作是X*A=B的解,这里B的列数等于A的列数。

 

A\B=pinv(A)*B 

A/B=A*pinv(B)

可见,'\'用的是高斯消元法。

相关文章
西门子S7-1200的转换指令、取整和截取指令、上取整和下取整指令、标定和标准化指令,各参数的含义是什么?
西门子S7-1200中的转换指令包括转换指令、取整和截取指令、上取整和下取整指令、标定和标准化指令。
西门子S7-1200的转换指令、取整和截取指令、上取整和下取整指令、标定和标准化指令,各参数的含义是什么?
|
1月前
矩阵转换
【10月更文挑战第30天】矩阵转换。
25 3
|
7月前
|
算法 测试技术 C#
【数学 排列组合】1643. 第 K 条最小指令
【数学 排列组合】1643. 第 K 条最小指令
|
算法 Java
算法-矩阵置零
算法-矩阵置零
|
7月前
|
算法 前端开发 测试技术
3033. 修改矩阵
3033. 修改矩阵
39 0
|
7月前
|
存储 JavaScript
MATLAB实战 | 求矩阵指数、预定义变量i和j的含义以及梯形积分法
MATLAB实战 | 求矩阵指数、预定义变量i和j的含义以及梯形积分法
177 0
MATLAB实战 | 求矩阵指数、预定义变量i和j的含义以及梯形积分法
|
C++ 计算机视觉
【OpenCv • c++】形态学技术操作 —— 开运算与闭运算
【OpenCv • c++】形态学技术操作 —— 开运算与闭运算
473 0
|
资源调度 PyTorch 算法框架/工具
pytorch 如何生成指定位置、尺度参数的随机高斯矩阵,并指定这个随机矩阵的形式
在上述代码中,我们使用 torch.normal(mean=mu, std=sigma, size=(m, n)) 函数直接生成了一个形状为 (m, n) 的随机高斯矩阵 data,其中 mean 参数指定了均值,std 参数指定了标准差。 需要注意的是,与 torch.randn() 不同,torch.normal() 生成的是具有指定均值和标准差的高斯分布,因此生成的随机矩阵不一定是标准正态分布。如果需要生成标准正态分布随机矩阵,可以将 mean 参数设置为 0,std 参数设置为 1。
1195 1
|
算法 数据安全/隐私保护 计算机视觉
m基于FPGA的8点DCT变换verilog实现,包含testbench,并对比matlab的计算结果
m基于FPGA的8点DCT变换verilog实现,包含testbench,并对比matlab的计算结果
286 0
|
PyTorch 算法框架/工具
输入一个一行张量,如何转换成概率?
将一行张量转换为概率分布的常见方法是使用 softmax 函数。softmax 函数的作用是将一个向量映射到一个新的向量,其中每个元素都在 0 到 1 之间,并且所有元素的和等于 1。因此,可以将 softmax 函数应用于一行张量,以将其转换为概率分布。
217 0