许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  常用的Matlab函数命令大全(收藏必备)

常用的Matlab函数命令大全(收藏必备)

阅读数 7
点赞 0
article_banner

常用的matlab函数命令

  • 1 查看程序运行时间 2 查看字符串是否内容和长度是否一致,并返回逻辑值 3 把两种算法整合到一起 4 添加搜索路径 5 切换路径 6 三维矩阵的生成 7 三维矩阵的转换 8 只计算矩阵X'X的对角元 9 exist函数的使用 10 isfield函数的使用 11 fprintf函数的使用 12 非线性函数求根函数fzero 13 向量与矩阵的点乘 14 两个矩阵乘积的迹 15 对角矩阵乘以普通矩阵 16 matlab中实现打印矩阵 17 matlab中实现查看电脑的cpu核数 18 matlab 标注特殊点 18 两条线画在一个figure上 19 画水平线或者垂直线 20 因子旋转 21 matlab设置默认参数的方法 使用可变输入参数varargin 使用参数nargin 使用nargin和isempty命令 22 三维数组转化为cell格式 23 matlab生成的单张图片裁剪空白的方法 24 matlab生成的多张图片裁剪空白的方法 25 matlab打印向量 26 matlab在一个向量中删除其中一个子向量的两种方法:分别使用ismember和setdiff函数。 27 给定张量数据每个mode的最大因子数量,生成该mode的所有候选因子模型 28 给定张量数据每个mode的候选因子模型的集合,生成张量数据的所有候选模型 29 生成给定的多个向量的笛卡尔积


1 查看程序运行时间

% method 1
tic
toc
% method 2
profile on
profile viewer
% method 3
t1 = clock;
t2 = clock;
t = etime(t2,t1)
% method 4
t1 = cputime;
t = cputime - t1;

2 查看 字符串  是否内容和长度是否一致,并返回逻辑值

 strcmp('AECM','AECM');   %返回逻辑值,0或者1
 strcmpi(s1,s2);  %此 MATLAB 函数 将比较 s1 和 s2,并忽略字母大小写差异。如果二者相同,函数将返回 1 (true),否则返回 0
    (false)。如果文本的大小和内容相同,则它们将视为相等,不考虑大小写。返回结果 tf 的数据类型为 logical。

3 把两种算法整合到一起

switch alg % alg 代表算法的名字如CM,AECM
	case 'CM'     % 如果alg='CM',执行本段代码
	case 'AECM'   % 如果alg='AECM',执行本段代码

4 添加搜索路径

addpath

5 切换路径

cd('./temp') %切换到当前路径的temp文件夹
cd('../data') %切换到上一级目录的data文件夹
%% 一个点代表当前目录,两个点代表上一级目录

6 三维矩阵的生成

A = cat(3,magic(3),rand(3));

在这里插入图片描述

7 三维矩阵的转换

将三维矩阵 X X X形成二维矩阵并按照如下格式排列: X = ( X 1 X 2 , . . . , X n ) X = (X_1 X_2,...,X_n) X=(X1​X2​,...,Xn​)

A(:,:)

在这里插入图片描述

三维矩阵的维度不变,第一维(行)和第二维(列)互换,第三维(页)不变;

B = permute(A,[2,1,3])

在这里插入图片描述

将三维矩阵 X X X形成二维矩阵并按照如下格式排列: X = ( X 1 ; X 2 ; . . . ; X n ) X = (X_1;X_2;...;X_n) X=(X1​;X2​;...;Xn​)

C = permute(A,[1,3,2]);
D = reshape(C,[2*3,3]);

在这里插入图片描述

或者用另外一种思路:

B = permute(A,[2,1,3])
B(:,:)'

在这里插入图片描述

   二维矩阵转化为三维矩阵:

tcell34 = permute(reshape(tcell34,[10,34,58]),[1,3,2]);

8 只计算矩阵X’X的对角元

当矩阵X的维度特别大时,有时我们只需要得到矩阵X’X的对角元素,而非矩阵X’X的全部元素,matlab如果直接用X’*X会很慢,在此利用点乘的想法实现快速计算:

在这里插入图片描述

   矩阵X’X的对角元素为:
在这里插入图片描述
blog.csdnimg.cn/20201117235632303.png#pic_center)

9 exist函数的使用

以数字形式返回 name 的类型。此列表描述与每个返回值关联的类型:

  • 0 - name 不存在或因其他原因找不到。例如,如果 name存在于 MATLAB 不能访问的受限文件夹中,exist 将返回 0。
  • 1 - name 是工作区中的变量。
  • 2 - name 是扩展名为 .m、.mlx、 .mlapp 的文件,name 是具有未注册文件扩展名(.mat、.fig、.txt)的文件的名称。
  • 3 - name 是 MATLAB 搜索路径上的 MEX文件。
  • 4 - name 是已加载的 Simulink 模型或者位于 MATLAB 搜索路径上的 Simulink 模型或库文件。
  • 5 - name 是内置 MATLAB 函数。这不包括类。
  • 6 - name 是 MATLAB 搜索路径上的 P 代码文件。
  • 7 - name 是文件夹。
  • 8 - name是类。(如果使用 -nojvm 选项启动 MATLAB,则 exist 对 Java 类返回 0。)

MATLAB搜索从搜索路径的顶层开始并向下移动,直到找到结果或到达路径上的最后一个文件夹。如果一个文件夹中存在多个 name,根据函数优先顺序,MATLAB 将显示name 的第一个实例。文件夹是函数优先级规则的例外。除变量和内置函数外,它们的优先级高于所有类型。

此函数一般包含两个参数,第一个参数表示name,第二个参数表示搜索的内容的性质(是变量?还是文件?还是目录等?),第二个参数主要取以下值:第二个输入(可选)必须为 ‘var’、‘builtin’、‘class’、‘dir’ 或 ‘file’。

例:我要查看工作区的变量中是否具有s2这个变量:

exist('s2','var') 

在这里插入图片描述

在这里插入图片描述

   该函数通常和~符号连用

if(~exist('s2','var')) s2 = 1; end

解释:如果不存在s2这个变量,则定义变量s2 = 1。

10 isfield函数的使用

isfield函数:

   isfield判定由这些字符串表示的域是否是结构体的域。返回值是个逻辑型 数组  

student = struct('name', 'John', 'age', 20, 'score', 90);
x = {'name','salary'};
isfield(student,x);

在这里插入图片描述

   返回的是逻辑值1或者0。

11 fprintf函数的使用

转载:http://blog.sina.com. cn /s/blog_6fb8aa0d01019icx.html

   数据的格式化输出:fprintf(fid, format, variables)
在这里插入图片描述

fprintf('Is ''name'' a field of student structure? %d\n',isfield(student, 'name'));

解释代码:%d 代表输出整数,并用后面isfield(student, ‘name’)的返回值来替代;\n代表换行符。

12 非线性函数求根函数fzero

转载:https://www.cnblogs.com/mybany/p/8806231.html(如有侵权,请联系删除)
例1:

fun = @cos;
fzero(fun,[1 2])

在这里[1 2]代表的是在该区间内搜索零点,在此必须要保证函数在区间的两个端点是异号的,如cos1 = 0.5403,cos2 = -0.4161.因此此方法类似于使用的是二分法。

例2:

fzero(fun,3)

该式表示的是在3附近求零点。

13 向量与矩阵的点乘

在这里插入图片描述
在这里插入图片描述

   A是 3 × 1 3 \times 1 3×1的列向量,B是 3 × 3 3 \times 3 3×3的方阵,则A与B的点乘就是A的每一个元素与B的每一行相乘。

   代码如下:

A = [2 4 8]';
B = rand(3,3);
A.*B

在这里插入图片描述

   例:

   diag(A)*B的计算 等价于 A.*B

   也就是说:

如果一个对角矩阵乘以一个矩阵时,可以用点乘的方式来计算,当维度较高时,速度较快。

同理,但如果B*diag(A)的计算等价于 B.*A’;

14 两个矩阵乘积的迹

A = rand(1000,1000);
B = rand(1000,1000);
tic
trace(A*B);
t1 = toc
tic
C = B';
sum(A(:).*C(:));
t2 = toc

求两个矩阵乘积的迹

15 对角矩阵乘以普通矩阵

A = diag([1 2 3 4]);
B = [1 2 3;
	4 5 6;
 	7 8 9;
 	10 11 12];
A*B

在这里插入图片描述

   等价于

diag(A).*B

在这里插入图片描述

   因为diag(A)是一个列向量;

   同理:

B = [1 2 3;
	4 5 6;
 	7 8 9;
 	10 11 12];
C = diag([1 2 3]);
B*C

在这里插入图片描述

   也可以使用点乘加速计算:

D =diag(C);
B.*D'

在这里插入图片描述

16 matlab中实现打印矩阵

fprintf([repmat('%d\t', 1, size(A, 2)) '\n'], A');

17 matlab中实现查看电脑的cpu核数

feature('numcores')

18 matlab 标注特殊点

plot(x,y,'ko','markerfacecolor','r','MarkerSize',5); %标注实心点

18 两条线画在一个figure上

plot(ind,D(:,1),'b-.',ind,D(:,2),'--',"LineWidth",1.5); 

19 画水平线或者垂直线

line([5 5],[min(elvhbic) max(elvhbic)],'linestyle','--', 'Color','black');

20 因子旋转

[B,t] = rotatefactors(A,'method','varimax');

A是因子载荷矩阵,B是旋转后的因子载荷矩阵。

21 matlab设置默认参数的方法

使用可变输入参数varargin

if nargin > 1
    [varargin{:}] = convertStringsToChars(varargin{:});
end

names = {'method' 'normalize' 'reltol' 'maxit'};
dflts = {'varimax' [] [] [] []};
[method,normalize,reltol,maxit] = internal.stats.parseArgs(names, dflts, varargin{:});

[d,m] = size(A);

methodNames = { 'varimax' 'promax'};
[method,~] = internal.stats.getParamVal(method,methodNames,'Method');

使用参数nargin

function [result]=some_fun(param1, param2)
    if (nargin<3)
        param3 = 'default_param3_value';
    end
    ...
end

使用nargin和isempty命令

function [result]=some_fun(param1, param2,param3,param4)
   #param1是必须输入参数,param2,param3,param4是可选参数
	if nargin < 2|| isempty(param2), param2= 'on'; end
	if nargin < 3 || isempty(param3), param3= sqrt(eps(class(A))); end
	if nargin < 4 || isempty(param4), param4= 250; end

	switch param2
	case {'on',1}
	    h = sqrt(sum(A.^2, 2));
	    A = bsxfun(@rdivide, A, h);
	case {'off',0}
	%     A = A;
	otherwise
	    error(message('stats:rotatefactors:BadNormalize'));
	end
end

22 三维数组转化为cell格式

a = rand(3,4,5);
c = mat2cell(a,3,4,ones(1,5));

23 matlab生成的单张图片裁剪空白的方法

set(gca,'looseInset',[0 0 0 0]);

24 matlab生成的多张图片裁剪空白的方法

tiledlayout(1,3,'TileSpacing','tight','Padding','none');
nexttile
xlabel(['资产质量因子V1',newline,'(a)']);
set(gca, 'LooseInset', [0,0,0,0]);
set(gcf,'Position',[0,0,1200,400]);

25 matlab打印向量

q_max = [1,2,0,3,0,4];
fprintf('\n---------> Maximum number of factors(q_max) for mode %s is(are) 0 ! \n',sprintf('%d ', find(~q_max)));
error('Maximum number of factors(q_max) for mode %s should be intergers and greater than 0!',sprintf('%d ', find(~q_max)));

26 matlab在一个向量中删除其中一个子向量的两种方法:分别使用ismember和setdiff函数。

teindex = 3:3:30; index = 1:30;
isindex = ismember(index, teindex);
trindex = index(~isindex);

除了用ismember函数外,还可以使用setdiff函数

[D, ia] = setdiff(index, teindex);
E = index(sort(ia));

setdiff得到的D是按照升序的顺序进行排列的,故需要重新排列。

27 给定张量数据每个mode的最大因子数量,生成该mode的所有候选因子模型

qmax = [6,6,6];
candq = cellfun(@(x) 1:x, num2cell(qmax), 'UniformOutput',false);

28 给定张量数据每个mode的候选因子模型的集合,生成张量数据的所有候选模型

qall = cartesianProduct(candq);

function cartProd = cartesianProduct(sets)
    c = cell(1, numel(sets));
    [c{:}] = ndgrid(sets{:});
    result = cell2mat( cellfun(@(v)v(:), c, 'UniformOutput',false) );
    cartProd = sortrows(result, 1:numel(sets));
end

29 生成给定的多个向量的笛卡尔积

a = allcomb(1:6,2:5,1:8);

allcomb.m文件来自File Exchange. 或者使用28的cartesianProduct函数。


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


相关文章
技术文档
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
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空