matlab的学习经验

来源:互联网 发布:清华大学女生自慰知乎 编辑:程序博客网 时间:2024/05/29 17:09

Matlab是一个基于矩阵运算的软件,J = 0;
lt = size(imf1,2);
for (i = 1:lt)
if (abs(imf1(i)) > 1)
J = 1;
break
end
end

上面的代码实现了一个目的――检查信号imf1(一个向量)是否存在绝对值大于1的点,这显然是基于C++的思想写出来的。如果在matlab下面,其实用两个语句就足够了(当然,可以合并为一个):

q = find(imf1>1);
J = ~isempty(q);

这样的修改带来的好处是很可观的。

又如:

for j = 1:num
imf1(start1+j) = 2*li1(j+1) - imf1(start1+j);
end

这是一个对称翻折的问题,它完全可以用以下这个语句简洁表示:
imf1(start1+1:start1+num) = 2*li1(2:num+1) - imf1(start1+1:start1+num);

因此,如果是新手,可以先用循环(基于C++的思想)来编写代码,然后看看能否用matlab的语言(基于矩阵的思想)来改进。当然,这样做的前提是你对matlab提供的一些函数比较熟悉才行,这些函数在matlab的“帮助”那里搜索“Functions Used in Vectorizing”就可以找到一些,其他的也可以找相关的书籍(没找到?不可能,电子版总可以下载到的)

对提高matlab编程能力的方法,我想主要有以下三个:
1. 查help
2.see also:不可小瞧的关联

3. lookfor: matlab中的google

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文件名列表

7. 各个高校bbs的mathtools版

谁都不可能什么都懂,但是永远记住这样一句话:Two heads are better than
one. 多向他人请教,多相
互讨论,这不只是在于解决matlab的问题上。
我最经常去的bbs有:
.瀚海星云(http://fbbs.ustc.edu.cn/的mathtools版
.水木清华(http://www.smth.edu.cn/ver2.html的mathtools版
.饮水思源(http://bbs.sjtu.edu.cn/的mathtools版
.紫丁香 (http://bbs.hit.edu.cn/的matlab版

8. 一些专业网站

我所知道的有:
1) http://www.mathworks.com mathworks的官方网站
2) http://www.mathtools.net/MATLAB/index.html 这里有很多好的工具箱或者
小的辅助函数
可以下载,不过是国外的,e文和网络对来说感觉都是很不爽的事情。
3) http://matlab.myrice.com/ Matlab大观园,估计只要在网上搜索过matlab
资料的就不会不知道它,园主
是东北大学的薛定宇教授,一直从事MATLAB语言及其应用研究。
4) http://passmatlab.myetang.com/MATLAB/INDEX.HTM文宇工作室
5) http://sh.netsh.com/bbs/5186/ matlab语言与应用,薛定宇的一个论坛
6) http://www.matwav.com/resource/newlk.asp中国学术交流园地,除了matla
b有关外,还有很多其他的
专业的文章。

最后一条,要大胆的去试,哪怕只有一丁点儿可能。

譬如,早些时候,有朋友问我:我用什么命令可以查找所建立网络的属性的含义,
比如说:我建立网络net=newff(minmax(p),[3,1],
{'tansig','purelin'},'traingda');想看看net.trainParam。lr_inc属性是啥含义用什
么命令查看呢?
当时,我根本连练习都没有用matlab的神经网络工具箱的东西练习过。我help
newff也没有结果,
后来实在没有办法,就试着help参数值traingda,没有想到还居然真的就找到答案了。
还有,曾经有朋友想把waitbar的默认颜色的红色改掉,我用help 没有发现可以改
变其填充色的property,后来
我看了waitbar.m,发现其填充色本来就不试一个可变参数,但是既然发现了是什么地方
,就可以自己改变的,这都得益于matlab
的开放性。这也为我们提供了很大的灵活性(在他的基础上,我们可以做很少的变换,
就自己写一个填充色可以以属性输入而改变的waitbar的)

最后,matlab只是一个很好的应用工具而已,也不像vc,delphi,vb等开发工具,
最多的还是应用于算法的验证,仿真等。我们应该
的是尽可能的知道一点儿基础的,然后熟悉本专业的toolbox。

个人小小的一点经验,相信很多人都知道了

1. m文件如果是函数,保存的文件名最好与函数名一致,这点都很清楚。不过容易疏忽的是,m文件名的命名尽量不要是简单的英文单词,最好是由大小写英文/数字/下划线等组成。原因是简单的单词命名容易与matlab内部函数名同名,结果会出现一些莫名其妙的错误。例如,写个m文件,命名为spy,运行时就弹出一个怪怪的figure,呵呵,我当初还以为是什么bug。
2. 调试程序时,经常要屏蔽掉一整段程序进行,也就是将其标示注释符%。有两个办法:一种是选定后 ctrl+r和ctrl+t 一种是在段首加 if 0 ,段尾加 end,中间都不执行,也就相当于注释掉了
3. 写m文件时,选中某段程序内容,ctrl+i 让matlab帮你自动对齐程序。这样程序看起来很有层次,容易发现程序中的错误。
4. 还有,ctrl+F2作标签,ctrl+g 跳至某一行,这些快捷键都很实用。

原创粉丝点击