11条Matlab实用小技巧

11条Matlab实用小技巧
2011-02-25 15:36
1.在用循环画很多图时,为了减少对内存的占用,可以设置图像不显示,直接保存起来。其实也很简单,就是在plot等语句前加上一句:figure('visible','off')。这样画图时就不显示了!<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

2.记得很久以前就有这种想法:如果一下画很多图,一张张手工存,岂不很累?!也很傻吧!^_^ Matlab应该有可以直接存储图像的命令!抑或是同样归因于自己的懒惰,也抑或是实际的工作还没有真正逼着自己想办法解决,直到上次Lozovatsky来才真正实现!老拉的一句话给了我很大的刺激:Why not ask Matlab?!是呀,最好的参考资料不就是它自身的Help嘛!其实,也很简单,也让我再次折服于Matlab的通俗性,不就是相应英文单词的组合嘛!saveas(gcf,filename,'emf')看到后自己都有点哭笑不得!

3.对于时间的标注,datanum与datetick这两个命令很好用!

4.Matlab可不可以建文件夹?!一直以为它不可以,每次都是乖乖地建好,再让它慢慢往里存数据。其实不然,是我们小瞧了它!在Matlab里可以通过system这个命令调出dos命令,比如:执行语句system('mkdir step1')就可以在当前目录下建立名为”step1"的文件夹!在实际编程中,可以结合函数exist使用。比如:

if exist('Step1') == 0
system('mkdir Step1');
end

即:先判断当前目录下是否以存在名为Step1的子目录(文件夹),如果不存在,则建立!

5.以前一直忽略了这个最简单也最实用的小技巧:如果在文本文件里某一行开头加入%,则Matlab读时会认为是注释行,而自动忽略不读!因此,我们可以随意地写表头,只要在前面加入% ,Matlab照样可以load后面的数!^_^

6.对于复杂的文件,还是用fscanf比较方便!格式很随意!

7.m文件如果是函数,保存的文件名最好与函数名一致,这点都很清楚。不过容易疏忽的是,m文件名的命名尽量不要是简单的英文单词,最好是由大小写英文/数字/下划线等组成。原因是简单的单词命名容易与matlab内部函数名同名,结果会出现一些莫名其妙的错误。例如,写个m文件,命名为spy,运行时就弹出一个怪怪的figure,呵呵,我当初还以为是什么bug。

8.调试程序时,经常要屏蔽掉一整段程序进行,也就是将其标示注释符%。有两个办法:一种是选定后 ctrl+r和ctrl+t ,一种是在段首加 if 0 ,段尾加 end,中间都不执行,也就相当于注释掉了。

9.写m文件时,选中某段程序内容,ctrl+i 让matlab帮你自动对齐程序。这样程序看起来很有层次,容易发

现程序中的错误。

10.还有,ctrl+F2作标签,ctrl+g 跳至某一行,这些快捷键都很实用。

1
1.matlab 中经常使用的命令有 help doc type +命令,举个例子>> help rand >> doc rand 可得到相关的帮助信息, type +命令,可以得到m文件的内容,当然,一些内置的函数你是无法看到的,如果你想找一个产生一个1到n的随机顺序的命令,你又不知道命令,怎么变,你想呀,可能和随机,rand 有关,输入help rand,会看到这么一行 See also randn, sprand, sprandn, randperm.一个个看下,help randperm.这个正是你的要求,这里举的是一个简单的例子,是想说用一些你已经知道的用seealso 能帮助你找到一些命令,而这些命令名事先你是不知道的。


一、加注释和消除注释

1)方法一
选中你要加注释的内容,然后选择工具菜单“text | comment”就可以了,如果要把注释变为语句,同样选中要转变的语句,然后用鼠标选择“text | uncomment”就可以了。
或者选中你要加注释的内容,右击鼠标选择“comment”, 如果要把注释变为语句,同样选中要转变的语句,然后右击鼠标选择“uncomment”取消注释。
键盘的快捷键分别是"Ctrl+R"和"Ctrl+T".
2)方法二
采用matlab块注释方法
%{
需要注释不执行的若干命令行
%}
3)方法三
在注释段前面加一行:if LOGICAL(0)
在注释段后面加一行:end
和前两个方法不同,这个方法实际上是通过逻辑判断语句不执行相关的语句
二、自动对方齐原代码

快捷键:CRTL+I

三、除零警告
Warning: Divide by zero.
这个是"除零"警告,说明你程序的某表达式中分母在某处为零了,消除办法很简单,用eps避开0即可,如:
x1=linspace(-1.2,-1-eps,50);
x2=linspace(-1+eps,0,50);
x=[x1,x2];
y=1./(1+x);
plot(x,y)


如果程序中有此问题,可以自己加断点调试,可以很快找到症结所在,但是如果是动态数据的话相对就比较麻烦,可能要从头调整数学模型,但一般这种警告的意思是程序发现了0数值,但自动以一个接近零的数字代替进行运算,在一些情况下也不影响最后的结果。

!

四、中止程序
快捷键ctrl+C 强行中止,程序不能继续运行
程序中用pause命令 自己选择中止断点,可以回车继续运行

1. Ctrl+D打开子程序
在MATLAB的Editor中,将输入光标放到一个子程序名称中间,然后按Ctrl+D可以打开该子函数的m文件。当然这个子程序要在路径列表中(或在当前工作路径中)。实际上该快捷键对应右键菜单中“Open Selection”命令。

2. 列出依赖函数
在Editor菜单中,选择Tools->Show Dependency Report,可以列出当前m文件调用的子程序。如果需要将

程序移动到别的电脑上,使用这个工具可以确保不会漏掉一些东西。这个工具也适用于文件夹。

3. 显示鼠标数据内容
调试程序过程中,程序运行到断
点后,将鼠标移到一个变量名上,将会弹出一个方框,显示该变量的内容。不在调试状态下,怎么使用这个功能呢?在File菜单中打开设置选项(Preferences),选择 Editor/Debugger -> Display,在 "General Display Options" 中选择 "Enable datatips in Edit Mode "。

4. 单元数组的基本操作
清除cell中的元素
合并如下的两个cell数组
c = { 'str1' 'str2' [1x3 double] 'str3'}
而 c = {a(1:2), b, a(3)}
得到:
c = {1x2 cell} [1x3 double] {1x1 cell}

则得到
cell array本质上是数组,前一种操作方式与普通数组的操作方式相同,而后一种方式则是将逗号分隔的各个元素分别一个cell,整体作为一个cell数组。

cell的两种引用方式
a(1) 得到 {'str1'}, 因为a是一个cell数组,所以其中的每一个元素都是一个cell,
而a{1} 得到 'str1'。

5. MATLAB 中的字体平滑
在File菜单中打开设置选项(Preferences),在 Fonts 中,选择底部的“Using antialiasing to smooth desktop fonts”,MATLAB 中默认字号比较小,可以调大一些(可以在下拉菜单中输入数字,更精细地控制文字大小)。有衬线字体打开反锯齿后可能会看起来“发虚”。

6. 同步缩放坐标轴linkaxes
linkaxes命令,可以将一个figure中的各个axes指定相同的坐标范围,实现各个绘图同步放大、缩小。在缩放一个绘图时,其它也会同步缩放。可以同时关联x、y轴,也可以只关联一个坐标轴。

7. 鼠标绘图
MATLAB Help中的Interactive Plotting一文提供了一种在figure中用鼠标绘图的方法,主要使用ginput函数。

8. GUI程序关闭按钮的callback
为GUI窗口右上角的关闭按钮添加回调函数:在GUIDE中打开GUI,在没有控件的地方单击,选中整个figure,右键菜单中选择 View Callbacks -> CloseRequestFcn,m文件中将自动添加该回调函数,输入代码就可以了。
a = {'str1', 'str2', 'str3'};
b = [1:3];
c = [a(1:2), b, a(3)];
cellname(n1:n2) = [];

2. see also:不可小瞧的关联

在用help命令的时候,可能因为我们开始估计的方向不一定完全正确,在列出的帮助信息中没有直接给出的我们要找的东西,但是我们一定不要忽略了在帮助的最后列出的see also。
譬如:曾经遇到一个画椭球的问题。刚开始我以为这个命令函数应该在graph3d中给出的(顺带提一句,只用help的时候我们就可以看到matlab\graph3d - Three dimensional graphs. 。于是乎,我又
help graph3d,很遗憾,在 Elementar

y 3-D plots.中我没有发现画椭球的函数,但是我发现在see also中有SPECGRAPH. 抱着试试的态度,我又help specgraph,^_^,这次在 Solid modeling中找到了
ellipsoid - Generate ellipsoid。

3. lookfor: matlab中的google

当我们很多什么头绪都没有的时候,我们可以求助于它,往往
会收到意想不到的效果。
譬如:曾经在gui编程的时候,遇到过这样一个问题:想拖动鼠标时,要出现一个方框,就像你在桌面上拖动鼠标,会出现虚线框一样。当初我也刚开始一定都不知道该查找什么东西,后来想起用它了。于是乎,>> lookfor Rectangle (很不好意思,当时这个矩形我还是在金山词霸中搞定的-_-)。果然,在其中就找到这样一条信息:GETRECT Select rectangle with mouse.^_^

4. get,set: GUI object 属性的帮手

在GUI编程中,我们可能有时候想改变某些object的属性,或者想让它安装自己的想法实现,但是我们又不
记得这些object的属性,更别提怎么设置他们的值了。这时,可以用 get(handles)得到此对象的所有的属性及其当前值。用set(handles)可以得到对象所有可以设置的属性及其可能的取值。找到我们需要的属性名字和可能的取值之后,就意义用 get(handles,‘propertyname’)取得此属性的值,用set(handles,‘propertyname’,values)设置此对象此属性的值。

5. Edit: 查看m源文件的助手

在应用matlab过程中,可能我们想看看它的m源文件,当然用editor定位打开也行,但是我经常采用的式直接在command窗口中用edit funname.m,就省去了定位的麻烦。

6. 其他常用命令:which,what等

which:定位指定的函数和文件,最好带上参数-all,以便显示更加多的信息
what:获得指定目录的m文件,mex文件以及mat文件名列表

matlab描边
clear
clc
I=imread('c:\\51.jpg');
I1=rgb2hsv(I); %将RGB颜色图转换为HSV颜色图
h=I1(:,:,1);
h=imcomplement(h); %对图像进行求补运算
bw=im2bw(h,graythresh(h));
fill=imfill(bw,'holes'); %填充二值图像bw的洞
imshow(fill);
bwp=bwperim(bw);%检测石子的边缘跟踪,用于计算周长
[B,L,N]=bwboundaries(bwp);
figure;
imshow(I);
hold on;
boundary=B{1};
plot(boundary(:,2),boundary(:,1),'r','LineWidth',2); %描边

相关文档
最新文档