许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Matlab常见实用函数汇总(编程中碰到的实用函数)

Matlab常见实用函数汇总(编程中碰到的实用函数)

阅读数 10
点赞 0
article_banner


目录

  • 1、norm函数 2、varargin函数(varargout) 3、nargout函数(nargin) 4、ndgrid函数 5、ndims函数 6、surface函数 7、gcbf函数 8、eye函数 9、round函数 10、set函数 11、view函数 12、axis equal函数 13、isfield函数 14、mean函数 15、std函数 16、sort函数 17、size函数 18、cell2mat函数 19、fwrite函数 20、imagesc函数 21、imagesc函数 22、plot相关 23、zeros函数 24、mask掩膜函数 25、single单精度转换函数 26、isfield函数 27、exist函数 28、ones函数 29、uigetdir函数 30、ls 31、dicomread、dicominfo 32、fullfile函数 33、ginput(1)函数 34、median函数 35、find函数 36、sprintf函数 37、double函数 38、nextpow2函数 39、fft函数 40、fftshift与ifftshift函数 41、mod函数 42、meshgrid函数 43、pol2cart、cart2pol函数 44、linspace函数 45、real与imag函数 46、assert函数 47、@(x,y)用法 48、arrayfun函数 49、bsxfun函数 50、randperm函数 51、gpuArray相关用法 52、varargin函数 53、numel函数 54、struct 55、conv、conv2、convn函数 56、padarray函数


1、norm函数

格式:n=norm(A,p)

   功能:norm函数可计算几种不同类型的矩阵范数,根据p的不同可得到不同的范数

p:

   1 返回A中最大一列和,即max(sum(abs(A)))

   2 返回A的最大奇异值,和n=norm(A)用法一样

   ‘inf’ 返回A中最大一行和,即max(sum(abs(A’)))

   ‘fro’ A和A‘的积的对角线和的平方根,即sqrt(sum(diag(A’*A)))

2、varargin函数(varargout)

是未确定个数的输入参数,即定义这个参数的函数拥有任意数量的参数。在函数中需要采用switch case等语句分段判决执行。

   类似的varargout,调用者调用该函数时根据需要来改变输入参数的个数。以元胞数组保存,也就是根据需要来改变输出参数的个数。

   使用举例:

   varargin{:}表示所有输入参数

   varargout{1:3},取前3个输出参数。

3、nargout函数(nargin)

nargout 表示输出变量的个数。

   类似的还有nargin,表示输入参数的个数。

4、ndgrid函数

在进行2-D、3-D绘图时,该函数功能与meshgrid类似(参见meshgrid)。但后者仅限于2-D、3-D绘图,不能进行更高维绘图操作。

   [X,Y,Z] = meshgrid(x,y,z) 等效于 [Y,X,Z] = ndgrid(y,x,z)(有一点小差别,x,y互换)
使用举例:

   [X,Y] = ndgrid(1:2:19,2:2:12)

   X = 10×6

 1     1     1     1     1     1
 3     3     3     3     3     3
 5     5     5     5     5     5
 7     7     7     7     7     7
 9     9     9     9     9     9
11    11    11    11    11    11
13    13    13    13    13    13
15    15    15    15    15    15
17    17    17    17    17    17
19    19    19    19    19    19

Y = 10×6

 2     4     6     8    10    12
 2     4     6     8    10    12
 2     4     6     8    10    12
 2     4     6     8    10    12
 2     4     6     8    10    12
 2     4     6     8    10    12
 2     4     6     8    10    12
 2     4     6     8    10    12
 2     4     6     8    10    12
 2     4     6     8    10    12
对应位置组合即为点坐标,组成网格

若加上z轴,即组成三位网格,结果类似于下图:
在这里插入图片描述

5、ndims函数

ndims(a)表示矩阵a的维数,即length( size (a))

   比如ndims([1 2 3;4 5 6])

   等于2,因为他是二维矩阵
matlab认为向量也是二维矩阵,只不过其中一个维度的长为1.

   因此ndims([1 2 3])也等于2

6、surface函数

surface(X,Y,Z) 创建一个基本三维曲面图。该函数将矩阵 Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中的网格上方的高度。曲面的颜色根据 Z 指定的高度而变化。

   此外,surface(X,Y,Z,C) 还指定曲面的颜色。

7、gcbf函数

获取正在执行的回调函数对应的对象所在窗口的句柄;

   相关的:

   gcf::表示获取当前图形窗口的句柄;

   gca:表示获得图形窗口中坐标轴的句柄;

   gco:表示获得图形中当前对象的句柄;

句柄的英文名是Handle,通俗地讲,就是把手的意思。MATLAB可以用程序控制绘图的各个细节,如改变一条曲线的线型、颜色、标记、粗细等,改变坐标轴标注文字的大小、颜色、字体等。
线条、字体等在MATLAB绘图中都是对象(Object),编程的人都知道,要控制和操作对象,就需要有一个变量代表这个对象。这个变量在编程中就叫Handle。用Handle可以对该Handle代表的绘图元素进行各种操作。

8、eye函数

单位矩阵函数,主要创建对角元素为1,其他元素为0的矩阵,具体如下图:
在这里插入图片描述
在这里插入图片描述

   特殊的,若3*4,则:
在这里插入图片描述

9、round函数

四舍五入的取整函数,具体如下:
在这里插入图片描述

10、set函数

set函数的调用格式为:

   set(句柄,属性名1,属性值1,属性名2,属性值2,…)

11、view函数

view([a,b,c])中那两个为零(如bc为0)就是在那两个上的投影;在abc都不为0时,view([a,b,c])可以转换视图角度。

   当为view([1,1,1])时,三维视图效果如下,X Y Z轴都可以看到。
在这里插入图片描述

   改为view([1,0,0])时,三维视图效果如下,是在Y Z轴平面上的投影。
在这里插入图片描述

12、axis equal函数

axis square/将当前坐标系图形设置为方形。横轴及纵轴比例是1:1

   axis equal/将横轴纵轴的定标系数设成相同值,就是间距一样,但不一定是方形的

13、isfield函数

判断输入是否是 结构体  数组的成员

   应用举例:

   if(isfield(json,‘Optode’))表示检查json是否包含Optode指定域,若在则返回1,if成立,反之返回0,if不成立。

14、mean函数

求数组的平均值

   返回沿数组中不同维的元素的平均值。

   如果A是一个向量,mean(A)返回A中元素的平均值。

   如果A是一个矩阵,mean(A)将其中的各列视为向量,把矩阵中的每列看成一个向量,返回一个包含每一列所有元素的平均值的行向量。

   所以要计算矩阵所有元素的平均值,则需对矩阵计算两次均值,即mean(mean(A)).

15、std函数

计算标准差

16、sort函数

对数组按照列排序,从上到下由低到高
在这里插入图片描述

17、size函数

返回矩阵的行列数,

   若指令为size(A)表示返回矩阵的行列数;

   若指令为size(A,1)表示返回矩阵的行数;

   若指令为size(A,2)表示返回矩阵的列数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

18、cell2mat函数

将元胞转换为数组

C = {[1],    [2 3 4];
     [5; 9], [6 7 8; 10 11 12]}
A = cell2mat(C)
A = 3×4
     1     2     3     4
     5     6     7     8
     9     10    11    12

19、fwrite函数

fid=fopen('test.txt','wt'); % 写的方式打开文件(若不存在,建立文件);
fprintf(fid,'%d ',a);  % %d 表示以整数形式(形式可以改)写入数据a;
fclose(fid);  %关闭文件;

PS:

   %d:整数;

   %f:浮点数(小数);

   %c:单字符串;

   %s:字符串。

20、imagesc函数

除去size为1的维度

   src=rand(4,1,3)产生一个均匀分布的阵列,共3页,每页4行1列,经过squeeze后,1列的那个维度就没有了,只剩下4行3列的一个二维阵列。
在这里插入图片描述

21、imagesc函数

imagesc©:将c中的数据用图像显示出来

   imagesc(x,y,C):指定图像显示位置,为图像界面的(x,y)位置显示数据图像

   PS:

   结合20、21函数,当我有一个三维数组,例如512490时,想要利用函数imagesc函数画出图像,显示数据,则需要这样写:

 imagesc(squeeze(proj(:,2,:)))%当需要固定列数时,假如固定为第2列,则需要squeeze函数将数组的一维去掉,否则画图报错
 %若使层数固定,假如(:,:,10),则不需要squeeze函数,直接画图即可

22、plot相关

基本用法

plot(x, y); %x、y分别为横纵坐标
axis([xmin xmax ymin ymax]); % 设置坐标轴显示在指定的区间

xmin、xmax 表示设置横坐标的最小最大值;

   ymin、ymax 表示设置纵坐标的最小最大值。

   还可以设置一些线段相关的样式

   语法为

plot(x,y,'--g','*')

在这里插入图片描述

23、zeros函数

返回一个m×n×p×…的double类零矩阵的一个函数。在命令行窗口中输入B=zeros(5),按回车键可以看到生成了一个5*5的零矩阵,如下图所示:
在这里插入图片描述

24、mask掩膜函数

用法

   (1) 提取感兴趣的部分:用预先制作的感兴趣区掩膜与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0;(利用这个作用)

   (2) 屏蔽作用:用掩膜对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计;

   (3) 结构特征提取:用相似性变量或图像匹配方法检测和提取图像中与掩膜相似的结构特征;

   (4) 特殊形状图像的制作

25、single单精度转换函数

 Y = single(X)

输入x数据,转换后的数据变为单精度。

26、isfield函数

函数功能:判断输入是否是结构体数组的成员

   调用格式:

   f = isfield (s,‘fieldname’)检查结构体S是否包含由fieldname指定域,如果包含,返回逻辑1;如果不包含fieldname域或者S不是结构体类型的,返回逻辑0.

tf = isfield(S, C)

   其中C是一个包含多个字符串的cell array,isfield判定由这些字符串表示的域是否是struct的域。返回值是个逻辑型数组。

27、exist函数

exist有两种形式,一个参数和两个参数的,都是用来确定某个值(对象)是否存在

 %一个值:
 r = exist(a)

 %两个值
 r = exist( 'name', 'kind')
 % 若存在,则 r = 1; 否则 r = 0;

其中,name 可以是变量名,函数名、m 文件名、mex 文件、dll 文件、内嵌的函数、p码文件、目录、路径、Java class

   kind可以是 :builtin 内嵌函数、class Java class、dir 目录、file 文件或者目录、var 变量

28、ones函数

产生全1矩阵,例如:ones(N)是产生一个N*N的全1矩阵。

29、uigetdir函数

打开一个模态对话框,显示当前工作目录中的文件夹并返回用户从对话框中选择的路径。

   功能:给用户打开代码所在的目录,提供选择文件的途径,并返回用户所选的文件夹。
'*.*'表示给筛选器加备注,选择全部文件的意思

'windows name'打开窗口的名字
path=uigetdir(path,'windows name','*.*');%使用示例

在这里插入图片描述

30、ls

获取所在文件夹下的所有文件名(x,y),注意,获取到的x为文件夹下文件的个数,y为文件名的字数,包含文件后缀。其中,获取的文件个数比实际多几行,一般前两行为文件胡一级和二级文件夹,在程序中使用时,需要根据自身情况砍掉前几行。

31、dicomread、dicominfo

参考文章

   dicomread:读取图像的像素信息

   dicominfo:读取图像的参数信息

% filename 就是你要用的DICOM文件的名字
% 不要使用其他奇怪的东西
filename = 'CT.dcm'; 
dcm = dicomread(filename);
info = dicominfo(filename);

当使用上述代码读取dicom图像后,就可以得到图像的所有信息,包括以下内容:

   常用参数:
在这里插入图片描述

32、fullfile函数

将多个字符串拼接成文件路径

   用法:

   f = fullfile(filepart1,filepart2,…,filepartN)

   输出:将各个输入用""拼接起来

   即:f = ‘filepart1\filepart2\…\filepartN’

33、ginput(1)函数

获取指定点坐标值

   用法:
[x,y,button] = ginput(n) 函数从当前的坐标图上选择n个点,并返回这n个点的坐标向量值x、y和键或按钮的标示。参数button是一个整数向量,显示用户按下哪一个鼠标键或返回ASCII码值。

34、median函数

求矩阵的中间值

   用法:

   (1)median(M)

   返回矩阵M每一列所有数据的中间大小(从小到大排列)的值

   (2)median(M,dim),dim可以为1/2。

   1表示按每列返回一个值,为该列从大到小排列的中间值,

   2表示按每行返回一个值,为该行从大到小排列的中间值.

A=[1 4 5;2 8 3;9 7 6];
>> median(A)
ans =
     2     7     5

35、find函数

find(matrix A)返回满足条件的矩阵中元素的下标,矩阵顺序是按列;1,2,3,…

x=[1 2 3;
   0 0 4;
   7 9  0];
>> find(x)%返回非0元素的下标
ans =
     1
     3
     4
     6
     7
     8

36、sprintf函数

将数据格式化为字符串或字符向量。

fp = sprintf('image%04g.png',f);

其中image%04g.png的%04g表示4为数,也就是image0001.png、image0002.png,image0003.png…

37、double函数

将一个数用浮点数的形式表示

   比如对于一个复数来说:

double((1 + i/2)/(i - 1/4)^(1/2))
ans = 
    0.9943 - 0.4733i

38、nextpow2函数

nextpow2是用来求指数的,这个指数(假定为a)需满足两个条件:

   (1)2的a次方大于等于输入值;

   (2)2的(a-1)次方小于输入值。

   比如:nextpow2(5)、nextpow2(6)

>> nextpow2(5)
ans =
     3
>> nextpow2(6)
ans =
     3

39、fft函数

Y = fft(X)
Y = fft(X,n)
Y = fft(X,n,dim)

(1)y=fft(x);

   如果x是向量,则fft(x)返回该向量的傅里叶变换(其实就是fft,即DFT,即离散傅里叶变换)

   如果x是矩阵,则fft(x)将x的各列视为向量,并返回每列的傅里叶变换。

   (2)y=fft(x,n)

   如果 X 是向量且 X 的长度小于 n,则为 X 补上尾零以达到长度 n。

   如果 X 是向量且 X 的长度大于 n,则对 X 进行截断以达到长度 n。

40、fftshift与ifftshift函数

fftshift通过将零频分量移动到数组中心,重新排列傅里叶变换X,而ifftshift则与之相反,为逆零频分量平移。先讨论fftshift:

   一般是在经过fft出来后,若需要查看(-fs/2,fs/2)区间内的频率时,需要进行fftshift处理,那为什么还需要零频分量处理呢?

   因为matlab中经过FFT之后,MATLAB输出的频率范围是[0,fs],fs是采样率。但是,我们的研究范围一般是[-fs/2,fs/2],也就是零频在中间,这是就需要fftshift一下。

   如下图所示,图1为0-fs频率范围内FFT的结果,若查看的是这个频率范围内就无需fftshift转换;

   但若查看[-fs/2,fs/2]范围内振幅,也就是[-fs/2,fs/2]范围内进行FFT,则进行fftshift和不进行的振幅结果如图2和3,可以看到图2对应的频率与图1并不一致,图3经过平移才是正确的。所以若查看的范围为[-fs/2,fs/2]就一定需要fftshift处理。

   上面的本质:实际上图2并不是完全错误的,仔细分析可以发现,将图2零点左右的图像对调,就是图3,这个过程也是函数fftshift的实际计算方式。
在这里插入图片描述
在这里插入图片描述

   总结:

   fft(转换到频域)得到的像谱默认不是按照中心对称的(快速傅里叶变换的原因),一般需要用fftshift方法使得其按中心对称,这样的话当我们ifft时(转换回时域),得到的数据就会和之前实际的不一样了,所以还需加ifftshift 来还原。

   参考文章:https://blog.csdn.net/double12754/article/details/88393258

41、mod函数

例如:

K>> mod(6,2)
ans =
     0

42、meshgrid函数

生成网格矩阵,可以是二维也可以是三维,用法:
[x y]=meshgrid(a b);a 和b是一维数组,如a=[1 2 3]; b= [2 3 4]; 则生成的 X 和 Y 都是为 3X3 维的矩阵,平面;

   若[x y z]=meshgrid(a b c) ;,生成的就是三维网格。

>> a=[1,2,3];b=[4,5,6];[A,B]=meshgrid(a,b)
A =
     1     2     3
     1     2     3
     1     2     3
B =
     4     4     4
     5     5     5
     6     6     6

43、pol2cart、cart2pol函数

pol2cart函数为将极坐标或柱坐标转换为笛卡尔坐标

[x,y] = pol2cart(theta,rho);%将极坐标数组 theta 和 rho 的对应元素变换为二维笛卡尔坐标或 xy 坐标。
[x,y,z] = pol2cart(theta,rho,z);%将柱坐标数组 theta、rho 和 z 的对应元素变换为三维笛卡尔坐标或 xyz 坐标。

用法:

theta = [0 pi/4 pi/2 pi];
rho = [5 5 10 10];
[x,y] = pol2cart(theta,rho);

x = 1×4
    5.0000    3.5355    0.0000  -10.0000
y = 1×4
         0    3.5355   10.0000    0.0000

cart2pol函数则与之相反,将笛卡尔坐标转为极坐标。

44、linspace函数

生成线性、一定间距的数组,例如: X=linspace(1,100)将产生从1到100步长为1的数组。

45、real与imag函数

对于一个复数a,real函数是求实部,imag函数求虚部:

Z = 2+3i;
X = real(Z)
X = 2

46、assert函数

断言函数,当assert(),括号中断言的条件为 false 时引发错误。

47、@(x,y)用法

@是用于定义函数句柄的操作符。函数句柄既是一种变量,可以用于传参和赋值;也是可以当做函数名一样使用。

   简单来说就是,matlab中的某些函数,例如sin、cos等等这些函数,只能用来计算,但如果我们想把她当作参数来传递,就可以借助@,实现方式如下:

f = @sin;
g = f; %g的值等于sin
y = g(pi);%实现了sin(pi)

48、arrayfun函数

用法:

   A = arrayfun(fun, B, C, …)

   fun为函数式(也可以是某种判定条件),分别调用B和C计算fun结果并返回。

   例如:

 fx=@(x,y) x/sqrt(x^2+y ^2);
 result = arrayfun(fx, x, y);

49、bsxfun函数

bsxfun(fun,A,B)

   对两个矩阵A和B之间的每一个元素进行指定的计算(函数fun指定),并自动扩维。

   函数计算功能与48中的arrayfun函数一样,这里主要说一下自动扩展维度的功能:

   假设我们想实现一个加法功能:c=bsxfun(@plus,a,b)

 a = randn(3,1);b = randn(1,3);
  a = -0.2453 -0.2766 -0.1913 
  b = 0.6062 0.5655 0.9057

则该函数实际运行中, 如果a和b的大小相同,那么c=a+b. 但如果有某维不同,且a或b必须有一个在这一维的维数为1, 那么bsxfun就将少的这个维度数值复制一些来使其与多的维数一样。

   在我们这里,b的第一维只有1(只一行),所以bsxfun将b复制3次形成一个3×3的矩阵,同样也将a复制成3×3的矩阵。最后a就变成:

   repmat(a,1,3)

   ans = -0.2453 -0.2453 -0.2453 -0.2766 -0.2766 -0.2766 -0.1913 -0.1913 -0.1913

   这里@plus是加法的函数数柄,相应的有减法@minus, 乘法@times, 左右除等。

50、randperm函数

用法:

   p = randperm(n) 返回一行包含从1到n的整数,但顺序是打乱的。

51、gpuArray相关用法

使用gpuArray函数可以将数据从MATLAB工作空间传送到GPU

   例如:

A = data(10);
G = gpuArray(A);

执行以上语句后,G 就是一个MATLAB GPUArray对象了。

   对数据的相关操作包括表中所示,具体用法可以在matlab中使用help+函数名查看。
在这里插入图片描述

52、varargin函数

varargin是“Variable length input argument list”的缩写,它提供了一种函数可变参数列表机制,允许调用者调用该函数时根据需要来改变输入参数的个数。

   主要用于在一个函数中,输入参数不确定的情况,这增强了程序的灵活性。

   当同一个函数拥有不同输入参数时使用,可以根据读取参数个数来确定调用哪种模式。例如:

proj_geom = create_proj_geom('parallel', para1, para2);
proj_geom = create_proj_geom('cone', para1, para2, para3);
proj_geom = create_proj_geom('fan', para1, para2, para3, para4);

上面同一个函数由于第一个参数所选的模式不同,需要不同个数的输入参数,那么就需要写不同函数供实现,这时就可以使用varargin函数,varargin放在函数声明的最后面,如下:

function proj_geom = create_proj_geom(type, varargin)

里面的varargin是一个1*n的cell数组,代表后面所有的参数,所以访问时需要用元胞数组的访问方式varargin{1}、varargin{2}、varargin{3}…

   与之对应的还有一个varargout函数,功能相似,只是所有功能都是对应于输出参数来说。
另外还有nargout,nargin两个函数,分别表示函数输出参数和输入参数的数目。

   例如:nargin(‘函数名’),其返回值为函数的接受参数个数。

53、numel函数

n = numel(A);
n=   numel(A,条件);

返回 数组 A中元素个数。若是一幅图像,则numel(A)将给出它的像素数。

   和varargin函数配合使用,可以利用计算numel(varargin)得到不同输入参数个数,确定调用函数语句是否正确。

54、struct

结构体函数,函数使用方法:

s = struct(field1,value1,…,fieldN,valueN)

struct结构体使用

   直接通过变量+.+变量名即可应用,例如:s.field1

   定义方法:

A = struct();
A.options = struct();

这段代码的意思是,首先定义一个名为A的结构体,再将结构体A中的字段option也定义为一个结构体。

55、conv、conv2、convn函数

查看文章

   conv:

   https://blog.csdn.net/what_lei/article/details/49019049

56、padarray函数

填充图像或填充数组

B = padarray(A,padsize,padval,direction)

A为输入图像,B为填充后的图像,padsize给出了给出了填充的行数和列数,通常用[r c]来表示。padval和direction分别表示填充方法和方向。
padval

   'symmetric’表示图像大小通过围绕边界进行镜像反射来扩展;

   'replicate’表示图像大小通过复制外边界中的值来扩展;

   'circular’图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展。
direction

   'pre’表示在每一维的第一个元素前填充;

   'post’表示在每一维的最后一个元素后填充;

   'both’表示在每一维的第一个元素前和最后一个元素后填充,此项为默认值。

   实例:
在这里插入图片描述


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空