• 2019-08-31 16:43:38

1.对于方阵A，如果为非奇异方阵，则存在逆矩阵inv(A)

2.对于奇异矩阵或者非方阵，并不存在逆矩阵，但可以使用pinv(A)求其伪逆

若A为非奇异矩阵，请不要使用pinv求逆，虽然计算结果相同，即

inv( A ) = pinv( A )

但pinv的计算复杂度较高。

更多相关内容
• I am using Octave 3.8.1, a Matlab-like program. I'd like to generalize 1/x to the case where x may be a scalar or a matrix. Replacing 1/x with inv(x) or pinv(x) works for most x, except:octave:1> ....

I am using Octave 3.8.1, a Matlab-like program. I'd like to generalize 1/x to the case where x may be a scalar or a matrix. Replacing 1/x with inv(x) or pinv(x) works for most x, except:

octave:1> 1/inf

ans = 0

octave:2> pinv([inf])

ans = NaN

octave:3> inv([inf])

warning: inverse: matrix singular to machine precision, rcond = 0

ans = Inf

Should I convert NaN to 0 afterwards to get this to work? Or have I missed something? Thanks!

解决方案

The Moore–Penrose pseudo inverse, which is the basis for Matab and octave's pinv, is implemented via completely different algorithm than the inv function. More specifically, singular value decomposition is used, which require's finite-valued matrices (they also can't be sparse). You didn't say if your matrices are square or not. The real use of pinv is for solving non-square systems (over- or underdetermined).

However, you shouldn't be using pinv or inv for your application, no matter the dimension of your matrices. Instead you should use mldivide (octave, Matlab), i.e., the backslash operator, \. This is much more efficient and numerically robust.

A1 = 3;

A2 = [1 2 1;2 4 6;1 1 3];

A1inv = A1\1

A2inv = A2\eye(size(A2))

The mldivide function handles rectangular matrices too, but you will get different answers for underdetermined systems compared to pinv because the two use different methods to choose the solution.

A3 = [1 2 1;2 4 6]; % Underdetermined

A4 = [1 2;2 4;1 1]; % Overdetermined

A3inv = A3\eye(min(size(A3))) % Compare to pinv(A3), different answer

A4inv = A4\eye(max(size(A4))) % Compare to pinv(A4), same answer

If you run the code above, you'll see that you get a slightly different result for A3inv as compared to what is returned by pinv(A3). However, both are valid solutions.

展开全文
• 一、pinv()原型 函数形式：pinv(J, G, P)； 核心算法： 解释：G是正定矩阵，P是矩阵J的伪逆矩阵。当G为恒定常数时，以下等式成立： 函数原型： template<typename DerivedA, typename DerivedB, typename ...

## 一、pinv()原型

函数形式：pinv(J, G, P)；

核心算法：

解释：G是正定矩阵，P是矩阵J的伪逆矩阵。当G为恒定常数时，以下等式成立：

函数原型：

template<typename DerivedA, typename DerivedB, typename DerivedC>
void pinv(const MatrixBase<DerivedA>& J, const MatrixBase<DerivedB>&G, MatrixBase<DerivedC>& P)
{
MatrixXd J_temp(2, 2);
J_temp = J.transpose()*G*J;
P = (A_temp.inverse())*J.transpose()*G;
}


二、验证上述等式

直接上代码：

template<typename DerivedA, typename DerivedB, typename DerivedC>
void pinv(const MatrixBase<DerivedA>& A, const MatrixBase<DerivedB>&G, MatrixBase<DerivedC>& B)
{
//这里就是在算这个投影矩阵p，最后的结果用B输出来，这里的A就是那个Γ，这里的G就是那个G
MatrixXd A_temp(2, 2);
A_temp = A.transpose()*G*A;
B = (A_temp.inverse())*A.transpose()*G;

}

template<typename DerivedA, typename DerivedB>
void pinv2(const MatrixBase<DerivedA>& A, MatrixBase<DerivedB>& B) {
MatrixXd A_temp(2, 2);
A_temp = A.transpose()*A;
B = (A_temp.inverse())*A.transpose();
}

int main()
{
Vector2d ratio;
Matrix3d m_ratio;
MatrixXd projection(2, 3);
MatrixXd a(3, 2);
a<< 3,    0,
88,   0,
0,    1;

pinv2(a, projection);// 求a的伪逆矩阵projection
cout << "projection = " << endl << projection << endl << endl;

/*** 验证当G为任意常数时，pinv()等价于pinv2() **************************************/
MatrixXd projection2(2, 3);
Matrix2d G;
G << 5, 0，
0，5,;
pinv(a, G, projection2);
cout << "projection2 = " << endl << projection2 << endl;
}


打印结果如下：

当我们改变G是值的时候，打印结果依然不变，可以证明：

当G为恒定常数时，

## 三、上述pinv()算法是否与Matlab中的pinv()函数一样？

思路：我们以求b矩阵的伪逆矩阵为例，看看与在Matlab中调用pinv()所得结果是否一致。

	b << 1, 2, 3,
4, 5, 6,
0, 0, 1;


（1）首先利用我们前面介绍的算法，看看结果如何：

int main()
{
MatrixXd projection3(3, 3);
MatrixXd projection4(3, 3);
MatrixXd b(3, 3);
Matrix3d G;
G<< 50, 0，0,
0，50, 0,
0, 0, 50;
b << 1, 2, 3,
4, 5, 6,
0, 0, 1;

pinv2(b, projection3);
pinv(b, G, projection4);
cout << "projection3 = " << endl << projection3 << endl << endl;
cout << "projection4 = " << endl << projection4 << endl;
cout << "b.inverse() = " << endl << b.inverse() << endl;
}


我们顺便把b的逆矩阵也求出来了，结果为：

可以发现伪逆矩阵和逆矩阵结果是一样的。

（2）再看看在Matlab中的计算结果：

（3）结论

【1】可以发现Matlab计算出来的pinv(b)与前面的算法计算的结果一样。
所以，可以得出，我们写的pinv()函数与Matlab调用的pinv()是一样的。

【2】我们还可以发现，伪逆矩阵和逆矩阵也相同。有这样的一个结论：
当A矩阵是方阵，且可逆时，A的伪逆矩阵=A的逆矩阵。

展开全文
• matlab中pinv代码机器学习线性回归梯度下降 #Machine Learning Course Coursera作者：Andrew NG 它包含具有单变量和多变量的线性回归和梯度下降的矢量化实现。 它还包括通过正则方程法的解决方案。 #Regression...
• ## pinv(matlab 伪逆)

千次阅读 2021-01-27 07:42:02
老师给了一个程序，看到pinv的时候有点糊涂，“伪”逆矩阵到底什么意思啊。pinv(B)求的是矩阵B的Moore-Penrose逆，是B的一种广义逆，也就是你说的伪逆，该广义逆满足四个条件：A*B*A = A B*A*B = B A*B 是海森矩阵 B...

老师给了一个程序，看到pinv的时候有点糊涂，“伪”逆矩阵到底什么意思啊。

pinv(B)求的是矩阵B的Moore-Penrose逆，是B的一种广义逆，也就是你说的伪逆，该广义逆满足四个条件：A*B*A = A B*A*B = B A*B 是海森矩阵 B*A是海森矩阵。这个在.

打开Pinv函数，发现里面分情况讨论：若N>M；则共轭转置后再求解，否则使。

就是“伪”逆阵。求逆阵要求方阵嘛，这个可以对非方阵求逆。也就是说pinv(A)*A = I转置的原因就是要保证矩阵的行数不小于列数，这样使得转置是稳定且唯一的。我举.

opencv或者其它函数库中有类似matlab的pinv函数吗

有的

从数值计算的角度讲，大多数矩阵运算的复杂度都是O(n^3)(矩阵乘法的复杂度就是O(n^3))求伪逆的复杂度不超过求特征值和特征向量的复杂度，所以仍然是O(n^3)

谁能指导左除和pinv的在解方程组方面主要区别在那？自己好久了一直没弄明。

这个大体说来是采用的算法不同，左除采用的是高斯消元法，而pinv采用的是求伪逆的方法(里面具体怎么求的我不知道)进行的，区别应该就在这里吧

pinv是求矩阵的伪逆的函数 伪逆是对于非方阵和奇异矩阵来说的

想通过svd函数分解出的U、S、V自己编程实现求取奇异矩阵的广义逆矩阵，。

假定拟计算一般矩阵A的Moore-Penrose广义逆A+,1)对A做SVD:A = U S V， 其中 U, V为酉方阵， S为一般对角阵；2)将S非零元取逆， 零元不变， 然后专置得到一个一.

您好我有一个64*62的矩阵 我用matlab 里的pinv函数求完广义逆过后值变得非.

假定拟计算一般矩阵a的moore-penrose广义逆a+,1)对a做svd:a = u s v， 其中 u, v为酉方阵， s为一般对角阵；2)将s非零元取逆， 零元不变， 然后专置得到一个一般对.

inv代表逆，pinv是伪逆当一个矩阵不是满秩的时候，如果要求逆的话，只能用伪逆pinv来求了

使用pinv进行矩阵求逆是有效方便的，但是一直不明白pinv和inv函数的区别，此外matlab有时会显示警告信息，指出计算不需要求逆，使用符号“/”或“\”会避免求逆，.

在高等数学中没有关于这样的矩阵逆的求法，但在MATLAB中有关于这样矩阵的逆的求法，不过是叫求伪逆矩阵，是用函数命令pinv()进行计算.如A=[1;2];B=pinv(A)运行-.

奇异矩阵怎么用SVD求逆？matlab上用svd()分解成三个[U S V]，然后怎么.

既然是奇异矩阵就没有逆，只能求Moore-Penrose逆如果已经得到了[U, S, V] = svd(A)A的Moore-Penrose逆就是V*pinv(S)*U'当然要有特殊需求才会这样做，不然直接用pinv(.

矩阵论中的东西

逆矩阵： 当矩阵所形成的方程，称为矩阵方程，如ax=b. 其中：a为线性议程组的系数矩阵x为线性方程组的未知矩阵.而b为线性方程组的右端项矩阵(也称常数矩阵) 定义.

A是一个3行5列的矩阵，X和B是一个向量，A和B已知，用matlab编写程序求.

可以先通过X0 = A\B求得一个特解，然后调用XX = null(A)求得“零空间”的正交基(也就是基础解系)，最后可以得到原方程组的通解。

3 2 1 3 1 5 3 2 1 用这个(A|E)这个来求！！

这个矩阵不可逆，可以用matlab求其伪逆。 具体的伪逆形式不止一种，要根据你的实际情况来决定用哪种伪逆形式。 用matlab中pinv函数求出A的伪逆为X 0.1218 -0.0256.

超定方程 对于方程组Ax=b,A为n*m矩阵，如果A列满秩，且n>m。则方程组没有精确. 还可以用广义逆来求，即x=pinv(A)，所得的解不一定满足Ax=b,x只是知最小二乘意义.

SMI也可以~~~主要是 需要 零陷方向图~~

%%%LCMV在多个来波方向约束下波束形成%%%clc;clear all;close all;ima=sqrt(-1)；. %求信号相关矩阵R=pinv(Rx)； %相关矩阵求逆a1theta=exp(ima*2*pi*d_lamda*sin(.

可多加个条件|A|=|B|，就是只通过ri+krj这种初等行或列变换得到，应该可以不.

a,b相似，则存在可逆矩阵p，使得b=p^(-1)ap 则b*=(p^(-1)ap)*=p*a*(p^(-1))*=p*a*(p*)^(-1) 因此b*与a*相似

w=pinv(Y3'*Y3)*Y3'*train_y; M=(dbn.rbm{1,1}.W)'*(dbn.rbm{1,2}.W)'*(dbn.rbm{1.

1，首先定义了一个dog类，相当于javabean，用来存放和获取狗的名字和体重， 2， 从控制台分别输入4条狗的名字和体重 3，定义四条狗的对象，把2输入的4条狗的名字.

展开全文
• matlab中pinv代码#rl ##要点 在Simple Walker上使用S〜AC 使用Wouter的论文在Matlab中实现LWR（第III-C节） 在摆锤上尝试LWR〜AC 在Simple Walker上尝试LWR〜AC ===== ##使用模型要做的新点 将每个控制步骤的计划...
• matlab中pinv代码FasPI 概述 FastPI（Fast PseudoInverse）是一种用于计算现实世界优化问题使用的稀疏特征矩阵的伪逆的新颖方法。 基于观察到许多现实世界的特征矩阵稀疏且高度偏斜的事实，FastPI重新排序并...
• 对于方阵A，如果为非奇异方阵，则存在逆矩阵inv(A)对于奇异矩阵或者非方阵，并不存在逆矩阵，但可以使用pinv(A)求其伪逆inv：inv(A)*B实际上可以写成A\BB*inv(A)实际上可以写成B/A这样比求逆之后带入精度要高A\B=...
• 当输入的矩阵行数等于列数时 采用inv求矩阵的逆，即 Y=inv(X) 其中X为要求逆的矩阵，Y 为 X 矩阵的逆。 计算一个 3×3 矩阵的逆矩阵。 X = [1 0 2; -1 5 0;...pinv 将 A 小于容差的奇异值视为零。
• 2、matlab中广义伪逆的求法pinv(M)为求矩阵M的广义逆。3、MATLAB中e的意思matlab中的e则有不同的意思，如果e的前面没有系数，那么命令行的e则是未定义的不明字符。下面的例子也足够说明。如果前面有系数，且后面有...
• ## Matlab中的pinv和inv

千次阅读 2013-06-25 14:18:38
1.对于方阵A，如果为非奇异方阵，则存在逆矩阵inv(A) 2.对于奇异矩阵或者非方阵，并不存在逆矩阵，但可以使用pinv(A)求其伪逆
• 任意m*n矩阵的奇异值分解，c++语言实现
• matlab中pinv代码快速耐用PCA的IRCUR 这是Matlab的快速非凸鲁棒主成分分析（RPCA）算法的仓库，它被称为迭代鲁棒CUR（IRCUR）[1]。 为了正确显示数学符号，可能必须安装MathJax插件。 例如， 。 稳健的主成分分析 ...
• matlab中pinv代码使用说明 该代码优化了单个线圈的尺寸和位置，以提高多线圈匀场设置的匀场能力。 要求： 具有以下工具箱的Matlab Optimization_Toolbox statistics_toolbox distrib_computing_toolbox 火车数据 ...
• 对于奇异矩阵或者非方阵，并不存在逆矩阵，但可以使用pinv(A)求其伪逆 inv： inv(A)B 实际上可以写成A\B Binv(A) 实际上可以写成B/A 这样比求逆之后带入精度要高 A\B=pinv(A)B&amp;nbsp; A/B=Apinv(B) pinv： X=...
• 伪逆矩阵函数pinv伪逆矩阵的MATLAB定义.ppt(2)正交(QR)分解函数 将矩阵A分解为一个正交矩阵与另一个矩阵的乘积称为矩阵A的正交分解。 格式一：[Q, R]=qr(A) 功能：产生与A同维的上三角矩阵R和一个实正交矩阵或复归...
• matlab中pinv代码<使用L1范数惩罚进行颜色再现的光谱反射率重建的代码和数据> 计算色彩科学工具可以在中找到。 作者是斯蒂芬·韦斯特兰教授。 PRMLT是Chen mo博士为一书编写的matlab代码。 ===================...
• A\B=pinv(A)*B A/B=A*pinv(B) 可见，'\'用的是高斯消元法。 同时还查到： Square Matrices If A is symmetric and has real, positive diagonal elements, MATLABattempts a Cholesky factorization. If the ...
• I had a matrix D which is m*n and i am calculating the pseudo inverse using the formula inv(D'*D)*D' but it is not generating the same result as pinv(D).I need the term inv(D'*D) which i require for i...
• 1引言Matlab是一款高性能的数值计算和可视化软件，集成数值分析、矩阵计算、信号运算、信号处理和图形显示于一体，构成了一个方便的、界面友好的用户环境。目前，基于Matlab的语音识别开发平台虽然在可读性、可移植...
• matlab中pinv代码HR_BP_BLE_Android_Project 心率和血压监测系统 抽象的 在当今的情况下，医学与计算机科学与电子领域已尽可能地融合在一起，但是真正的挑战是将技术集成到设备，以使它们尽可能容易地被广大民众...
• matlab中pinv代码空间音频听力测试环境（SALTE）-音频渲染器 SALTE是一款听力测试软件，旨在帮助将来进行空间音频系统的研究和开发。 该工具由专用的音频渲染引擎组成，用于进行空间音频收听实验。 空间音频听力...
• matlab中pinv代码fea-1D-bar 用MATLAB编写的代码来解决FEA 1D线性条形元素问题 与其他贡献者一起创建为迷你项目： 大师普拉萨斯P 戴维·史密斯·孙达辛格 戈皮·卡西克（Gopi Karthick R） 脚本文件： Linear_bar_...
• 在了解逆和伪逆之前，我们先来了解一下是线性代数里面奇异矩阵和非奇异矩阵是什么。 首先，矩阵是方阵，即矩阵的行数和列数相等的矩阵。若行数和列数不相等，那就谈不上奇异矩阵和非奇异矩阵。 ...
• matlab中pinv代码企业资源计划 ERP方法的实现-精确重新分配伪逆方法 这是基于Johannes Stephan和Walter Fichter的论文的代码实现： 标题：“线性致动系统的快速精确重新分配伪逆方法” DOI：10.1109 / TCST.2017....
• matlab中pinv代码具有多个变量的线性回归 在这个项目，我们将使用多个变量实施线性回归以预测房屋价格。 该项目是的可选练习。 任务描述如下：假设您正在出售房屋，并且想知道一个好的市场价格。 实现此目的的一...
• (Note that MATLAB® uses 1 based indexing while Python uses 0 based indexing, [ 1 2 3; 4 5 6 ] array([[1.,2.,3.], [4.,5.,6.]]) mat([[1.,2.,3.], [4.,5.,6.]]) or mat("1 2 3; 4 5 6") 2x3 ...
• MATLAB中：左右除法、逆inv、广义逆pinv的区别

...

matlab 订阅