精华内容
下载资源
问答
  • 两种矩阵伪逆的方法
    千次阅读
    2021-04-20 03:10:33

    伪逆矩阵是逆矩阵的广义形式。由于奇异矩阵或非方阵的矩阵不存在逆矩阵,但在matlab里可以用函数pinv(A)求其伪逆矩阵。基本语法为X=pinv(A),X=pinv(A,tol),其中tol为误差,pinv为pseudo-inverse的缩写:max(size(A))*norm(A)*eps。函数返回一个与A的转置矩阵A' 同型的矩阵X,并且满足:AXA=A,XAX=X.此时,称矩阵X为矩阵A的伪逆,也称为广义逆矩阵。pinv(A)具有inv(A)的部分特性,但不与inv(A)完全等同。 如果A为非奇异方阵,pinv(A)=inv(A),但却会耗费大量的计算时间,相比较而言,inv(A)花费更少的时间。

    机器视觉中,finite camera的投影矩阵P为一个3*4,秩为3 的矩阵,矩阵P的伪逆如下:

    矩阵P的伪逆为:

    如果A列满秩,那么pinv(A)=(A'*A)^{-1}*A'。

    如果A行满秩,那么pinv(A)=pinv(A')'。

    如果秩亏损,那么只好先做奇异值分解A=UDV',U,V是正交阵,D是对角阵。

    然后取对角阵S,如果D(i,i)=0,那么S(i,i)=0,如果D(i,i)<0或者D(i,i)>0,那么S(i,i)=1/D(i,i)。于是pinv(A)=VSU'。

    -----------------------------------------------------------------------------------------------------------

    原文:https://blog.csdn.net/u014260892/article/details/38581175

    更多相关内容
  • c++调用matlab求伪逆

    2021-04-21 17:46:53
    plot为Matlab的画图函数,参见Matlab相关文档。 engEvalString(ep, "b=pinv(a);"); bb=engGetVariable(ep,"b"); mxArray2mat(bb,b); //cout(aa); //销毁mxArray数组xx和yy。 mxDestroyArray(bb); //cout !" (); ...

    #include

    #include

    #include "engine.h"

    #include "engine.h"

    #include

    #include "opencv2/highgui/highgui.hpp"

    #include

    #include

    using namespace cv;

    using namespace std;

    bool mat2mxArray(Mat imgSrc,mxArray* pMat)

    {

    if (!imgSrc.empty())

    {

    mxArray * pv;

    imgSrc = imgSrc.t();

    pv = mxCreateNumericMatrix(imgSrc.cols,imgSrc.rows,mxSINGLE_CLASS, mxREAL);

    memcpy(mxGetPr(pMat), imgSrc.data, mxGetNumberOfElements(pv)*sizeof(double));

    mxDestroyArray(pv);

    }

    else

    {

    printf("imSrc is empty! \n");

    return false;

    }

    }

    void mxArray2mat(mxArray* pMat,Mat &imgSrc)

    {

    memcpy(imgSrc.data,mxGetPr(pMat),mxGetNumberOfElements(pMat)*sizeof(double));

    imgSrc=imgSrc.t();

    }

    int calPinv(Mat a,Mat &b)

    {

    Engine *ep; //定义Matlab引擎指针。

    if (!(ep=engOpen(NULL))) //测试是否启动Matlab引擎成功。

    {

    cout <

    exit(1);

    }

    engSetVisible(ep,0); //不显示matlab窗口

    //定义mxArray,为1行,N列的实数数组。

    mxArray *aa = mxCreateDoubleMatrix(3,3, mxREAL);

    mxArray *bb=mxCreateDoubleMatrix(3,3,mxREAL);

    //memcpy(mxGetPr(aa), &a, 9*sizeof(double)); //将数组x复制到mxarray数组xx中。

    mat2mxArray(a,aa);

    //cout<

    engPutVariable(ep, "a",aa); //将mxArray数组xx写入到Matlab工作空间,命名为xx。

    engPutVariable(ep, "b",bb);

    //向Matlab引擎发送画图命令。plot为Matlab的画图函数,参见Matlab相关文档。

    engEvalString(ep, "b=pinv(a);");

    bb=engGetVariable(ep,"b");

    mxArray2mat(bb,b);

    //cout<

    mxDestroyArray(aa); //销毁mxArray数组xx和yy。

    mxDestroyArray(bb);

    //cout <

    //cin.get();

    engClose(ep); //关闭Matlab引擎。

    return 0;

    }

    int main()

    {

    Mat a=(Mat_(3,3) << 1,2,3,4,5,6,7,8,9);

    Mat b=a.clone();

    calPinv(a,b);

    cout<

    return 0;

    }

    展开全文
  • MATLAB】几种矩阵伪逆的方法

    千次阅读 2020-04-30 21:15:41
    几种矩阵伪逆的方法 A*x=y当A不可逆如何解x 求伪逆有五种方法,左右同时乘以A’,’chol()分解,qr() 分解,svd()分解和pinv()求伪逆,下面来比较一下哪个最优秀。 如果A是个355行3列的矩阵,经过计算,五个...

    几种求矩阵伪逆的方法

    A*x=y当A不可逆如何解x
    求伪逆有五种方法,左右同时乘以A’,’chol()分解,qr() 分解,svd()分解和pinv()求伪逆,下面来比较一下哪个最优秀。
    如果A是个355行3列的矩阵,经过计算,五个方式计算结果相同,对模型的拟合都是没有影响的。
    如果A是个355行12列的矩阵(更高维),那么根据我对数据的拟合,结果如下:

    深蓝线是数据,绿色的线是两边同时×A’,浅蓝色的线是pinv分解拟合出的模型,红线是qr拟合出的模型,黄线是svd分解拟合出的模型。这么浅显的看的话在高维下svd和两边同时×A’胜出,那么他们究竟谁更胜一筹,我们看一下第一范式,第二范式和Inf范式检验的结果:
    在这里插入图片描述

    可见在高维情况下是svd分解更胜一筹(范式结果低),低维下不要轻易用两边同时×A’,因为会出奇异矩阵警告。

    几种求伪逆的方法如下(matlab代码):

    result=(A'*A)\(A'*y) %两边同时乘A’
    result_pinv=pinv(A)*y %pinv
    
    %svd
    [U,S,V] = svd(A); 
     T=S;
     T(find(S~=0)) = 1./S(find(S~=0));
     svdInvA = V * T' * U';
     alpha_svd=svdInvA*y;
     
     %qr
     [Q,R] = qr(A);
    InvR =  inv(R'*R)*R';
    qrInvA =InvR*Q';
    alpha_qr=qrInvA*y;
    

    ————————————————

    原文链接:https://blog.csdn.net/qq_41448372/article/details/105742441

    展开全文
  • 伪逆法的matlab实现

    2013-07-16 16:49:52
    matlab实现的伪逆分类器。训练和测试部分都有。
  • 1.定义矩阵a 2.b,c b为a的线性无关的两列 ...3.b的左和c的右和右的具体见一下例题: 4.出结果即可 或者一步到位 有时候会出现小数,转变表达形式,敲入 format cat就会以分数输出结果 ...

    1.定义矩阵a在这里插入图片描述
    2.求b,c
    b为a的线性无关的两列
    c为a的行最简的线性无关的两行
    在这里插入图片描述
    3.求b的左逆和c的右逆

    左逆和右逆的具体见一下例题:
    在这里插入图片描述
    4.求出结果即可
    在这里插入图片描述
    或者一步到位
    在这里插入图片描述
    有时候会出现小数,转变表达形式,敲入
    format cat就会以分数输出结果

    展开全文
  • 主要内容:矩阵的逆、伪逆、左右逆矩阵的左逆与最小二乘左右逆与投影矩阵一、矩阵的逆、伪逆、左右逆1、矩阵的逆定义:设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=I。 则我们称B是A...
  • pinv(matlab 伪逆)

    千次阅读 2021-01-27 07:42:02
    pinv(B)的是矩阵B的Moore-Penrose逆,是B的一种广义逆,也就是你说的伪逆,该广义逆满足四个条件:A*B*A = A B*A*B = B A*B 是海森矩阵 B*A是海森矩阵。这个在.打开Pinv函数,发现里面分情况讨论:若N>M;则...
  • 伪逆矩阵函数pinv伪逆矩阵的MATLAB定义.ppt(2)正交(QR)分解函数 将矩阵A分解为一个正交矩阵与另一个矩阵的乘积称为矩阵A的正交分解。 格式一:[Q, R]=qr(A) 功能:产生与A同维的上三角矩阵R和一个实正交矩阵或复归...
  • matlab:inv,pinv逆与伪逆

    万次阅读 多人点赞 2017-03-11 16:42:25
    对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A)伪逆 inv: inv(A)*B 实际上可以写成A\B B*inv(A) 实际上可以写成B/A 这样比逆之后带入精度要高 A\B=pinv(A)*B  A/B=A*pinv(B) pinv: X=...
  • 这些函数专门用于在低秩的情况下执行运算
  • MATLAB pinv相比,伪逆有两个优点: - PINV 需要昂贵的 SVD - PINV 不适用于稀疏矩阵。 解 x 最小化残差 |Ax - b| 的 2-范数。 在欠定系统的情况下,即 rank(A) < length(x),pseudoinverse(A)*b 返回的解是...
  • I had a matrix D which is m*n and i am calculating the pseudo inverse using the formula inv... The matlab pinv command works for arbitrary D, even if the matrix has neither full row or full column rank.
  • 运动系统使用前向运动学的运动学原理,每个关节的角度都由逆运动学的伪逆雅各布运动所发现的关节速度来更新。 纸: link1: 具有反向运动学PD-伪反向Jacobian和正向运动学Denavit Hartenberg的机器人操纵器控制...
  • MATLAB与线性代数--逆矩阵与伪逆矩阵

    千次阅读 2020-03-25 13:38:06
    MATLAB与线性代数:矩阵求解方程组的解
  • matlab逆光光盘代码水族馆 该存储库包含论文的实现 F. Schirrmacher、C. Riess 和 T. Köhler,“成像问题的自适应分位数稀疏图像 (AQuaSI) 先验”,IEEE 计算成像交易,第一卷。 6,第 503-517 页,2020,doi:10...
  • 求伪逆的五种方法比较

    千次阅读 2020-04-24 23:54:27
    求伪逆有五种方法,左右同时乘以A’,’chol()分解,qr() 分解,svd()分解和pinv()求伪逆,下面来比较一下哪个最优秀。 如果A是个355行3列的矩阵,经过计算,五个方式计算结果相同,对模型的拟合都是没有影响的...
  • matlab之逆(inv)与伪逆(pinv)

    千次阅读 2020-03-24 11:11:50
    在了解逆和伪逆之前,我们先来了解一下是线性代数里面奇异矩阵和非奇异矩阵是什么。 首先,矩阵是方阵,即矩阵的行数和列数相等的矩阵。若行数和列数不相等,那就谈不上奇异矩阵和非奇异矩阵。 奇异矩阵 奇异矩阵的...
  • 采用inv矩阵的,即 Y=inv(X) 其中X为要求的矩阵,Y 为 X 矩阵的。 计算一个 3×3 矩阵的矩阵。 X = [1 0 2; -1 5 0; 0 3 -9] X = 3×3 1 0 2 -1 5 0 0 3 -9 Y = inv(X) Y = 3×3 0.8824 -0.1176 0.1961...
  • SVD求解矩阵伪逆过程 首先对矩阵A进行SVD分解得到U, D, V三个矩阵,其中D为列矩阵,是从上到下,由大到小排列的A矩阵的奇异值。 若D矩阵中元素个数为n则原矩阵有n个奇异值,构建大小为V.cols() * U.cols()的S...
  • mis = V .* conj(Ybus * V) - Sbus; F = [ real(mis([pv; pq])); imag(mis(pq)) ]; [dSbus_dVm, dSbus_dVa] = dSbus_dV(Ybus, V); j11 = real(dSbus_dVa([pv; pq], [pv; pq])); j12 = real(dSbus_dVm([pv;...
  • 即使实验数据具有正态分布,代谢通量分析也可以从测量的... Moore-Penrose 伪逆看起来不错,但我们无法证明伪逆在大多数情况下是否真的存在,因此此代码具有 Tikhonov 正则化,在正则伪逆不存在的几种情况下很有用。
  • det 计算数组行列式 >> A=[1 2 3;4 5 9;8 7 6] A = 1 2 3 4 5 9 8 7 6 >> det(A) ans = 27 inv 计算矩阵的 A = 1 2 3 4 5 9 8...
  • 实值矩阵的 Moore-Penrose 伪逆的 1 级更新函数
  • 该工具箱包含实现拉普拉斯金字塔 (LP) 分解 [1] 和 [2] 中的新重建方法的 Matlab 文件。 主要功能是分别用于LP分解和重构的LPD和LPR。 脚本 LPDEMO 提供了如何使用工具箱中的主要功能的示例。 特征: + 可以处理...
  • 最近在做波达方向的估计的研究,其中涉及到了奇异矩阵的,直接通过matlab中的pinv()和inv()计算得到的结果误差较大,于是就诞生了这篇文章,当然,全文并非全部原创。奇异矩阵的求逆主要有三种方法:直接求解...
  • 使用迭代方法矩阵伪逆

    热门讨论 2011-01-27 22:06:52
    return the pseudoinverse of A using iterative method.
  • 全阶矩阵A的求逆运算inv(A) 和稀疏矩阵B(阶数和a一样)的求逆运算inv(B)是不是采取一样的方法啊?也就是说他们的计算量是不是一样的啊?不会因为是稀疏矩阵就采取特殊的方法来处理求逆吧?我电脑内存256M ,做4096*...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,743
精华内容 1,097
关键字:

matlab求伪逆

matlab 订阅