Matlab常用方法备忘
eval用法示例:
string = ['subplot(81',num2str(i),')']; eval(string);
即eval(['string1','string2','string3'])
绘图时设定时程时间:
time = 0:1/sf:(length(signal)-1)/sf;
矩阵非零元素改1,用于深度学习创建训练data,单损伤时设定标签:a为某矩阵,
a(find(a))=1;
去掉图例的边框:
legend('boxoff')
和第3点类似,删掉零段或者近似零段,都是用find函数:
M(find(M<3))=[];
M<3可改成M==0之类的提取字符串中的数字:
regexp(str,'\d*\.?\d*','match')
可以返回str中的所有数字,依次储存在细胞数组(元胞数组)中。
注意,读取cell数组,需要用大括号比如cell{1},如果用小括号读取出来的不是内容而是一个小cell数组。设置符号函数并给其赋值:
使用subs:
syms x m=1; f= 1/x + m; dx=[2:1:5]; y=double(subs(f,x,dx));
注意,如果直接使用
y=subs(f,d,dx)
的话,那么在某些情况(比如f表达式有些复杂),输出的y就是一个sym数组,每一项都是sym(比如y(1)=1⁄2+1),需要改变其类型,才能输出数值。
dx=[2:1:5];
也可以使用dx=linspace(2,5,4);
表示从2到4一共划分出4个数值,包括首尾的2和5。使用@匿名函数:
m=1; f=@(x) 1/x + m; dx=[2:1:5]; for i=1:length(dx) y(i)=f(dx); end
需要注意的是,使用匿名函数的话,那么就无法像subs一样可以直接赋值一个数组给符号函数,使得输出仍是一个对应的数组值。匿名函数就和一个真正的.m文件脚本函数一样。
使用滤波器的时候(比如巴特沃斯滤波器),如果输出NaN,往往是滤波器阶数太大,降低一下阶数即可。