精华内容
下载资源
问答
  • MATLAB矩阵压缩函数squeeze

    千次阅读 2016-09-08 20:08:40
    matlab中squeeze函数用于删除矩阵中的维数为1的维(只适用于维数大于2的矩阵l,),比如执行下面的代码,随机产生一个1x2x3的矩阵A,然后squeeze(A)将返回一个2x3的矩阵,将第一维却掉(因为第一位大小为1): ...

     

     

    matlab中squeeze函数用于删除矩阵中的维数为1的维(只适用于维数大于2的矩阵l,),比如执行下面的代码,随机产生一个1x2x3的矩阵A,然后squeeze(A)将返回一个2x3的矩阵,将第一维却掉(因为第一位大小为1):

    A=rand(1,2,3)

    squeeze(A)

     

     

     

    又比如产生随机产生一个3x1x1x2的矩阵,在调用squeeze函数,第二维和第三维将去掉,结果是一个2维矩阵:

     A=rand([3 1 1 2])

    squeeze(A)

     

     

     

     

     

    展开全文
  • MATLAB求解矩阵函数

    2020-11-16 16:29:16
    MATLAB求解矩阵函数0. 说明1. 矩阵函数介绍2. 矩阵函数求解方法2.1 例子介绍2.2 jordan标准型法2.3 最小多项式法2.4 两种方法计算结果相同3. 一般矩阵运算函数不可用4. 矩阵函数求解函数funm()5. 多多点赞关注,多多...

    0. 说明

    这里的 1-2 节涉及到矩阵函数的一般求法。

    第 3 节演示了为什么不能用普通的运算函数求矩阵函数。

    第 4 节介绍了MATLAB内置的矩阵函数求解函数。

    如果赶时间,直接看第 4 节即可!!!

    1. 矩阵函数介绍

    直接查看百度百科吧,我也说不太清楚:矩阵函数

    总的来说,矩阵函数的求解方式和一般的标量方式不一样。

    常用的矩阵函数有:

    1. exp(A)
    2. log(A)
    3. sin(A)
    4. cos(A)
    5. sinh(A)
    6. cosh(A)

    MATLAB内置的求解方案也只能求解这6类矩阵函数

    2. 矩阵函数求解方法

    2.1 例子介绍

    这里以矩阵:在这里插入图片描述

    为例,求解其矩阵函数 sinA。求解方案在百度百科里面有两种。

    2.2 jordan标准型法

    1. 求出A的jordan标准型 J 和伴随矩阵 P
      在这里插入图片描述
      可以看到其特征值 λ1 = λ2 = λ3 = 2;

    2. 计算需要的标量函数值

    我们的函数是 f(z)=sinz。根据jordan矩阵和特征值,我们知道需要 f(2) 和 f‘(2)来构造f(J).

    在这里插入图片描述

    1. 根据公式构造 f(J)
      在这里插入图片描述
    2. 根据 f(J) 和 P 计算矩阵函数
      在这里插入图片描述

    2.3 最小多项式法

    1. 求矩阵的最小多项式
      在这里插入图片描述
      可以看到,最小多项式为 m=x²-4x+4=(x-2)²,有两个相同的特征根。

    2. 计算需要的标量函数值

    我们的函数是 f(z)=sinz,根据定理需要计算 f(2) 和 f’(2),和上面jordan求法相同。
    在这里插入图片描述

    1. 计算构造量C0和C1

    令 g(λ) = C0+C1*λ (根据定理,f 与之相同)

    则,f(2)=g(2)=C0+2C1 f’(2)=g’(2)=C1;

    f(2)和f’(2)上文已经求出,所以由此可以解出C0和C1:
    在这里插入图片描述

    1. 根据定理直接构造 f(A)

    很简单,f(A)=C0I+C1A,如下:
    在这里插入图片描述

    2.4 两种方法计算结果相同

    3. 一般矩阵运算函数不可用

    刚开始我以为MATLAB普通的运算符会直接为我们计算矩阵函数,实际上并不是这样。

    我们的例子是 sin(A),这里试一下:
    在这里插入图片描述
    显然,这里是直接对每个元素求sin,不符合我们的要求。

    4. 矩阵函数求解函数funm()

    步入正题。这里才是MATLAB内置的函数矩阵的求解函数:funm()

    官方文档介绍如下:
    在这里插入图片描述
    意味着可以计算常用函数的矩阵函数,调用形式也比较清楚。

    我们将其应用到我们的例子中,得到了正确结果:
    在这里插入图片描述
    注:求exp和log也有专有的expm和logm函数,效果和funm一样。

    5. 多多点赞关注,多多交流

    展开全文
  • 矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积。常见的矩阵分解有可逆方阵的三角(LU)分解、任意满秩矩阵的正交三角(QR)分解、对称正定矩阵的Cholesky分解,以及任意方阵的Schur分解、...
        

    矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积。常见的矩阵分解有可逆方阵的三角(LU)分解、任意满秩矩阵的正交三角(QR)分解、对称正定矩阵的Cholesky分解,以及任意方阵的Schur分解、Hessenberg分解、EVD分解、SVD分解、GMD分解等。

    (1) 可逆方阵的LU分解

    矩阵的LU分解就是将一个矩阵表示为一个交换下三角矩阵和一个上三角矩阵的乘积形式。线性代数中已经证明,只要方阵A是非奇异的(即可逆的),LU分解总是可以进行的。

    当L为单位下三角矩阵而U为上三角矩阵时,此三角分解称为杜利特(Doolittle)分解。当L为下三角矩阵而U为单位上三角矩阵时,此三角分解称为克劳特(Crout)分解。显然,如果存在,矩阵的三角分解不是唯一的。

    (PS:方阵A可唯一地分解为A=LDU(其中L,U分别为单位下,上三角矩阵,D为对角矩阵)的充分必要条件为A的前n-1个顺序主子式都不为0。特别:对n阶对称正定矩阵,存在一个非奇异下三角矩阵L,使得A=LL'成立。)

    MATLAB提供的lu函数用于对矩阵进行LU分解,其调用格式为:

    [L,U]=lu(X):产生一个上三角阵U和一个变换形式的下三角阵L(行交换),使之满足X=LU。注意,这里的矩阵X必须是方阵。

    [L,U,P]=lu(X):产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PX=LU。当然矩阵X同样必须是方阵。 

    (2) 满秩矩阵的QR分解

    对矩阵X进行QR分解,就是把X分解为一个正交矩阵Q和一个上三角矩阵R的乘积形式。QR分解只能对方阵进行。MATLAB的函数qr可用于对矩阵进行QR分解,其调用格式为:

    [Q,R]=qr(X):产生一个一个正交矩阵Q和一个上三角矩阵R,使之满足X=QR。

    [Q,R,E]=qr(X):产生一个一个正交矩阵Q、一个上三角矩阵R以及一个置换矩阵E,使之满足XE=QR。 

    (3) 对称正定矩阵的Cholesky分解

    如果矩阵X是对称正定的,则Cholesky分解将矩阵X分解成一个下三角矩阵和上三角矩阵的乘积。设上三角矩阵为R,则下三角矩阵为其转置,即X=R'R。MATLAB函数chol(X)用于对矩阵X进行Cholesky分解,其调用格式为:

    R=chol(X):产生一个上三角阵R,使R'R=X。若X为非对称正定,则输出一个出错信息。

    [R,p]=chol(X):这个命令格式将不输出出错信息。当X为对称正定的,则p=0,R与上述格式得到的结果相同;否则p为一个正整数。如果X为满秩矩阵,则R为一个阶数为q=p-1的上三角阵,且满足R'R=X(1:q,1:q)。

    (4) 任意方阵的Schur分解

    任意一个n阶方阵X可以分解为X=URU',其中U为酉矩阵,R为上三角schur矩阵且其主对角线上的元素为X的特征值。

    [U,R]=schur(X)

    (5) 任意方阵的Hessenberg分解

    任意一个n阶方阵X可以分解为X=PHP', 其中P为酉矩阵, H的第一子对角线下的元素均为0,即H为Hessenberg矩阵。

    [P,H]=hess(X)

    (6) 任意方阵的特征值分解EVD

    任意一个n阶方阵X可以分解为XV=VD,其中D为X的特征值对角阵,V为X的特征向量矩阵。

    [V,D]=eig(X)

    [V,D]=eig(X,Y)计算广义特征值矩阵D和广义特征值向量矩阵V,使得XV=YVD。

    (7)任意矩阵的奇异值分解SVD

    任意一个m*n维的矩阵X可以分解为X=USV',U,V均为酉矩阵,S为m*n维的对角矩阵,其对角线元素为X的从大到小排序的非负奇异值。

    [U,S,V]=svd(X)

    (8) 任意矩阵的几何均值分解GMD

    任意矩阵m*n维的矩阵X可以分解为X=QRP', Q,P均为酉矩阵,R为k*k维的实正线上三角矩阵,其主对角线元素均等于X的所有K个正奇异值的几何均值,k=rank(X)。

    (PS: 一个n × n的实对称矩阵 M 是正定当且仅当对于所有的非零实系数向量z,都有 zTMz > 0。其中zT 表示z转置

    对于复数的情况,定义则为:一个n × n埃尔米特矩阵 M 是正定的当且仅当对于每个非零的复向量z,都有z*Mz > 0。其中z* 表示z共轭转置。由于 M埃尔米特矩阵,经计算可知,对于任意的复向量zz*Mz必然是实数,从而可以与0比较大小。因此这个定义是自洽的。正定方阵M的所有的特征值 λi都是正的。

    展开全文
  • Matlab 调用opencv函数

    千次阅读 2019-05-25 22:06:15
    Matlab 调用opencv函数前期准备例子 前期准备 使用matlab2018a和vs2015(先安装),网上一般将mex -setup作为第一步。首先在matlab命令行窗口(不需要考虑文件路径)输入mex –setup。出现 这里是警告,可以忽略。...

    Matlab 调用opencv函数

    前期准备

    使用matlab2018a和vs2015(先安装),网上一般将mex -setup作为第一步。首先在matlab命令行窗口(不需要考虑文件路径)输入mex –setup。出现
    在这里插入图片描述
    这里是警告,可以忽略。网上有的博客说,MATLAB和vs安装的先后顺序将影响使用,通过下面方法https://blog.csdn.net/xiamentingtao/article/details/77981336,可以解决问题不用重新安装。我是一次成型,没有验证真假。

    例子

    写一个例子,matlab调用vs程序进行矩阵运算。
    在这里插入图片描述
    先上代码后解释
    (1) 建立1个test.cpp

    #include <iostream>
    #include "mex.h"
    #include "opencv2/opencv.hpp"
    
    using namespace std;
    using namespace cv;
    void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
    {
        Mat mat1,mat2,mat3;
       /*输入1*/
        double *data;
        int M,N; 
        data=mxGetPr(prhs[0]);//获取矩阵首地址
        M=mxGetM(prhs[0]); //获取行
        N=mxGetN(prhs[0]);//获取列
        mat1 = Mat::zeros(M, N, CV_32FC1);
        for(int j=0;j<N;j++) 
            for(int i=0;i<M;i++) 
                mat1.at<float>(i,j)=data[j*M+i];
        /*输入2*/
        data=mxGetPr(prhs[1]);
        M=mxGetM(prhs[1]); 
        N=mxGetN(prhs[1]);
        mat2 = Mat::zeros(M, N, CV_32FC1);
        for(int j=0;j<N;j++) 
            for(int i=0;i<M;i++) 
                mat2.at<float>(i,j)=data[j*M+i];  
         /*计算*/
        mat3=mat1*mat2;
        /*输出1*/
        plhs[0]=mxCreateDoubleMatrix(mat3.rows,mat3.cols,mxREAL);//创建想要输出矩阵大小
      	data=mxGetPr(plhs[0]);
        for (int j=0;j<mat3.cols;j++)
            for (int i=0;i<mat3.rows;i++)
                data[j*mat3.rows+i]=mat3.at<float>(i,j);
    }
    
    

    下面是分析过程
    mexFunction内部有4个输入参数,假设在matlab中写[a,b]=test(c,d,e),那么
    nlhs=2,代表输入数量
    plhs[0]相当于a,plhs[1]相当于b
    nrhs=3,代表输出数量
    prhs[0] 相当于c,prhs[1] 相当于d,prhs[2] 相当于e,
    plhs与prhs是以指针的形式在记录数据,所以要明白矩阵结构体等指针存放数据原则,这里以矩阵为例,mxGetPr获取矩阵的首地址,矩阵按列放入指针中,其余信息可以参照注释。其他接口规范可以参考https://www.cnblogs.com/haoyul/p/5606720.html

    (2) 编译test.cpp生成test.mexw64文件。在test.cpp所在文件夹下目录下,在命令行窗口输入

    >> mex test.cpp -I"E:\opencv2.4.9\build\include" -I"E:\opencv2.4.9\build\include\opencv" -I"E:\opencv2.4.9\build\include\opencv2" -L"E:\opencv2.4.9\build\x64\vc12\lib" -lopencv_calib3d249 -lopencv_contrib249 -lopencv_core249 -lopencv_features2d249 -lopencv_flann249 -lopencv_gpu249 -lopencv_highgui249 -lopencv_imgproc249 -lopencv_legacy249 -lopencv_ml249 -lopencv_nonfree249 -lopencv_objdetect249 -lopencv_ocl249 -lopencv_photo249 -lopencv_stitching249 -lopencv_superres249 -lopencv_ts249 -lopencv_video249 -lopencv_videostab249
    

    下面是分析过程:
    这里mex为编译指令,test.cpp为编译文件,–I"E:\opencv2.4.9\build\include" -I"E:\opencv2.4.9\build\include\opencv" -I"E:\opencv2.4.9\build\include\opencv2"要给工程添加包含目录,-L"E:\opencv2.4.9\build\x64\vc12\lib"添加库目录,我的opencv在"E:\opencv2.4.9"下,这两步相当于在opencv在vs中配置环境,见下图。
    在这里插入图片描述
    后面那一些-lopencv_calib3d249,相当于添加附加依赖项,见下图
    在这里插入图片描述
    (3) 在matlab命令窗下执行,命令行窗口所在路径下应有test.mexw64文件

    a=[1,2,3;4,5,6]
    b=[1;2;3]
    c=test(a,b)
    
    展开全文
  • MATLAB对于矩阵函数的使用

    千次阅读 2019-08-31 14:35:41
    MATLAB对于矩阵的使用 1.单位矩阵 eye(n)生成n*n的单位矩阵 eye(n,m)生成n*m的单位矩阵 eye(size(B))生成与B同样大小的单位矩阵 2、全1矩阵 ones (n) 生成n*n的全1矩阵 ones (n,m) 生成n*m的全1矩阵 ones(size...
  • MATLAB调用eemd函数

    万次阅读 多人点赞 2019-07-16 15:18:06
    #MATLAB调用EEMD 函数 一般情况添加eemd.m和extrema.m到主函数的同一个文件夹就可直接调用了。 eemd.m中是英文注释,解释该函数各个参量的意义以及如何取值。 function allmode=eemd(Y,Nstd,NE) Y为输入,待分解...
  • matlab2017调用c++函数

    2019-08-24 15:11:10
    众所周知,matlab提供了很多有用的函数,平时最常用的就是它的画图函数(plot、stem等),本次有如下...1、创建cpp文件,该文件名后面将作为matlab调用c++函数时使用的函数名; 2、cpp中include头文件<mex.h&g...
  • matlab调用c++函数

    千次阅读 2017-01-17 10:59:18
    首先要明白调用c代码,需要用到MEX,他主要和matlab的主要接口,接口的主要入口为如下函数: void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) nlhs:输出参数数目 (Left-handside
  • matlab 稀疏矩阵常用函数

    千次阅读 2014-05-19 21:05:38
    基本稀疏矩阵  spdiags :生成稀疏带状矩阵  speye :单位稀疏矩阵  sprand :随机稀疏矩阵  sprandn :正态分布的随机稀疏矩阵  sprandsym:生成稀疏对称随机矩阵    满阵和稀疏矩阵的转换  find :...
  • Matlab调用C语言函数

    千次阅读 2012-05-20 22:54:51
    如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数: double add(double x, double y) { return x + y; } 现在我想要在Matlab中使用它,比如输入: >> a = add(1.1, 2.2)  3.3000 要得出以上...
  • 调用normrnd函数生成1000行3列的随机数矩阵x,其元素服从均值为75,标准差为8的正态分布(1)代码(2)运行效果2. 调用normrnd函数生成1000行3列的随机数矩阵x,其各列元素分别服从不同的正态分布(1)代码(2)...
  • matlab C混合编程,在matlab中编写.m文件实现函数求解矩阵方程。 在C中调用。求指导,第一次提问。
  • Matlab调用C函数(方法及实例)

    千次阅读 2019-12-18 11:34:56
    Matlab:编译性语言 优点:方便的实现编程过程中的交互,免去了编译过程 缺点:执行速度慢!! 解决方法: ...通过mex,用户可以在Matlab调用C/C++或者Fortran编写的计算程序,加速Matlab内部...
  • 关于Matlab调用C函数的问题

    千次阅读 2013-06-20 19:07:23
    关于Matlab调用C的方式,已经固定了,介绍也很多。 但是有一个地方,还没有见到有很多介绍。 如何在C中方便地使用Matlab传递过来的变量?   由于Matlab中常使用double型变量,而C中最常使用的是int型变量,当
  • 如何在MATLAB调用R函数

    千次阅读 2018-10-15 16:13:10
    因此,需要在MATLAB程序中调用R的PDSCE包。 首先,安装R软件(需要将R加入到系统路径,即修改环境变量path)。 其次,从本地安装PDSCE。有些包需要C编译,如果不能加载成功,需要安装Rtools。 然后,编写如下的程序...
  • 1.构造函数MWNumericArray(double rval, MWClassID classid)
  • Matlab函数调用和参数传递

    万次阅读 2016-07-03 20:32:27
    Matlab中,调用函数的形式如下: [输出参数 1,输出参数 2,…] = 函数名字(输入参数 1,输入参数 2,输入参数 3,…)注意事项: 1. 函数调用的时候,参数顺序应该与定义的时候一样。 2. 函数可以嵌套 3. ...
  • Java调用Matlab函数

    2019-04-02 21:35:56
    Java调用Matlab函数准备工作生成jar包 准备工作 总体上来讲,就是将Matlab程序打包成jar包供Java程序调用。 首先要安装Matlab和JDK,其中要保证Matlab支持的java版本跟你电脑上安装的java版本保持一致。Matlab查看...
  • C++调用MATLAB函数

    万次阅读 热门讨论 2019-03-15 20:18:44
    MATLAB具有着很高的计算性能,一些算法用MATLAB很容易实现,而用C++很难实现,如果想在C++中调用MATLAB编写的函数,可以将该函数编译成库文件,之后在C++中对其进行调用。 本文详细讲解如何将MATLAB函数编译成库,...
  • MATLAB矩阵计算函数(初级篇)

    千次阅读 2014-10-26 21:25:47
    1、向量的创建 1)直接输入: 行向量:a=[1,2,3,4,5] 列向量:a=[1;2;3;4;5] 2)用“:”生成向量  a=J:K 生成的行向量是a=[J,J+1,…...3)函数linspace 用来生成数据按等差形式排列的行向量  x=l
  • MATLAB01:基本的数学运算与矩阵运算

    万次阅读 多人点赞 2019-11-12 17:22:52
    MATLAB01:基本的数学运算与矩阵运算MATLAB基本语法变量变量名保留变量不适合做变量名变量不应当覆盖内置函数MATLAB调用优先级变量类型数字型变量的显示格式MATLAB命令行使用MATLAB进行数字运算使用MATLAB计算数学...
  • Matlab矩阵操作

    2021-03-25 20:26:57
    第一部分:矩阵基本知识 矩阵是进行数据处理和运算的基本元素。在MATLAB中 a、通常意义上的数量(标量...d、矩阵的元素可以是数值、变量、表达式或函数; e、矩阵的尺寸不必预先定义。 下面介绍四种矩阵的创建方法:
  • MATLAB矩阵生成

    万次阅读 多人点赞 2017-01-10 16:23:00
    MATLAB矩阵生成
  • MATLAB无疑是一款强大的矩阵运算与数据分析软件,内部集成了众多函数。如果在C++编程时可以调用相关的函数将对我们的数据分析研究带来极大的方便。这里就总结一下如何在VS工程中调用MATLAB函数,以及遇到的问题如何...
  • C/C++ VS中调用matlab函数的方法

    万次阅读 2017-07-01 16:20:01
    C/C++ VS中调用matlab函数的方法 Matlab在数值等矩阵运算中具有很大优势,并且Matlab提供了强大的工具箱可以使用,在C/C++开发中,我们可以在VS下调用matlab函数进行混合编程。下面主要介绍VS中调用matlab函数的环境...
  • 从零开始学MATLAB(二)MATLAB矩阵处理

    千次阅读 多人点赞 2020-02-26 21:08:57
    从零开始学MATLAB(二)MATLAB矩阵处理 1.特殊矩阵 (1)通用的特殊矩阵 zeros函数:产生全0矩阵,即零矩阵。 ones函数:产生全1矩阵,即幺矩阵。 eye函数:产生对角线为1的矩阵,当矩阵为方阵时,得到一个单位矩阵 ...
  • 1、函数功能: zeros函数:产生全0矩阵,即零矩阵。 ones函数:产生全1矩阵。 eye函数:产生对角线为1的矩阵。...2、调用格式(以上函数调用格式相似,以ones函数为例) 3、代码示例(以ones函数为例) clc...
  • VS2013调用MATLAB内建函数

    千次阅读 2014-06-17 18:31:59
    在用C写程序时,有时会遇到数值计算问题,如矩阵的计算、优化问题、解微分方程等等。这些数值计算问题如果自己来实现的话,一来太费时间,二来自己的实现方案...在C程序中调用matlab函数即可轻松解决问题。 环境:
  • MATLAB矩阵操作

    千次阅读 2018-12-06 09:44:01
    MATLAB矩阵操作大全 一、矩阵的表示 在MATLAB中创建矩阵有以下规则: a、矩阵元素必须在”[ ]”内; b、矩阵的同行元素之间用空格(或”,”)隔开; c、矩阵的行与行之间用”;”(或回车符)隔开; d、矩阵的元素...
  • Matlab 矩阵运算

    千次阅读 2014-09-11 10:52:20
    Matlab 矩阵运算 说明:这一段时间用Matlab做了LDPC码的性能仿真,过程中涉及了大量的矩阵运算,本文记录了Matlab矩阵的相关知识,特别的说明了稀疏矩阵和有限域中的矩阵Matlab的运算是在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,771
精华内容 8,708
关键字:

matlab矩阵调用函数

matlab 订阅