抽空看了Matlab官方文档,并配合郭老师的课程,把Matlab语言系统梳理了一遍。先上资源:
bilibili良心搬运大法:
MATLAB_台大郭彦甫-视频教程
知乎盐选推荐基础教程:
MATLAB 2016_基础实例教程
以下记录了一些matlab的技巧。
【1】基础操作
1.1 命令行操作
- whos:查看存在的变量名和形态
- clear all / clear 变量名:清除全部/某变量
- clc:清除命令窗口内容
- close all:关闭画图窗口
1.2 输出精度:format +变量精度
- format + long/short:64位/32位
- format + Rat:分数
- format + longE/shortE:64/32位科学计数法
1.3 vector/matrix
matlab的默认一维数据是列vector。所以对matrix的命令,返回值都和列相关。
A = [1 3; ...4 5; ...9 8]
max(A):9 8 %查找列vector的最大值
sort(A): [] %每列vector升序排列
length(A): 2 %有几列vector
1.4 matrix基本运算
- matrix对应元素加减乘除:+、-、 .* 、./
- 单位阵:eye(n)
- 零阵:zeros(n1,n2)
- 全1阵:ones(m1, m2)
1.5 调试
- 打印变量:disp()
- “%%”代码分块,【run section】可以只运行某一个代码块。
【2】总结的技巧
2.1 pre-allocation提高运算速度
虽然matlab是动态语言,但是【预先分配变量】可以明显提高运算速度。
例如:section1中预定义了A = zeros() ,比 section2 的运算速度快了近40倍。
2.2 struct+cell 模态
【struct】
struct('fieldname', 'value'),和数据表很像,常用操作:
- fieldnames (struct) 查找字段名
- rmfield(struct, fieldname),删除字段名
- isfield(struct, fieldname) 查找字段
【cell】
Acell{1,1} = [1 2 3], Acell{1,2} = 'abc'.
Acell{1,3} = 1:1:10, Acell{1,4} = [].
cell本质是一个pointer, 因此可以存放不同形态的变量,可以参考C语言中的指针。
【struct + cell】
自己做实验采集的数据会面临数据按结构存储的问题。为了解决【每个subject实验中数据量不同,且每个实验样本数据的长度不一】等问题,我使用了struct嵌套cell的好办法:
Subject(1).Name = 'Liming';
Subject(1).Age = 26;
Subject(1).Data{1,1} = {};
Subject(1).Data{1,10} = {}; % 10 trialsSubject(2).Name = 'Jenny';
Subject(2).Age = 30;
Subject(2).Data{1,1} = {};
Subject(2).Data{1,6} = {};
2.3 数据IO
自己平时和. csv文件交互较多,matlab常用的csvread()只能读取number,无法读取header。为了保证读写的完整性,常用如下方法:
【Input】
importdata( 'file.csv' )
data存数据,textdata存header。
【Output】
利用底层的 fopen, fprintf, fclose组合进行操作。
x = 0:pi/10:pi;
y = sin(x);
fid = fopen('TestSin.csv','w');
fprintf(fid,['%s',',','%s','n'],'X','Y') % header
for i = 1:11fprintf(fid, ['%f',',','%f','n'], x(i),y(i)); % number
end
fclose(fid);
2.4 cat() 数据拼接
【3】画图
3.1 plot
感叹Matlab画图的功能是真的强大!虽然看起来比较繁琐,但是捋清了显示一幅图像的过程,画图其实也是模块化步骤。
一张图被分为:Figure、Line、Decoration三个部分。
Figure Object包括:图片大小、位置等
Line Object包括:线条颜色、粗细等
Decoration Object包括:标题、标注等
gcf和gca句柄,利用get()函数查看可编辑参数;set()函数修改每个参数。
【Figure Object】
f = figure
h = plot([1,2,3]);
get(gcf); % figure object
h; % line object
get(gca) % decoration object
get(gcf)显示了figure object的所有参数:
set(gcf, 'para','state')可以调整任意参数。
【Line Object】
【Decoration Object】
3.2 Colormap
colormap()返回的是color矩阵,例如:a = colormap(hot)
hot/cool/gray/hsv是不同的色盘,选择不同的色盘可以返回对应的颜色矩阵。
3.3 图片输出
print(figure(1),'figure_name','-dpng','-r900')。其中:-dpng和-r900是格式和分辨率。
其他图片格式如下:
以上是我记录的编程技巧。如果想看更全面的学习笔记,我推荐一个CSND博主:
台湾国立大学郭彦甫Matlab教程笔记blog.csdn.net