24小时热门版块排行榜    

查看: 3579  |  回复: 9
当前主题已经存档。

dnp

荣誉版主 (知名作家)

小木虫浪子

优秀版主

[交流] [原创]matlab经验之谈(很简单,大家有用采之)[已搜索无重复]

在这个版块,在理工数学版已经有很多的关于matlab基础知识的资源,但都是一些非常简单的书籍(包括我的),如果初学,看了半天也不知所以然,而对于有基础者,这些根本就可以不用看!因此建议初学者如果真的想学matlab的话,还是在书店买一本好一点的基础书。我原先看的是精通matlab7.0,Duane Hanselman 和Bruce Littlefield写的,朱仁峰翻译,清华大学出版社出的,觉得它就还可以,很有深度也很详细。
      其实matlab就是一个计算软件,它的计算能力非常强,但是其它的各种编程手段,如文件操作,界面操作等就不如java,c++等语言,所以对于使用matlab,很多时候只是需要调用matlab里面的函数与工具箱,而不用你进行编程,这就是matlab的优势。
     不过这里需要注意的是:在作数值分析的时候千万不要指望matlab能够给你把整个公式给推导出来!

      对于新手如何学习matlab我在这里就不费口舌了,jinnengzhi的转贴:写给matlab新手的几句话(http://muchong.com/bbs/viewthread.php?tid=684144)写的很牛。

     在matlab里面,有很多基础的函数,也有很多工具箱,matlab之深,也在于此。现在matlab可以在各个计算行业有非常广泛的应用,同其具有非常丰富的工具箱与函数是分不开的,而对于我而言,现在也只是一个大海里的小鱼,广阔的世界我也只是管中窥豹般。

     在当前的各种帖子中,matlab的问题无非是数据文件的处理与计算。对于数据文件,从其他格式的导入matlab中三种方法:
      1. 在matlab界面的工具栏中有file工具,其下拉菜单中有一个import data选项,你可以直接从外部的文件中导入你所需要的数据文件,格式非常多,一般的如:(text file).txt, .dat;(excel file).xls, .csv, .wkl;(image file).jpg, .tig等。此种方法优点是非常方便快捷。但是对于用这种方法导入的数据文件,电子表格中的必须全部是数值,而没有字符串等其他格式的内容;记事本即ascii码纪录的数据没有限制,可以自由导入;对于像我们平时Gaussian等软件计算的结果文件,如.out等,建议不要用此种方法导入,因为里面字符串过多,matla无法判断格式以及你的数据内容。这些文件,是ascii码格式的但是后缀不是text形式应该如何导入matlab中?这里我建议用第二种方法。
      2. 在matlab中有专门读取ascii码编写的文件的命令:fopen,可以用这个命令打开一个文件,格式不限,二进制或者ascii皆可。如果是二进制,就用fread命令;如果是ascii,则用fgetl或者fgets命令。具体使用格式见matlab中的help文档。这种方法的优点是对于像Gaussian等的输出文件中有用信息的读取很方便,可以提取你需要的信息,而不用对着那么长的输出文件寻找半天。但是对于这些命令,必须对matlab有一定的了解,对文件格式有一定了解;同时你编好了一个程序,想提取有用信息,则文件里面你想要信息的位置必须得有一个特征字符串,或者标识符,并且这些字符串或者标识符在所有同种格式的文件的同一位置必须出现,否则此程序只能适用此一种类型的文件。
       3. 另外一种我想最常用的就是用load命令了,非常简单,只要在当前目录下,load+文件名即可,而且对于二进制文件,load命令非常实用但是load命令有非常多的限制,如数据文件中是纯粹的数值,没有其他的字符串等信息。这种对于text文件就不是很适合了。如果是二进制文件,matlab定义的.dat, .avi, .cdf等,如果我们平时实验数据也是这些格式,load命令无法识别,建议用工作站转成.txt格式或者.cdf(cdf需从网上下一个读取器)。在处理而对于matlab自己定义的数据格式.mat,却非常有效。

       另外对于数据处理,如果只是进行平时很小的运算,则可以直接在matlab的命令窗口中实现,用一个循环或者利用矩阵运算方法计算。然而如果数据非常多,则用matlab直接进行处理非常不方便,而且很慢!因此碰到这种情况,或者分段处理,或者另寻他路。在这里,线性代数的知识就显得非常重要了,因为如果你编一个程序,随便在哪个地方都用标量循环计算,除非你非常有耐性,否则就得等到你想砸电脑了。一般现在的数据都是采用稀疏矩阵(Sparse matrix)储存的,当你进行运算的时候,也尽量采用矩阵或者是向量的形式进行运算,因为matlab有自带的加速运算功能,如果不用,岂不浪费???而且,matlab中矩阵运算这方面的函数非常多而且丰富,一般都能够得到你想要的结果。对于这些函数,google,baidu中已经有非常多的介绍,而且详细,因此不予详细介绍。

      如果你心中有算法,有公式,知道怎么做就不要在那里想应该怎么才能使我操作最简单,怎么才能使我写程序的时候能够将字母写得最少!有时候很简单的数据体系,两条命令就解决了,而且操作非常简单,也许你用最笨的办法所花的时间还没有你想的时间长。
   
      对于新手而言,模仿别人的写程序方法是非常有必要的,因为有时候你的算法和别人的一样,但是效果却没有别人好,为什么?是你有些方面没有考虑到?还是你对你的编程平台不熟悉而浪费了许多资源?还有,别人对解决当前体系的思路,有时候我们程序写得非常长,别人只有两句话就搞定了,而且效果非常好,怎么回事?当我们学编程的时候就得好好想想这些问题,这样下次在写程序的时候我们就会尽量考虑周全,尽量选取最优的方案。我在写一个GUI界面的时候,当时对GUI界面一窍不通,老板却要我在一个星期内完成。实在没办法,就拿师兄写的一个未完成的程序,一条一条命令的看,看命令,看思路,后来就把一个显示LC-MS-MS数据的窗口给编出来了,按时完成任务(一个星期内完成,后来老板说是要我在5天内搞定,也算是完成了)。

      学习matlab要多问,多学,看见好一点的命令,看见别人用我没有用过的命令,我就要先help一下,看这个命令能做什么;然后自己试着用这个命令,完成一些工作,即使你目前用不到,也可以先留存在脑海中,以备以后之用。
      参观当前网络上matlab的论坛,有些QQ群,可以加入的就要加入,看那些高手是如何解决别人的命令的,也许你知道这个问题的答案,但是另外一个人提出的解法,使用的命令却比你的好,这就得需要你学习了。

      对matlab不要盲信,因为有些问题matlab解决的并不一定比excel,origin等专门的数据处理软件好,不要别人看这个好久采用这个,要用你最熟悉的手段,最简单的方法解决你的问题。像平时的加减乘除,平方开方,excel里面就有现成的函数和命令,然后鼠标下拉一下,所有数据全部搞定。所以对matlab如果不熟悉,而其他软件稍微熟悉一点,建议不要用matlab。毕竟自己不熟悉的东西,当旁边又没有人帮助的时候,错误多多,心烦意乱,人不好,结果更不好!
回复此楼
What would Jesus do?
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cuihang

铁杆木虫 (正式写手)

VASPer

人不好,结果更不好
---------------------------------------
这个是………………
聪明人知道自己是傻子,傻子以为自己是聪明人
2楼2008-01-16 14:27:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

quantumoptics

金虫 (正式写手)

,有道理
3楼2008-01-17 10:50:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

huhuhu3

很好,谢谢你的分享,受益非浅。
4楼2008-01-17 11:42:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

davin

木虫 (著名写手)

一只来自东北的大虫

,dnp兄的见解很透彻啊!
5楼2008-04-01 16:10:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

abingchem

木虫 (著名写手)

恩,很有同感!

其实有点过分关注MATLAB了!很多人根本就用不着,如果是数据处理啊,绘图啊,像origin这样的软件就可以了,MATLAB那么大,好不容易装上了,就用来做这个,呵呵,有点。。。。而且说实话,MATLAB的常见二维绘图还不如专用的绘图软件呢!
冰是从最寒冷的那天开始融化的
6楼2008-04-15 21:02:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

FLY_Phoenix

荣誉版主 (职业作家)

小木虫归隐传道士

谢谢分享经验
夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。
7楼2008-04-27 14:57:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sctc2007_g

金虫 (小有名气)

早日成功

谢谢你的分享

做计算,做模拟,使用matlab确实很方便!
博学之,审问之,慎思之,明辨之,笃行之!
8楼2008-06-24 19:07:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wcha

木虫 (正式写手)

解决非线性规划的问题还是 非matlab 不可 啊 !
9楼2008-12-13 14:16:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 dnp 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见