以下内容为个人笔记,部分图片来源于郭老师课件或课程截图。
笔记汇总:MATLAB基础教程
课程视频:MATLAB基础教程-台大郭彦甫(14课全-高清-含课件)
int
需要显示指出位数,没有普通的 int
,对于 float
,对应matlab中的是 single
;x = int32(4)
;x = 'c'
像这样用单引号括起来一个字符,即为 char 类型字符串实际上是个字符 array ,因此可对其进行矩阵操作:
存储异构数据的另一种方法,与矩阵相似,但每个条目包含不同类型的数据;
声明使用 {}
,如图两种方式均可:
使用 C = {, , ; , , }
创建一个 2×3 的 cell
,
用来分隔 cell 中的列, ;
用来分隔 cell 中的行
cell2struct() 通过 cell 数组中包含的信息创建一个结构体,重点了解!
num2cell() 将数组转换为相同大小的 cell
mat2cell() 指定行、列划分数组为 cell
[A; B]
与 cat(1, A, B)
效果一致;[A B]
与 cat(2, A, B)
效果一致size(A, 1)
:第 1 维的长度,上图中 dim1 的宽度,即列宽;size(A, 2)
:第 2 维的长度,dim2 的宽度,行宽;size(A, 3)
:第 3 维的长度,dim3 的宽度isinteger()、isnan()、iscell()、isempty() 等方法,如他们的名字一样,用来核实变量类型。
save mydata.mat
储存load('mydata.mat')
读取save mydata.mat
将数据以 matlab 私有格式存取为二进制文件,其他文本编辑器如 notepad 无法读取文件内容,但matlab使用 load()
读取文件时将得到完整数据(包括变量名、数据内容等)save mydata.mat -ascii
实际上将所有数据存储为一个矩阵,其他文本编辑器可以读取到文件内容,但 matlab 使用 load()
读取文件时将所有数据以一个矩阵形式存入一个 matrix 变量中(如果行列无法对齐的话 matlab 还会报错)mydata1.mat
中存储的数据如红框所示,load()
正常读取;mydata2.mat
中存储数据与 mydata1.mat
中一致,但以 -ascii
形式存储,读取时因为行列无法对齐报错;mydata3.mat
中存储的是 mydata1.mat
中删除一个 1×2 的 vector ans
后的数据,以 -ascii
形式存储,load()
得到一个 8×4的矩阵。save('pqfile.mat','p','q')
或者 save pqfile.mat p q
将指定变量 p
、q
保存到文件 pdfile.mat
中关于 xlsread() 和 xlswrite:从 R2019a 开始 matlab 建议不再使用,以新函数代替。经过比较,新函数确实更加好用,也支持更多的文件格式,下面介绍新函数。
readmatrix()
只读取数据,如果指定范围内有其他内容(如 string 等),将直接跳过;M = readmatrix('filename.xlsx','Sheet','sheetname','Range','rangenumber')
M = readmatrixd('filename.xlsx')
读取文件中所有数据;filename
中指定完整路径名;readcell()
:将内容读取为一个 cell
使用方法与 readmatrix()
一致,但 readcell()
不止读取数据,而是读取指定范围内所有内容,并以 cell 存储入变量 M
writematrix()
将矩阵写入 .txt 文档:writematrix(M)
则默认以逗号分隔各元素写入 M.txt 文件中;writematrix(M, 'filename.txt', 'Delimiter', ' ')
;
、\t
、,
、;
、|
(对应的字符名称为 space
、tab
、comma
、semi
、bar
)作为分隔符writematrix()
将矩阵写入 Excel 文档writematrix(M, 'M.xls')
将矩阵 M 储存的数据写入表格 M.xls
writematrix(M, 'M.xls', 'Sheet', 2, 'Range', 'A3:E8')
规定范围写入指定表格,注意参数列表中 sheet
后的参数可以是表格名也可以是第 x
个表格
使用 writecell()
将 cell 写入 Excel 文档,调用格式与 writematrix()
一致;
关键在于如何将数据与字符同时写入文档,我尝试过将数据矩阵和表头矩阵放入一个 cell 中,效果并不理想。matlab 在写入时,似乎将 cell 的一个单元放入一个格子中,这也就意味着如果要得到预期效果需要将每一个数据以及每一个表头都作为 cell 的一个单元存储,似乎比较麻烦。我尝试使用以下方法:
将横轴的表头以 1×n 的 cell 存入 title1
:title1 = {'day1', 'day2', 'day3', 'day4', 'day5', 'day6'}
;
将纵轴的表头以 n×1 的 cell 存入 title2
:title2 = {'mut1'; 'mut2'; 'mut3'; 'mut4'; 'mut5'; 'mut6'}
;
再利用 writecell()
写入指定位置即可:
该代码完整写入了表头和数据,效果如下:
无论是写入还是读取都要先获得 file id
,即通过 fopen()
函数返回值获得;
写入时,fopen()
函数的 permission
参数处为 w
,读取时为 r
;
操作完毕后务必使用 fclose(fid)
函数关闭文件,否则 matlab 将一直占用文件;
feof(fid)
检查是否到达文件结尾,到达结尾返回 true
:
s1 = 'I like the letter E';
s2 = s1(size(s1, 2):-1:1) %从s1的最后一个字符向前一个一个拷贝给s2
s3 = reverse(s1) %直接使用函数
B(1,1)={'This is the first cell'};
B(1,2)={[5+6j 4+5j]};
B(2,1)={[1 2 3; 4 5 6; 7 8 9]};
B(2,2)={[{'Tim'}, {'Chris'}]};
B