在命令行敲入 dbstop if error
如果运行出现错误,matlab会自动停在出错的那行,并且保存所有相关变量。
新建文件夹:
i=10;
dirname=['dir' num2str(i)];%新的文件夹名
a=['mkdir ' dirname];%创建命令
system(a) %;创建文件夹
1.对两路信号作图时,可用 linkaxes 同步x轴,以便之后手动放大同步查看局部细节,例如:
ax(1) = subplot(2,1,1)
plot(time,signal1)
ax(2) = subplot(2,1,2)
plot(time,signal2)
linkaxes (ax,'x')
当然你也可以同步y轴:linkaxes (ax,'y') ,甚至两轴都同步:linkaxes (ax,'xy') 。
2. 相信很多人都知道hold on指令能用于作重叠的曲线图,但当两曲线值域相差太大时,以至于不能更好地展示彼此的细节,可考虑用如下方法(MATLAB 2016a 开始支持,低版本的用plotyy):
plot(time,signal1)
yyaxis right % 用右边的y轴展示
plot(time,signal2)
偷一张MATLAB官网的图来展示一下效果(侵删)。此方法跟前面的linkaxes有些相似,然而linkaxes能展示多个曲线。linkaxes适合用于自己查看分析,本方法适合作报告节省空间。
@文件夹
matlab中带“+”和“@”字符命名的文件夹是matlab中的一种文件包, 比如:+folder/Tata.m ,matlab就知道这是一个Tata类文件夹;如果你按照普通的命名方式,比如:someOtherFolder/Tata.m ,或者someOtherFolder/@Tata/Tata.m ,这样matlab只能知道这是一个Tata.m文件。
如果你要用classdef定义一些类,用@Tata的形式,可以把一些方法分别放在不同的路径目录下。以下的例子进一步阐明@目录的用法: Tata 类,方法methodOne 和 methodTwo
somePlaceOnThePath/@Tata/Tata.m
somePlaceOnThePath/@Tata/methodOne.m
somePlaceOnThePath/@Tata/methodTwo.m
你也可以把所有用到的方法放在一个单独的文件中:
somePlaceOnThePath/Tata.m
如果你所写的方法比较复杂,而你又想把它放在不同的文件中以方便查阅和管理,可以如下般使用classdef:
文件一:
%# somePlaceOnThePath/@Tata/Tata.m:
classdef Tata
methods
result =methodTwo(obj,arg)
functionmethodOne(obj)
disp('hello from methodOne');
end
end
end
文件二:
%# somePlaceOnThePath/@Tata/methodTwo.m:
functionresult =methodTwo(obj,arg)
%dostuff withobj andarg
end
严格来讲,methodTwo在classdef中的声明是可以省略的,因为这里使用了默认的说明符。如果想把methodTwo作为私有方法,可以用 (Access = private) 。
clear
clearvars -except VarA, VarB
一个数组中,取除了某些元素之外的所有元素
使用setdiff函数
假设
a=1:100;b=[12 17 21 76];
因为某些原因我想取出除了b以外a中的其他所有元素,剩下的记为c
c=setdiff(a,b)
就可以实现了
快速对齐script
我写程序有强迫行为,如果看到脚本没有很好地对齐,比如说这边多一个空格,我觉得挺不舒服的,所以就想办法把代码搞对齐。
Ctrl +A(全选)
Ctrl+i(快速对齐)
主程序与其子函数不在同一文件夹下,该如何操作才能正常运行主程序?
假设我我有一个script,里面大概有十多个子函数,为了避免不必要的麻烦,我把主程序和子函数分开了,常见的是把子函数单独放在一个文件夹下。如果你直接运行主程序,一定会告诉你某些函数或者变量未定义,如何解决这个问题呢?
方法一是,手动setpath把子函数放到搜索路径中去;
方法二,使用addpath(subfolder name),一步到位,是不是很快?!
在当下路径下生成一个文件夹
mkdir(fullfile('.\foldername\'))
生成一个名为foldername的文件夹,这个文件夹可以用来保存你打算保存的某些数据文件
找出某一路径下的所有文件名
dir()
这个在对数据或者文件进行批处理时非常有用
关闭使用fopen打开的各种文档
我写实验程序时,喜欢将被试者或者操作者每一步的操作都记录在案,类似于Log,这个就需要我们用fopen先打开或者创建一个文本文档。但是由于在debug过程中不可避免地犯错而致使程序中止,想删除这个已经打开的文档,这个时候是删除不了的,matlab总是提示该文件在使用中。那么怎么办呢?fclose('all')就可以关闭所有已经打开或者创建的文档了。
waitbar
clc;
clear all;
tic;
disp ('Hello, World!');
h=waitbar(0,'Please wait..');
n=0;
for i=1:100
waitbar(i/100)
for j=1:100
for k=0:100;
n=factorial(2);
end
end
end
close(h)
toc
Matlab coder
把.m文件转成C++与c
MATLAB online plot
https://plot.ly/matlab/
plotly
https://plot.ly/organize/WeisongZhao:home
deploytool
guide
Matlab 操作魔改
如果你有一个编写好的程序,但是数据格式和操作变了,但是框架是一致的,可以利用@文件夹来匹配。
举例:比如A*x原来就是二维矩阵相乘,但现在变成2维卷积了,那么可以这么做:
1. 建立一个新文件夹@XXX
2. 在这个文件夹里新建一个mtimes.m文件
3. 将A的数据格式改成class XXX
A.Amatrix = A;
A = class(A,'XXX');
4. 然后定义mtimes.m
function result = mtimes(A,x)
result = conv2(x,A.Amatrix,'same');
这样原来的result = Ax就变成了result = A⊗x了。