《写给MATLAB新手的几句话》由会员分享,可在线阅读,更多相关《写给MATLAB新手的几句话(6页珍藏版)》请在金锄头文库上搜索。
1、写给写给 MATLAB 新手的几句话新手的几句话作者: 杨明印 本人接触 matlab 已经有 5 年多的时间了,一直想写点东西,但是之前不知道放在哪里才能 发挥它的最大作用,直到几天前碰上了这个论坛(有点像诸葛亮遇见姜维,哈哈)。废话不说,我想借贵论坛宝地,写一些经验给使用 matlab 的新手们,当然了,老大们也可 以看看,不嫌弃我写得粗糙的话还可以指点一下,先谢过了首先我想说的是,matlab 跟其他语言不一样(我用的比较多的编程语言,除了 matlab 就 应该是 c 或 c了,VB 和 Delphi 也接触过,我想版面(matlab 版)大部分人也差不多), 如果你抱着“把其他语言的
2、思想运用在 matlab 里面”的话,那么我想,即使程序运行不出错 ,也很难把握 matlab 的精髓,也就很难发挥 matlab 的作用了。所以,如果你是希望 matl ab 作为 VC 的附属品,即你不想在 matlab 上面花太多功夫,只纯粹想用 matlab 来完成 VC 做不了或很难做成的任务的话,那么,这篇文章你也不需要再阅读下去了;如果你是希望 掌握一门语言、一个工具,使它更有效为你服务的话,那么,希望本文对你有所帮助。Matlab 是一个基于矩阵运算的软件,这恐怕是众所周知的事情了,但是,真正在运用的时 候(就是在编程的时候),许多人(特别是初学者)往往没有注意到这个问题,因此
3、,for 循环(包括 while 循环)满天飞.这不仅是暴殄天物(没有发挥 matlab 所长),还 浪费了你宝贵的时间。对此,版友 MVH 在他的“MATLAB 小技巧”一文中也有所涉及,雷同 的东西我也就不重复了,matlab 的“帮助”里面也有相关的指示。我这里想说的一点是,初 学者往往在初始化矩阵的时候注意到这个问题,懂得了使用矩阵而不是循环来赋值,但是 ,在其他环节上,就很容易疏忽,或者说,仍然没有摆脱 C的思想。举个例子吧,下 面的代码是我的一个师弟写的,我想他接触 matlab 也有 2、3 年时间了(在此说明一下, 接触 2、3 年并不是表示每天都会跟 matlab 打交道,我
4、本人也不是,只是在一年某几个时 间段里面连续使用),但是仍然会出现类似的问题: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(imf11); 2.J = isempty(q); 复制代码 这样的修改带来的好处是很可观的。又如:1.for
5、 j = 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的思想)来编写代码,然后看看能否用 ma tlab 的语言(基于矩阵的思想)来改进。当然,这样做的前提是你对 matlab 提供的一些函 数比较熟悉才行,这些函数在 matlab 的“帮助”那里搜索“Function
6、s Used in Vectorizing” 就可以找到一些,其他的也可以找相关的书籍(没找到?不可能,电子版总可以下载到的 )! 对提高 matlab 编程能力的方法,我想主要有以下三个:1.1. 查 help 2.2. 多上上论坛,搜索帖子、发帖子问人 3.3. 阅读别人、特别是牛人的程序 4.当然了,正如所有的程序语言一样,“3 分课本 7 分上机”,一定要动手才行,不能光看。 多想、多思考、多尝试,才是正路。 最后,整理一下常用的快捷键(用【】表示)或命令:1.1. 在命令窗口(Command Window)中:2.1) 【上、下键】切换到之前、之后的命令,可以重复按多次来达到你想要的
7、命令 3.2) clc清除命令窗口显示的语句,此命令并不清空当前工作区的变量,仅仅是把屏幕上 显示出来的语句清除掉 4.3) clear这个才是清空当前工作区的变量命令,常用语句 clear all 来完成5.4) 【Tab】键(转自版友心灯)在 看到的:在 command 窗口,输 入一个命令的前几个字符,然后按 tab 键,会弹出前面含这几个字符的所有命令,找到你 要的命令,回车,就可以自动完成。目前讨论结果是:matlab6.5 版本中,如果候选命令 超过 100 个,则不显示。而在 matlab7 以后版本中,则没有这个限制,均可正常提示6.5) 【Ctrl+C】(或【CtrlBre
8、ak】)(转自版友 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) 【Ct
9、rl+B】括号配对检查(对版本 6.5 有效,但版本 7.0 无效,不知道是取消了还 是换了另外的快捷键,请大牛们指点,其他版本没有测试过)7.7) 【F12】设置或取消断点 8.8) 【F5】运行程序 其余的例如在 Debug 状态下的快捷键就不多说了,自己看菜单 Debug 吧!累了, 有时间再写吧。希望大家多交流Coming: (以下东西都是一年前做的了,不知道能否记起,呵呵) 1.1) 关于神经网络的调用 matlab 的 nntool 命令后的使用问题(我做的时候没有看 过其他书籍或资料,是自己闭门造车的结果,如果写之前发现其他书籍有相关介绍的话就 不写了) 2.2) 关于外部接口的
10、matlab 与 CBuilder 的接口,想详细介绍如何利用 matcom 4.5 在 C+Builder 中调用 matlab 的代码以及 matcom 的一些技巧。由于我不是搞项目开发的 (搞科研、搞课题的),所以对 VC 不熟悉,大学的时候学过一点,不过我想对于搞科研 来说 CBuilder 就足够了,免去很多麻烦,Builder 在界面设计和数据库连接上面(我只 接触过这两方面)还是做得不错的。同样,如果发现其他书籍上有类似的东西就不写了 3.3) GUI 方面也写写吧,只是一点点心得或者体会,呵呵,这个相对简单些,篇幅相对要少 些。 真正接触 matlab 一年左右,我很喜欢上了
11、matlab 的简单的语法,易于绘制图形,gui 编程也 非常容易, 并且功能强大的开放式的 toolbox。 因此,尽管我一直没有这方面的应用,但是我 还是对它非常感兴趣。 现将个人的 matlab 的一点学习体会列在这里,愿能够对大家(特别 是初学者)起到一点儿微薄的作用也好。要说体会,我可以总结以下几条: 1 多动手写程序、调试 2 善于利用 MATLAB 的帮助 3 善于向别人学习 4 时间积累多动手写程序、调试多动手写程序、调试 如果懒得写程序,调试程序,永远无法提高。我个人认为调试程序更重要。有些朋友可能 在一个程序调试几下出不了结果时,就可能喜欢去问别人,我不太赞同这一做法。其实
12、, 凡事往往经过痛苦折磨后,才会让你印象深刻,收益更大。我建议在你觉得用尽你努力后 ,仍然无法有结果时,才去请教别人。我当初一个程序调试过一两个星期都有过。在这论 坛上,你可以发现不少好的问题,对这些问题,不要光看别人如果解决,也不要光想怎么 解决,自己坐下来,动手自己解决一下,那你就会把不是你的知识变成自己的知识。善于利用善于利用 MATLAB 的帮助的帮助 可以这么说,任何问题都可以在 MATLAB 的帮助里找到解决的办法。问题不论大小,都是 由更小的问题组成,把大问题化为小问题,小函数,然后再到 MATLAB 帮助里去找这种小 问题,小函数的用法。说实话,MATLAB 里的函数太多,我也
13、经常忘记一些用法,这时 HE LP 就帮忙了。善于向别人学习善于向别人学习 在你解决一个问题后,你可能会发现别人有更简便的方法解决,更强的函数,就时就是你 向别人学习的时候。说实话,在这论坛上,我也向 bzzz, bainhome 等学习借鉴不少。时间积累时间积累 时间长了,积累多了,当然也就有进步了。呵呵,也许再过几年,你会发现原来问题也不 是以前想的那么难。而 lyrock 在这里发的也是“打糊乱说,小儿科”,那时你就已经积累不 少了。 1. help:最有效的命令最有效的命令(参阅了瀚海 mathtools 的 starrynight 网友的文章) 其实,可以这样说吧,如果离开 matl
14、ab 软件,我想我自己是基本上什么都不会。 一遇到什么 问题,通常我的第一反应是:help ,就先说说自己对 help 的一些常用方法吧。 1)命令窗口直接敲“help”,你就可以得到本地机器上 matlab 的基本的帮助信息。 2)对于某些不是很明确的命令,只知道大体所属范围,譬如说某个工具箱,直接在命令窗 口中敲入 help toolboxname,一帮可以得到本工具箱有关的信息:版本号,函数名等。 3)知道函数名,直接用 help funname 就可以得到相应的帮助信息。 2. see also:不可小瞧的关联 在用 help 命令的时候,可能因为我们开始估计的方向不一定完全正确,在列
15、出的帮助信息 中没有直接给出的我们要找的东西,但是我们一定不要忽略了在帮助的最后列出的 see als o。 譬如:曾经遇到一个画椭球的问题。刚开始我以为这个命令函数应该在 graph3d 中给出的 (顺带提一句,只用 help 的时候我们就可以看到 matlabgraph3d - Three dimensional g raphs. 。于是乎,我又 help graph3d,很遗憾,在 Elementary 3-D plots.中我没有发现 画椭球的函数,但是我发现在 see also 中有 SPECGRAPH. 抱着试试的态度,我又 help sp ecgraph,_,这次在 Solid
16、modeling 中找到了 ellipsoid - Generate ellipsoid。 3. lookfor: matlab 中的 google 当我们很多什么头绪都没有的时候,我们可以求助于它,往往会收到意想不到的效果。 譬如:曾经在 gui 编程的时候,遇到过这样一个问题:想拖动鼠标时,要出现一个方框, 就像你在桌面上拖动鼠标,会出现虚线框一样。 当初我也刚开始一定都不知道该查找什么 东西,后来想起用它了。于是乎, lookfor Rectangle (很不好意思,当时这个矩形我 还是在金山词霸中搞定的-_-)。果然,在其中就找到这样一条信息:GETRECT Select rectangle with mouse._ 4. get,set: GUI object 属性的帮手 在 GUI 编程中,我们可能有时候想改变某些 object 的属性,或者想让它安装自己