写给MATLAB新手的几句话.docx

上传人:b****6 文档编号:5021255 上传时间:2022-12-12 格式:DOCX 页数:16 大小:32.38KB
下载 相关 举报
写给MATLAB新手的几句话.docx_第1页
第1页 / 共16页
写给MATLAB新手的几句话.docx_第2页
第2页 / 共16页
写给MATLAB新手的几句话.docx_第3页
第3页 / 共16页
写给MATLAB新手的几句话.docx_第4页
第4页 / 共16页
写给MATLAB新手的几句话.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

写给MATLAB新手的几句话.docx

《写给MATLAB新手的几句话.docx》由会员分享,可在线阅读,更多相关《写给MATLAB新手的几句话.docx(16页珍藏版)》请在冰豆网上搜索。

写给MATLAB新手的几句话.docx

写给MATLAB新手的几句话

写给MATLAB新手的几句话(转载,长文~)来源:

 姜宇TPO的日志

(一)

本人接触matlab已经有5年多的时间了,一直想写点东西,但是之前不知道放在哪里才能发挥它的最大作用,直到几天前碰上了这个论坛(有点像诸葛亮遇见姜维,哈哈)。

 

废话不说,我想借贵论坛宝地,写一些经验给使用matlab的新手们,当然了,老大们也可以看看,不嫌弃我写得粗糙的话还可以指点一下,先谢过了~~~~ 

首先我想说的是,matlab跟其他语言不一样(我用的比较多的编程语言,除了matlab就应该是c或c++了,VB和Delphi也接触过,我想版面(matlab版)大部分人也差不多),如果你抱着“把其他语言的思想运用在matlab里面”的话,那么我想,即使程序运行不出错,也很难把握matlab的精髓,也就很难发挥matlab的作用了。

所以,如果你是希望matlab作为VC的附属品,即你不想在matlab上面花太多功夫,只纯粹想用matlab来完成VC做不了或很难做成的任务的话,那么,这篇文章你也不需要再阅读下去了;如果你是希望掌握一门语言、一个工具,使它更有效为你服务的话,那么,希望本文对你有所帮助。

 

Matlab是一个基于矩阵运算的软件,这恐怕是众所周知的事情了,但是,真正在运用的时候(就是在编程的时候),许多人(特别是初学者)往往没有注意到这个问题,因此,for循环(包括while循环)满天飞…………..这不仅是暴殄天物(没有发挥matlab所长),还浪费了你宝贵的时间。

对此,版友MVH在他的“MATLAB 小技巧”一文中也有所涉及,雷同的东西我也就不重复了,matlab的“帮助”里面也有相关的指示。

我这里想说的一点是,初学者往往在初始化矩阵的时候注意到这个问题,懂得了使用矩阵而不是循环来赋值,但是,在其他环节上,就很容易疏忽,或者说,仍然没有摆脱C++的思想。

举个例子吧,下面的代码是我的一个师弟写的,我想他接触matlab也有2、3年时间了(在此说明一下,接触2、3年并不是表示每天都会跟matlab打交道,我本人也不是,只是在一年某几个时间段里面连续使用),但是仍然会出现类似的问题:

1.J=0;

2.lt=size(imf1,2);

3.for(i=1:

lt)

4.if(abs(imf1(i))>1)

5.J=1;

6.break

7.end

8.end

上面的代码实现了一个目的――检查信号imf1(一个向量)是否存在绝对值大于1的点,这显然是基于C++的思想写出来的。

如果在matlab下面,其实用两个语句就足够了(当然,可以合并为一个):

1.q=find(imf1>1);

2.J=~isempty(q);

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

又如:

1.forj=1:

num

2.imf1(start1+j)=2*li1(j+1)-imf1(start1+j);

3.end

这是一个对称翻折的问题,它完全可以用以下这个语句简洁表示:

1.imf1(start1+1:

start1+num)=2*li1(2:

num+1)-imf1(start1+1:

start1+num);

因此,如果是新手,可以先用循环(基于C++的思想)来编写代码,然后看看能否用matlab的语言(基于矩阵的思想)来改进。

当然,这样做的前提是你对matlab提供的一些函数比较熟悉才行,这些函数在matlab的“帮助”那里搜索“FunctionsUsedinVectorizing”就可以找到一些,其他的也可以找相关的书籍(没找到?

不可能,电子版总可以下载到的)!

 

对提高matlab编程能力的方法,我想主要有以下三个:

1.1.查help

2.2.多上上论坛,搜索帖子、发帖子问人

3.3.阅读别人、特别是牛人的程序

4.当然了,正如所有的程序语言一样,“3分课本7分上机”,一定要动手才行,不能光看。

多想、多思考、多尝试,才是正路。

最后,整理一下常用的快捷键(用【】表示)或命令:

1.1.在命令窗口(CommandWindow)中:

2.1)【上、下键】――切换到之前、之后的命令,可以重复按多次来达到你想要的命令

3.2)clc――清除命令窗口显示的语句,此命令并不清空当前工作区的变量,仅仅是把屏幕上显示出来的语句清除掉

4.3)clear――这个才是清空当前工作区的变量命令,常用语句clearall来完成

5.4)【Tab】键――(转自版友心灯)在matlab@看到的:

在command窗口,输入一个命令的前几个字符,然后按tab键,会弹出前面含这几个字符的所有命令,找到你要的命令,回车,就可以自动完成。

目前讨论结果是:

matlab6.5版本中,如果候选命令超过100个,则不显示。

而在matlab7以后版本中,则没有这个限制,均可正常提示

6.5)【Ctrl+C】(或【Ctrl+Break】)――(转自版友yangjin_ren)在matlab程序运行过程中,可能由于程序编写的失误,导致程序不停的运行,在命令窗口输入“Ctrl+C”可以将运行的程序停下来,而不需要将整个Matlab程序关掉。

不过进行此操作的前提是能够激活切换到命令窗口才行,呵呵。

2.在编辑器(Editor)中:

1.1)【Tab】(或【Ctrl+]】)――增加缩进(对多行有效)

2.2)【Ctrl+[】--减少缩进(对多行有效)

3.3)【Ctrl+I】--自动缩进(即自动排版,对多行有效)

4.4)【Ctrl+R】――注释(对多行有效)

5.5)【Ctrl+T】――去掉注释(对多行有效)

6.6)【Ctrl+B】――括号配对检查(对版本6.5有效,但版本7.0无效,不知道是取消了还是换了另外的快捷键,请大牛们指点,其他版本没有测试过)

7.7)【F12】――设置或取消断点

8.8)【F5】――运行程序

其余的例如在Debug状态下的快捷键就不多说了,自己看菜单Debug吧!

 

累了,有时间再写吧。

希望大家多交流~~~~~~ 

Coming:

(以下东西都是一年前做的了,不知道能否记起,呵呵)

1.1)关于神经网络的――调用matlab的nntool命令后的使用问题(我做的时候没有看过其他书籍或资料,是自己闭门造车的结果,如果写之前发现其他书籍有相关介绍的话就不写了)

2. 

3.2)关于外部接口的――matlab与C++Builder的接口,想详细介绍如何利用matcom4.5在C++Builder中调用matlab的代码以及matcom的一些技巧。

由于我不是搞项目开发的(搞科研、搞课题的),所以对VC不熟悉,大学的时候学过一点,不过我想对于搞科研来说C++Builder就足够了,免去很多麻烦,Builder在界面设计和数据库连接上面(我只接触过这两方面)还是做得不错的。

同样,如果发现其他书籍上有类似的东西就不写了

4. 

5.3)GUI方面也写写吧,只是一点点心得或者体会,呵呵,这个相对简单些,篇幅相对要少些。

 

 

 

(二)山城棒棒儿军

 

真正接触matlab一年左右,我很喜欢上了matlab的简单的语法,易于绘制图形,gui编程也非常容易,并且功能强大的开放式的toolbox。

因此,尽管我一直没有这方面的应用,但是我还是对它非常感兴趣。

现将个人的matlab的一点学习体会列在这里,愿能够对大家(特别是初学者)起到一点儿微薄的作用也好。

  

1.help:

最有效的命令(参阅了瀚海mathtools的starrynight网友的文章)  

其实,可以这样说吧,如果离开matlab软件,我想我自己是基本上什么都不会。

一遇到什么问题,通常我的第一反应是:

help,就先说说自己对help的一些常用方法吧。

  

1)命令窗口直接敲“help”,你就可以得到本地机器上matlab的基本的帮助信息。

  

2)对于某些不是很明确的命令,只知道大体所属范围,譬如说某个工具箱,直接在命令窗口中敲入helptoolboxname,一帮可以得到本工具箱有关的信息:

版本号,函数名等。

  

3)知道函数名,直接用helpfunname就可以得到相应的帮助信息。

  

2.seealso:

不可小瞧的关联  

在用help命令的时候,可能因为我们开始估计的方向不一定完全正确,在列出的帮助信息中没有直接给出的我们要找的东西,但是我们一定不要忽略了在帮助的最后列出的seealso。

 

譬如:

曾经遇到一个画椭球的问题。

刚开始我以为这个命令函数应该在graph3d中给出的(顺带提一句,只用help的时候我们就可以看到matlab\graph3d-Threedimensionalgraphs.。

于是乎,我又helpgraph3d,很遗憾,在Elementary3-Dplots.中我没有发现画椭球的函数,但是我发现在seealso中有SPECGRAPH.抱着试试的态度,我又helpspecgraph,^_^,这次在Solidmodeling中找到了ellipsoid-Generateellipsoid。

  

3.lookfor:

 matlab中的google  

当我们很多什么头绪都没有的时候,我们可以求助于它,往往会收到意想不到的效果。

 

譬如:

曾经在gui编程的时候,遇到过这样一个问题:

想拖动鼠标时,要出现一个方框,就像你在桌面上拖动鼠标,会出现虚线框一样。

当初我也刚开始一定都不知道该查找什么东西,后来想起用它了。

于是乎,>>lookforRectangle(很不好意思,当时这个矩形我还是在金山词霸中搞定的-_-)。

果然,在其中就找到这样一条信息:

GETRECTSelectrectanglewithmouse.^_^  

4.get,set:

 GUIobject属性的帮手  

在GUI编程中,我们可能有时候想改变某些object的属性,或者想让它安装自己的想法实现,但是我们又不记得这些object的属性,更别提怎么设置他们的值了。

这时,可以用get(handles)得到此对象的所有的属及其当前值。

用set(handles)可以得到对象所有可以设置的属性及其可能的取值。

找到我们需要的属性名字和可能的取值之后,就意义用get(handles,‘propertyname’)取得此属性的值,用set(handles,‘propertyname’,values)设置此对象此属性的值。

  

5.Edit:

查看m源文件的助手  

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

  

6.其他常用命令:

which,what等  

which:

定位指定的函数和文件,最好带上参数-all,以便显示更加多的信息  

what:

获得指定目录的m文件,mex文件以及mat文件名列表  

7.各个高校bbs的mathtools版  

谁都不可能什么都懂,但是永远记住这样一句话:

Twoheadsarebetterthanone.多向他人请教,多相互讨论,这不只是在于解决matlab的问题上。

  

我最经常去的bbs有:

  

.瀚海星云(  

.水木清华(  

.饮水思源(  

.紫丁香(  

8.一些专业网站  

我所知道的有:

  

1)  mathworks的官方网站  

2)  这里有很多好的工具箱或者小的辅助函数可以下载,不过是国外的,e文和网络对来说感觉都是很不爽的事情。

  

3)  Matlab大观园,估计只要在网上搜索过matlab资料的就不会不知道它,园主是东北大学的薛定宇教授,一直从事MATLAB语言及其应用研究。

  

4)   

5)  matlab语言与应用,薛定宇的一个论坛  

6)   

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

  

譬如,早些时候,有朋友问我:

我用什么命令可以查找所建立网络的属性的含义,比如说:

我建立网络 

net=newff(minmax(p),[3,1],{'tansig','purelin'},'traingda'); 

想看看net.trainParam。

lr_inc属性是啥含义用什么命令查看呢?

  

当时,我根本连练习都没有用matlab的神经网络工具箱的东西练习过。

我helpnewff也没有结果,后来实在没有办法,就试着help参数值traingda,没有想到还居然真的就找到答案了。

  

还有,曾经有朋友想把waitbar的默认颜色的红色改掉,我用help没有发现可以改变其填充色的property,后来我看了waitbar.m,发现其填充色本来就不试一个可变参数,但是既然发现了是什么地方,就可以自己改变的,这都得益于matlab的开放性。

这也为我们提供了很大的灵活性(在他的基础上,我们可以做很少的变换,就自己写一个填充色可以以属性输入而改变的waitbar的)。

 

最后,matlab只是一个很好的应用工具而已,也不像vc,delphi,vb等开发工具,最多的还是应用于算法的验证,仿真等。

我们应该的是尽可能的知道一点儿基础的,然后熟悉本专业的toolbox。

(可惜,我现在一直没有这样的实际应用机会)

 

 

(三)

 

要说体会,我可以总结以下几条:

 

1.多动手写程序、调试 

2.善于利用MATLAB的帮助 

3.善于向别人学习 

4.时间积累 

*多动手写程序、调试 

如果懒得写程序,调试程序,永远无法提高。

我个人认为调试程序更重要。

有些朋友可能在一个程序调试几下出不了结果时,就可能喜欢去问别人,我不太赞同这一做法。

其实,凡事往往经过痛苦折磨后,才会让你印象深刻,收益更大。

我建议在你觉得用尽你努力后,仍然无法有结果时,才去请教别人。

我当初一个程序调试过一两个星期都有过。

在这论坛上,你可以发现不少好的问题,对这些问题,不要光看别人如果解决,也不要光想怎么解决,自己坐下来,动手自己解决一下,那你就会把不是你的知识变成自己的知识。

 

*善于利用MATLAB的帮助 

可以这么说,任何问题都可以在MATLAB的帮助里找到解决的办法。

问题不论大小,都是由更小的问题组成,把大问题化为小问题,小函数,然后再到MATLAB帮助里去找这种小问题,小函数的用法。

说实话,MATLAB里的函数太多,我也经常忘记一些用法,这时HELP就帮忙了。

 

*善于向别人学习 

在你解决一个问题后,你可能会发现别人有更简便的方法解决,更强的函数,就时就是你向别人学习的时候。

说实话,在这论坛上,我也向bzzz,bainhome等学习借鉴不少。

 

*时间积累 

时间长了,积累多了,当然也就有进步了。

呵呵,也许再过几年,你会发现原来问题也不是以前想的那么难。

而lyrock在这里发的也是“打糊乱说,小儿科”,那时你就已经积累不少了。

 

(四)

 

Matlab博大精深,说到底我也只不过是个初学者,只是学的时间比新手长了一点,现在写几句给新手,希望能给你们有点帮助 

1学Matlab并不难,难的是学会怎么用。

  

2不要试图掌握matlab的每一个功能,熟悉和你专业最相关的部分就可以了。

  

3不要问:

明天要交作业了,哪位大侠帮忙写个程序吧,或初学matlab,不懂呀,大哥大姐帮忙写个程序之类的话 

4不要说:

不要让我看matlab英文的帮助我看不懂--谁都是从不懂到懂的  

5不要担心:

我编程能力差,我一定用不好matlab。

  

6不要只问不学  

7学maltab要有耐心 

8看到某本书中或论坛的帖子中解决问题的方法要试着解决类似的问题,要举一反三,要学会变通 

9有了问题先自己想,察看帮助,1个小时后没有结果再问别人,不要一有问题就发问,然后什么都不管了,把希望寄托在别人身上 

10学会用搜索引擎,在网上可以找到很多资料,有的问题一搜索就能找到的,就不要来问别人了  

11多动手写程序、调试 

12多读matlab高手写的程序,帖子,找到一个高手,在几个大的论坛可以搜索出一大堆的帖子,然后慢慢去看吧,从中可以学到很多东西 

13电脑上复制粘贴很方便,对于别人解决的你专业上的问题,最好自己写一遍,这样印象深刻,对于不懂的函数用法的函数,help中查查,能看懂多少算多少,对于程序断点调试一遍,弄清楚每个语句的功能 

14尽量摆脱c编程的习惯,总爱用循环,能不用的循环的尽量不用,掌握矢量化的精髓 

15善于总结,学习过的知识,看过好的帖子可以收藏起来,过段时间再复习一下,一段时间的积累,你会发现你的水平在慢慢提高 

16多用help,seealsolookforget,set等常用命令 

17要大胆的去试,试过才知道可不可以,如有人问可不可以把多个子程序放在一个m文件中,呵呵,试试不就知道了 

18多参与讨论,不要只关心自己的问题,也经常关注别人的帖子,从中也可以学到不少东西的 

先写这么多吧,希望对新手能有点用

 

              (五)

 

 

 

自从2002年3月1日开始接触MATLAB,已经三年多了。

当初花了一个月时间,才进入MATLAB的殿堂。

那时立下了一个小小的心愿,三年里做到与高手平等交流。

现在目标基本上实现了,却找不到前进的方向。

最近在做一些反思,希望能够总结一些经验和教训,对自己,对新来者有一些帮助。

也将我的想法分享给有共同爱好的朋友,感谢这一路走来,有那么多人相伴。

 

一、  孤独的旅程 

二、  学习经验 

三、  网络新大陆 

四、  第一届MATLAB研讨会 

五、  英雄谱 

六、  第二届MATLAB研讨会 

七、  忙乱 

八、  MATLAB俱乐部 

九、  遗憾 

十、  蜕变 

一、  孤独的旅程 

  刚开始学习MATLAB,基本上都是靠自学。

有一位前辈培训了一次,但是时间还是太短了。

那个时候看到MATLAB,只知道是一个很陌生的软件,还是全英文环境。

看到的第一本书,还是一本紫皮的讲Simulink的书。

后来上书店去买了一本铁道出版社的书《MATLAB6.1程序设计与实例》,真是一本好书啊,现在还是我首选的MATLAB书,不时拿在手上翻翻。

 

  通读了这本书,才对MATLAB的概念有所了解。

因为要在界面上显示一个图像,其他人用的是一个pushbutton的CData显示图像,还能用鼠标按来按去。

我记得MATLAB的对象结构上讲了image,后来就想办法用Image显示出来这个图像。

花了三天左右搞定,这是我用MATLAB解决的第一个问题,对自己的鼓动很大。

后来又利用空闲时间,做了一个三角函数的显示模块,原希望帮助初中生学习三角函数,一直没有机会,就此埋没了我的处女作。

 

  再之后就是买书,看书,不看help,因为英文不好。

记得有一次,要写一个界面,按钮画好了,回调函数也写了,可是程序总是运行不通。

那个程序看了几十上百遍,还是没有看出个所以然来。

没有人可以问,没有人可以帮我,心中那个苦闷啊,依然无奈。

只好硬着头皮看help,看MATLAB的sample中的注释。

总算是开了悟,发现函数结构和函数流程没有理清楚。

 

  开始那一年多时间就是这样过来的。

面对问题,自己琢磨,翻书,不行再找help。

Google一下也没有什么有用的资料。

虽然去过Mathworks,难以找到什么好用的东西。

没有多少人可以讨论和交流,听说华为有一些博士在使用MATLAB,可是高人无缘一见啊。

黑暗中的摸索,应该也就是这样的吧。

 

  学习MATLAB的过程是孤独的,MATLAB在软件开发语言中也是孤独的。

同路者少,知音更少。

 

二、  学习经验 

  如果我在技术领域里面还有一点可以说的,那就是学习和使用MATLAB的一些方法和经验。

与很多朋友探讨过,或者传道过,也引起了一些兄弟的共鸣。

今天我想聊一些新的认识。

 

  在与一个同事谈到如何做一个优秀的技术工程师时,我提到了八个字:

悟性、勤奋、坚持、付出。

 

  悟性。

上小学最喜欢的一个字就是悟,以前以为悟就是一个人的慧根。

其实不是这样的,所谓悟就是想。

要保持大脑的活力,要不停的想。

除了上班的时候想,走路的时候要想,吃饭的时候还要想,睡着前再想想。

有很多事情,技术的、非技术的问题,都是可以想明白的。

只有不停的想,才能想明白,想透彻。

我走在路上的时候,经常就在想MATLAB的对象属性,所以我比谁都熟悉这几百个对象属性。

 

  勤奋。

我这个人也比较懒惰的,但是我对自己喜欢的事情还是有一种韧性。

我对勤奋的理解是,你是否每天比别人多学习三个小时?

现在的年轻人,一代比一代聪明。

要不被别人淘汰,要超越别人,只有靠时间堆出来。

每天多学一些,多积累一些。

在别人谈小资的时候,想想一些现实的技术。

看看国外倾泻而下的标准、技术、商品,如何突围?

只有靠我们每个人的勤奋。

每当想起我们那些在国外做了七八年的竞争对手,要在中国打败他们,就只有靠时间、压力和汗水的积累。

喜欢上海的一个理由,就是这里的快节奏,可以不会让我那么懒惰。

有一些事情我想是可以值得骄傲一下的:

有半年时间,平均每天学习MATLAB到半夜两点以后;有两个除夕夜,都是在编写程序。

 

  坚持。

做潜力开发的培训,往往要培养一个人永不放弃的斗志和信念。

搞MATLAB也是这样,涉及的领域太多,每个领域里面都缺乏足够的专家分布在你周围。

那么我们很难有机会接触到真正的高手,对我们的技术细节一一指点。

在遇到实际问题时,就只能靠自己去摸索。

常常是再坚持一两个小时,就能够解决你的问题。

最大的成就感,就在付出了极大的心血和耐心,才取得一个艰难的小胜利。

(真的做完一件事情,也许那感觉就是一个字:

累)印象很深刻的一件事情,有一次SCIE与我聊起一个混合编程的问题,喋喋不休的讲完了第七种方案(因为好几个我没有听懂),依然不能解决问题,又想到了第八种方案。

如果没有坚持,一般人也就能够想到第三步、第四步,如何能够达到圣人的境界?

 

  付出。

这也许是一个过时的话题,但是我坚信,付出依然能够给我们带来可观的回报。

付出,不是今天老板给了你薪水,你可以继续为他工作一个月。

我所理解的付出,是每天为公司、国家多工作两个小时。

有一些规则是显性的,有一些规则不是那么容易发现的,是潜规则。

我不是倡导无私,我只是希望通过自身的努力,提高公司的竞争力,提高民族的

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 国外设计风格

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1