一、常用的操作命令
cd设置当前工作目录
md创建目录
dir列出指定目录下的文件和子目录清单
exit关闭/退出MATLAB
quit关闭/退出MATLAB
clf清除当前图形窗口内的图形
clc清除命令窗口的显示内容
close关闭指定图形窗口
clear清除MATLAB工作空间中保存的变量
whos显示工作空间中的所有变量信息
more使其后显示的内容分页进行
type显示指定M文件的内容
二、常用快捷键
↑调出前一个输入的命令
↓调出后一个输入的命令
←光标左移一个字符
→光标右移一个字符
Ctrl+←光标左移一个单词
Ctrl+→光标右移一个单词
Home光标移至行首
End光标移至行尾
Esc清除当前行
Del清除光标所在位置后面的字符
Backspace清除光标所在位置前面的字符
F9运行选中命令
Ctrl+k删除光标之后到行尾的所有字符
Ctrl+c中断正在执行的命令
Ctrl+d打开当前变量或函数文件
Ctrl+0打开Command Window:
Ctrl+1打开Command History:
Ctrl+2打开Current Folder
Ctrl+3打开Workspace
Ctrl+R注释选中的内容
Ctrl+T 将选中的被注释的语句删除注释
三、dir函数用法
dir函数可以获得指定文件夹下的所有子文件夹和文件,并存放在一个文件结构的数组中,这个数组各结构体内容如下:
name -- 文件名
date -- 修改日期
bytes -- 文件大小
isdir -- 目录是1,不是为0
datenum -- matlab中特定的修改日期
使用方法:
dir ( ' . ' ) 列出当前目录下的所有子文件夹和子文件
dir ( ' G:\Matlab ') 列出指定目录下的所有子文件夹和文件
dir( ' *.m' )列出当前目录后缀是.m文件的所有文件
四、eval用法
eval的功能简单来说就是可以把字符串当做命令来执行。
看到有人举的例子:eval('y=sin(1)')与命令 y=sin(1)等价
eval用于循环中是再好不过了,特别是有些变量的名字中含有有规律的数字,比如我们现在要依次把data1,data2,data3写入excel,并命名为data1.xlsx,data2.xlsx,data3.xlsx,当然你可以写三行:
xlswrirte('data1.xlsx',data1)
xlswrirte('data2.xlsx',data2)
xlswrirte('data3.xlsx',data3)
但是假如现在有1000个这种data1,data2,...,data1000呢,这个时候就体现了eval的长处,我们也可以只用三行:
for i=1:1000
eval(['xlswrite(''data',num2str(i),'.xlsx'',','data',num2str(i),')'])
end
%注意上面的eval语句语句中第一个data前面有两个'',而xlsx后面也有两个'',这就是给我们初学者埋下的坑哈哈,两个''号中第一个'代表转义字符,意思是两个''号中第二个'号为命令中的'号,不是用来分割字符串文本的!
%使用eval时只需要先把想要表示的语句即命令写好,再用'号分割成一段段字符串,注意上面提到的'可以用作转义字符的情况
五、strcmp函数用法
strcmp是用于做字符串比较的函数,按复杂程度及比较对像的不同主要可以分为以下三种情况:
1. TF=strcmp(s1,s2);
s1和s2是字符串,比如:s1=‘hello’,s2='matlab'。
如果s1和s2是一致的(identical),则返回值TF=1,否则,TF=0。
2. TF=strcmp(s,c);
s是一个字符串,the c is a cell array,c的元素全是字符串,比如:s=‘hello’,c={'hello','matlab';'HELLO','matlab'}。
返回值TF是一个和c有相同size的logical array,TF的元素是1或0。
3. TF=strcmp(c1,c2);
c1和c2都是cell arrays,并且它们具有相同的size,它们的元素都是字符串,比如c1={'hello','matlab';'HELLO','matlab'};c2={'hello','matlab';'hello','MATLAB'};
返回值TF是一个和c1或c2有相同size的logical array,TF的元素是1或0。
把c1和c2对应位置的元素做比较,如果一致,则TF对应位置的元素为1,否则,为0。
六、cell数组
cell数组一般被叫做元胞数组,它的每个单元可以储存不同的数据类型,可以是数值,字符或矩阵或元胞数组等,类似于学过的c语言里的结构体。
1.cell数组的创建
可以直接通过{}类似于矩阵的直接赋值:a={'winter',123,'coming','哈哈'};
也可以通过cell函数预分配内存,再赋值:a=cell(1,4);a={'winter',123,'coming','哈哈'};
2.cell数组的访问
与普通矩阵,数组的主要区别在于:通过()访问cell数组时访问到的是cell单元,通过{}访问cell数组时访问到的是cell单元储存的内容,举例如下图所示,其他操作基本一样。
3.cell数组相关的函数
cell:创建空的元胞数组,预分配内存
celldisp:显示元胞数组所有内容
cellplot:利用图形方式显示内容
cell2mat:将元胞数组成普通矩阵(要求cell元胞数组的所有内容都必须为相同数据类型,可以为字符,会转化为字符矩阵)
mat2cell:将普通矩阵转化成元胞数组
iscell:判断输入是否为元胞数组
cellfun:为cell数组的每个cell单元的内容执行指定的函数,fun可以是特殊的函数或者句柄
官网解:释A = cellfun(func,C) 将函数 func 应用于元胞数组 C 的每个元胞的内容,每次应用于一个元胞。然后 cellfun 将 func 的输出串联成输出数组 A,因此,对于 C 的第 i 个元素来说,A(i) = func(C{i})。输入参数 func 是一个函数的函数句柄,此函数接受一个输入参数并返回一个标量。func 的输出可以是任何数据类型,只要该类型的对象可以串联即可。数组 A 和元胞数组 C 具有相同的大小。
默认情况下,cellfun 将 func 的输出串联成数组。func 必须返回标量。如果 func 返回对象,则对象所属的类必须满足以下要求。
(1)支持通过对象数组的线性索引进行赋值
(2)具有一个 reshape 方法,可返回与输入大小相同的数组
如果 'UniformOutput' 名称-值对组参数的值为 false (0),则 cellfun 将以元胞数组形式返回输出。在这种情况下,func 的输出可以具有任意大小和不同的数据类型。
matlab官网:https://ww2.mathworks.cn/help/matlab/ref/cellfun.html
b={[1,2,1];[2,1,1];[1,1,2]};
c=cellfun(@(x)(mat2str(x)),b,'un',0)
更一般的例子参见https://cn.mathworks.com/matlabcentral/answers/99632-how-do-i-save-a-cell-array-that-contains-both-strings-and-numbers-to-an-ascii-file-in-matlab
4.cell单元的删除
我们知道矩阵及矩阵的删除可以通过[]实现:
元胞数组操作类似但和其赋值一样有区别,区别就在于{}和()
a={1,2,3};
a{1}=[];%并不能删除第一个cell单元,只是变成空值
a(1)=[];%删除第一个单元
a(:)=[];%一次性删除所有cell单元
七、Matlab中多维数组的建立及使用
1.首先建立三维数组,和二维数组一样,先建立一个3*3的数组,然后添加一个三维数组,使用如下方式:
A = [5 7 8; 0 1 9; 4 3 6];
A(:,:,2) = [1 0 4; 3 5 6; 9 8 7]
2.还有一种方式就是使用cat函数,例如:
B = cat( 3, [2 8; 0 5], [1 3; 7 9], [2 3; 4 6])
显示结果如图:
3.那么如何查看当前多维数组的维数及大小呢?可以直接使用SIZE 和NDIMS进行查看,如图:
4.查看并选择对应的元素,可以通过下标来选择,如图:
5.那么如何操控多维数组呢?通过下面方式就知道了。
A = rand(3,3,2);
B = permute(A, [2 1 3]);
C = permute(A, [3 2 1]);
6.还可以从多维数组中选择二维数组,示例脚本如下:
A = cat( 3, [1 2 3; 9 8 7; 4 6 5], [0 3 2; 8 8 4; 5 3 5], ... [6 4 7; 6 8 5; 5 4 3]);% The EIG function is applied to each of the horizontal 'slices' of A.
for i = 1:3
eig(squeeze(A(i,:,:)))
end
7.最后就是创建示例图片,可以使用如下脚本:
x1 = -2*pi:pi/10:0;
x2 = 2*pi:pi/10:4*pi;
x3 = 0:pi/10:2*pi;
[x1,x2,x3] = ndgrid(x1,x2,x3);
z = x1 + exp(cos(2*x2.^2)) + sin(x3.^3);
slice(z,[5 10 15], 10, [5 12]); axis tight
转自:
https://blog.youkuaiyun.com/vainfanfan/article/details/72611735
https://blog.youkuaiyun.com/qq_38412868/article/details/79185883
https://blog.youkuaiyun.com/feitianziyouaoxiang/article/details/46492111
https://blog.youkuaiyun.com/qq_38412868/article/details/79303083
https://jingyan.baidu.com/article/2f9b480de8a64941ca6cc251.html