- 在线时间
- 5024 小时
- 最后登录
- 2022-11-28
- 注册时间
- 2009-4-8
- 听众数
- 738
- 收听数
- 1
- 能力
- 23 分
- 体力
- 77273 点
- 威望
- 96 点
- 阅读权限
- 255
- 积分
- 27108
- 相册
- 1
- 日志
- 14
- 记录
- 36
- 帖子
- 4293
- 主题
- 1341
- 精华
- 15
- 分享
- 16
- 好友
- 1975

数学中国总编辑
TA的每日心情 | 衰 2016-11-18 10:46 |
|---|
签到天数: 206 天 [LV.7]常住居民III 超级版主
 群组: 2011年第一期数学建模 群组: 第一期sas基础实训课堂 群组: 第二届数模基础实训 群组: 2012第二期MCM/ICM优秀 群组: MCM优秀论文解析专题 |
本帖最后由 厚积薄发 于 2016-4-2 11:52 编辑 7 H! W! \0 \2 T' \7 U/ H1 {# d4 d0 V
7 q$ p- {+ d# p, A* D9 g MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB应用非常之广泛!matlab博大精深,现在写几句给新手,希望能给你们有点帮助。: [" A8 k4 G$ o$ c$ [$ D
1、适当了解一些数值计算、数值分析以及最优化的理论用Matlab的无非是做数值计算或者最优化,这也是Matlab的强项,Matlab有足够多的工具箱解决这些问题。但是在使用这些工具箱之前,应该首先了解一些数值计算以及最优化的理论。这一点在程序碰到问题或者计算结果不理想的时候尤为重要。很多时候结果不理想并不是自己的理论出了问题,而是盲目或者错误使用Matlab的工具箱而导致的。比如我曾经做过一个单纯形法的优化程序,但是结果总是不理想,这个时候就要返回到单纯形法具体是一种什么样的算法来考虑这个问题,最后发现是由于目标函数的某一部分十分平缓导致的。 当然更重要的是如果你不理解理论,很多问题根本不知道如何处理。有个学化学同学就曾问我一个程序怎么写,说matlab肯定可以完成的。了解清楚之后才明白原来他想做的就是一个受限最小二乘。但是他不懂得什么是最小二乘(因为没怎么学过数学),当然面对这个问题无从下手。
0 L; f( U# s4 K( ^+ g2 T 2、理解Matlab中时间空间的转化
; s& D, `" a7 I$ N+ O8 V 这个问题没有人强调,但我觉着蛮重要。这里的关键点其实很简单,就是尽量减少重复计算,哪怕是多项式复杂度以内的计算。重复计算的内容应该适时保存到内存中,以后直接调用。一个程序可能会重复运行几千次几万次,一点点的浪费时间都可能被放大很多。空间(内存)我们是可以扩充的,但是时间不是,所以绝大多数时候我们需要放弃空间,获得时间上的迅捷。
3 o" P. D. M: B/ X' e 3、形成良好的编程规范 ) z- J* f; A% }* ~3 L9 `9 ~
我想几乎所有学过编程的人都被这样告诫过。比较好的是Matlab自带的编辑器本身就可以自动缩进之类的,程序十分易读。但是还有一些东西是有些人不曾注意过的。比如变量名,一个好的变量名一定要有清晰的含义,让人一看就能明白,否则日后的修改维护必然要花费更多的时间去识别这些变量名的含义6 V, J% j& l0 t, M& O6 Q0 Q
4、如果拿到一个任务而又没有思路,试着把问题分解或者转化。
' H8 n4 T; u) L 之所以叫做程序,是因为我们所做的工作就是告诉计算机要做什么,该怎么做。所以如果你的脑子里根本不知道这个问题该怎么解决的时候,你就更加无法写出程序。找思路的一般方法是分解问题,然后逐个击破。或者在特殊情况下,需要把问题转化。 : g' l( |- a! g8 s, a+ t# l5 b
分解与转化的第一步是把实际问题转化为数学问题。这一步可能已经做好,可能没有。如果没有,那么这一步就叫做数学建模。绝大多数问题都可以转化为两类问题,一类是最优化问题,一类是求解问题。如果你能知道你在最优化什么东西或者求解什么东西,问题就简单很多。
- D ?: j; e L# I; f& o' ?
" o. N* F6 m4 r: i, X9 V 5、如果程序出错了,而又查不到语法的错误,使用断点 编程中最可怕的错误不是语法,而是逻辑错误,因为逻辑错误是最难debug的。一个很有用的工具就是断点。 ]* g- i, x8 C
/ V- ?0 h( w' t6 s2 c 6、如果试了很多办法还是不能找到错误,那就尝试一下终极debug方法,适用于各种语言 真的有这么强大的debug方法么?有的!这个方法很简单,离开你的电脑,找一个人,随便什么人,说一遍你的程序的思路,说的越具体越好。多数情况下,你在阐述的过程中,程序的错误就会突然从你的大脑里冒出来了。$ P: x# Y7 z% s1 m& x! u% R P9 O/ D
- m+ x' m# \" S* x! U2 {3 D- c
7、理解通用与专用之间的权衡 你可以写一个通用的程序,也可以写一个专用的程序,这需要你的权衡。一般情况下,专用的程序你可以研究清楚其结构,从而找到最快的算法,而通用的程序则不能达到这点,因为要考虑到很多很多特殊的情况。5 ]" T2 m; f' b/ Z" ?7 l
/ b9 {# `* ~; N w
8、尽量使你的程序更通用 也就是说,尽量使你的代码能被重复利用。这样可以节省很多写程序的时间,而你发现这些东西都是你写过很多遍的。
* A- _. u1 ^6 q8 u2 t* {. ^1 n1 N$ D9 U5 |: z: P3 p/ F
9、尽量使你的程序模块化 把需要重复进行的程序尽量写成函数,便于修改和维护。写成函数的好处是使你在同一时间只关注一个问题,但是如果你把所有的东西都放在一个程序里,你可能需要考虑的问题就不止一个了。
1 `* `6 A0 V" K+ A# Q$ o5 Y! \ L& \. U6 \) H4 b
, ~5 h: _ x `3 f
& P* Y. E7 G. N! b9 X. j$ _
; F9 d% u# A) [
; `1 h! e: p1 p g3 ^- \6 J9 A. e. u7 B+ q( A
& u0 g& \7 o" l; L* Y* b+ R5 ^" _6 W
|
zan
|