学习来源:MATLAB教程-台大郭彦甫 (02-06集)
https://www.w3cschool.cn/matlab/matlab-5use28gb.html
1 数据都以矩阵为基本类型。标量是1*1矩阵,向量是一维矩阵(亦称一维数组),矩阵是二维数组,还有多维数组(三维+)
2 与其他编程不同,万物始于1而非0。如矩阵第1行就是首行。
3 函数function定义,调用时用的函数名应该是文件名而不是定义的函数名;与script类似,都是.m的文件类型
3.1 注意有个小技巧:
我们知道.*是基于element操作的,这里为何要采用这种方式而不是单纯的*呢?原因在于通过这个操作符,我们可以额外支持例如向量中的元素操作,而不是把其作为向量积操作。
例如:
3.2 function handles:定义一个简介的function语句,可在脚本中调用
f=@(x) 2*x; 其中f是函数名,x是输入参数,2*x是函数体。在后面的调用中,只需f(1),即可输出2。
3.1 无参函数
function f
xxx
end
3.2 有参函数
function [return值] f(x1,x2,...)
xxx
end
4 基础绘图
4.1 两种方式(注意:y与x的关系已事先定义)
·plot(x,y);
·plot(y); %x的范围由y定,,n是y的长度,如下图例子
4.2 调整样式
1)plot(x,y,'str'); %str由表示函数曲线的样式对应的字符拼在一起的字符串
4.3 其他操作
1)hold on 使多个曲线显示在一张图中
2)legend() 对各曲线的命名显示
3)title(), xlabel(), ylabel(), zlabel()
4)text(), annotation() %前者可用于在图中显示曲线的名字(注意,text中公式用的是latex格式),后者也用于将其用箭头指向某个曲线
5)图形对象 属性修改
对象:图,轴,线
修改对象属性:1.获得对象handle;2.fetch或modify对象属性
1.获得对象handle:
2.fetch或modify对象属性:
get(),se()
如:
获得属性值:
x = linspace(0, 2*pi, 1000);
y = sin(x); h = plot(x,y);
get(h); get(gca);
设置属性值。例如坐标轴数字大小,范围
set(gca, 'XLim', [0, 2*pi]);
4.4 图片显示样式、位置、大小等调整
1)显示多个窗口(图)
注意,此时再获得gcf时获得的是第二张图,而不是两张图(默认获取最后一张图)
2)位置大小
3)一个窗口包含多个小图
subplot(m, n,1); %分为m*n个小图,并且此时的位置是1
4)调整Grid, Box, and Axis的显示与否或形状
4.5 存图到文件
也可以使用print (To control size and resolution)
4(2) 进阶绘图
1)特殊figure
(注意x,y轴的范围取值)
(注意AX(1/2)和set/get的使用)
(hist(·,·)第一个参数是输入数据集,第二个数据表示细分成多少柱子)
(Bar charts 条形图: 图2第一堆表示x vector,第二堆表示1:5; bar3: 3D条形图)
(堆叠:关键词'stacked';横向:barh(·))
(饼状图:解释见下图)
(极坐标图:POLAR(THETA, RHO) 当中,THETA是用弧度制表示的角度,RHO是相应的半径。)
(阶梯图和火柴梗图;注意:linspace 不是 line space 的缩写,是linearly space 线性空间的缩写,其最后一个参数是取样个数)
(这是练习题,右边为我的解答,因为5HZ=0.5s,所以应该选0~10中的50个x)
(统计相关的,用到的时候再说吧)
更多图类型可见官网:
高阶绘图操作:
1)fill() :画图并填充
2)颜色空间
3)imagesc() 可视化数据为一张图
imagesc(A) 将矩阵A中的元素数值按大小转化为不同颜色,并在坐标轴对应位置处以这种颜色染色
加上colorbar;
colormap(Name); %修改色系
自己定制colormap
例如变成如下的绿色系,用右图的方法
4)3D绘图
A. plot3(): 例如在三维平面画三个3D曲线
B. Surface Plots
使用meshgrid构造X,Y矩阵,给出x,y的取值情况
C. contour() 3D投影到2D 格式:contour(X,Y,Z);
不同contour() 样式:
meshc() and surfc():mesh/surf与contour结合
D.View Angle
view(-45,20); %指定view位置
E.Light
F. patch() 画多边形
5 要运行一个script,得先把“当前文件夹”转为该文件所在的文件夹,使用chdir dir_name
6 数据类型 char, numeric (default: double), logical, cell({}), structure
7 eps (stands for a very little number): 2.2204e-016
8 加‘;’表示不显示。如a=1按运行就会输出a=1; 若a=1;则不会输出
9 矩阵索引
9.1 如取“21”,法一:A(1,2); (即有逗号在中间) 法二:A(4)(即没有逗号)
9.2 如要删掉矩阵A的第三行:A(3,:)=[];
9.3 矩阵(向量)操作符:
A*B 正常乘; A.*B 同等位置上元素分别乘,并放回原来的位置
A/B约=A*inv(B); A./B 同等位置上元素分别除,并放回原来的位置
A/a=A./a
A^a=A*...*A; A.^a 对每个元素操作
A‘ 转置操作
max(A),sum(A),mean(A),sort(A),find(A==a).......
9.4 一些特殊的矩阵
如eye(n):n*n的单位矩阵
10 script应用技巧
10.1 打开matlab要右键“以管理员身份运行”,不然不能写代码。。
10.2 点开这个,可以寻找忘记的函数名字
10.3 “%%”后面加一段代码,表明是一节,运行时可选“运行节”,即可选择单独运行哪一节;如选“运行”,则执行的是所有的节
10.4 debug模式:给某行加断点,然后run,程序就会在该行先暂停执行,此时我们可以把鼠标移到某变量处查看此时的值。如果要继续的话,可以点“继续”
10.5 “智能缩进”可以自动调整间距,看得更清楚
10.6 pre-allocation预先分配内存,防止重复寻找更大的内存并重新copy原始数据以引起时间资源浪费。如提前建立一个200行200列的空(零)矩阵
10.7 "..."换行号,相当于把第二行直接接在第一行
11 特殊数据类型
11.1 字符串 string
替代某个字符的操作,例如 str='abcabc'; 'a'==str 输出 100100; str(str('a'==str))='d' 输出 dbcdbc
11.2 结构 structure (可用于存储异类数据)
1)基本内容: 定义 Structure_name=struct('字段名1','字段名1对应的值','字段名2','字段名2对应的值',...);
字段 field (相当于那个结构的属性);表示同一个结构的不同实体:如 student(1),student(2),...
2)操作
3)nesting 链接操作
structure里面的一项是另一个structure,用指针链接
如A=struct('name', 'cindy','age', 23, 'nest',struct('school','fzu')),字段名用'nest'
11.3 cell array 单元数组 (也可用于存储异类数据)
1)结构与矩阵类似,只是每个单元格中的内容不再要求是同类的;使用{}表示;在matlab中每个单元格用指针指向存储的数据
定义方法有两个:A(1,1)={...} 或 A{1,1}=...;
2)操作
num2cell;mat2cell(矩阵分块)图中例子B=mat2cell(A,[10,20,30](行分块),[25,25](列分块));
3)cat() 操作:连接 cat(1/2/3(1对应竖向连接,2对应横向连接,3对应layer连接即下一维),A,B);
4)reshape() 操作:改变array的维度大小,但必须满足r1*c1=r2c2;
12 文件存取
1)file system to workspace :load ; workspace to file system :save
格式:mat/text:load/save;excel:xlsread/xlswrite
2)save/load
save xxx.mat %但是点开文件不是直接可见;save xxx.mat -ascii %点开文件直接可见
load('xxx.mat'); load('xxx.mat','-ascii');
2)xlsread/xlswrite
xx=xlsread('xx.xlsx');xx=xlsread('xx.xlsx','B2:D4'(限制读取范围));%但是都是只读取里面的数值,不能读字符串
xlswrite('xxx.xlsx', writed data, sheet number ,location (e.g.,'F2:F4'));
3)读取数值+非数值数据
[Score Header]= xlsread('xx.xlsx');
4)Lower-level file I/O