% 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;
strcmp('AECM','AECM'); %返回逻辑值,0或者1
strcmpi(s1,s2); %此 MATLAB 函数 将比较 s1 和 s2,并忽略字母大小写差异。如果二者相同,函数将返回 1 (true),否则返回 0
(false)。如果文本的大小和内容相同,则它们将视为相等,不考虑大小写。返回结果 tf 的数据类型为 logical。
switch alg % alg 代表算法的名字如CM,AECM
case 'CM' % 如果alg='CM',执行本段代码
case 'AECM' % 如果alg='AECM',执行本段代码
addpath
cd('./temp') %切换到当前路径的temp文件夹
cd('../data') %切换到上一级目录的data文件夹
%% 一个点代表当前目录,两个点代表上一级目录
A = cat(3,magic(3),rand(3));

将三维矩阵 X X X形成二维矩阵并按照如下格式排列: X = ( X 1 X 2 , . . . , X n ) X = (X_1 X_2,...,X_n) X=(X1X2,...,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]);
当矩阵X的维度特别大时,有时我们只需要得到矩阵X’X的对角元素,而非矩阵X’X的全部元素,matlab如果直接用X’*X会很慢,在此利用点乘的想法实现快速计算:

矩阵X’X的对角元素为:

以数字形式返回 name 的类型。此列表描述与每个返回值关联的类型:
MATLAB搜索从搜索路径的顶层开始并向下移动,直到找到结果或到达路径上的最后一个文件夹。如果一个文件夹中存在多个 name,根据函数优先顺序,MATLAB 将显示name 的第一个实例。文件夹是函数优先级规则的例外。除变量和内置函数外,它们的优先级高于所有类型。
此函数一般包含两个参数,第一个参数表示name,第二个参数表示搜索的内容的性质(是变量?还是文件?还是目录等?),第二个参数主要取以下值:第二个输入(可选)必须为 ‘var’、‘builtin’、‘class’、‘dir’ 或 ‘file’。
例:我要查看工作区的变量中是否具有s2这个变量:
exist('s2','var')


该函数通常和~符号连用
if(~exist('s2','var')) s2 = 1; end
解释:如果不存在s2这个变量,则定义变量s2 = 1。
isfield函数:
isfield判定由这些字符串表示的域是否是结构体的域。返回值是个逻辑型 数组 。
student = struct('name', 'John', 'age', 20, 'score', 90);
x = {'name','salary'};
isfield(student,x);

返回的是逻辑值1或者0。
转载: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代表换行符。
转载: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附近求零点。


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’;
A = rand(1000,1000);
B = rand(1000,1000);
tic
trace(A*B);
t1 = toc
tic
C = B';
sum(A(:).*C(:));
t2 = toc
求两个矩阵乘积的迹
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'

fprintf([repmat('%d\t', 1, size(A, 2)) '\n'], A');
feature('numcores')
plot(x,y,'ko','markerfacecolor','r','MarkerSize',5); %标注实心点
plot(ind,D(:,1),'b-.',ind,D(:,2),'--',"LineWidth",1.5);
line([5 5],[min(elvhbic) max(elvhbic)],'linestyle','--', 'Color','black');
[B,t] = rotatefactors(A,'method','varimax');
A是因子载荷矩阵,B是旋转后的因子载荷矩阵。
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');
function [result]=some_fun(param1, param2)
if (nargin<3)
param3 = 'default_param3_value';
end
...
end
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
a = rand(3,4,5);
c = mat2cell(a,3,4,ones(1,5));
set(gca,'looseInset',[0 0 0 0]);
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]);
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)));
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是按照升序的顺序进行排列的,故需要重新排列。
qmax = [6,6,6];
candq = cellfun(@(x) 1:x, num2cell(qmax), 'UniformOutput',false);
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
a = allcomb(1:6,2:5,1:8);
allcomb.m文件来自File Exchange. 或者使用28的cartesianProduct函数。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删