数学建模社区-数学中国

标题: MATLAB 中有哪些命令,让人相见恨晚? [打印本页]

作者: 且吟且徐行    时间: 2015-4-1 12:57
标题: MATLAB 中有哪些命令,让人相见恨晚?
对于MATLAB 你们都有什么样的看法?
. X# P& _0 K$ h' F7 n  B4 p! G; T+ u; a. u- V8 F9 q; Q4 }

作者: 发配三千里    时间: 2015-4-1 13:05
bsxfun9 ^* J5 ~( e4 ^
强大的、万能的、不同维数的矩阵扩展混合运算,从此告别矩阵运算中的for循环
6 X: o) x0 N+ c7 G) |9 }) a另,matlab里所有以fun为后缀的命令都很好用,arrayfun,cellfun,structfun,等等7 }. h. P/ ]' @) m  E; s# D
- ?8 e2 y6 \0 j% v9 S
@() 匿名函数
+ ~# H) l1 K4 `/ I- I使用函数式编程,在编写以数学公式为主的程序中比传统编程方法好得多$ S0 h/ M# ?! i  x

3 C' f0 K5 I3 I. J. hset(gca,...)等
7 N* |9 Z- s; X8 W* B2 M所有与画图相关的命令都包含了千奇百怪的属性和参数,非常实用,如著名的 set(gca,...) " l% L8 {0 v7 N/ m+ J

1 ~/ n  h" f9 r, A/ V$ $
, m# |1 A! o7 @' R画图中的标题、注释等文字内容是可以直接使用latex格式的,只须在包含latex命令的部分前后用$框起来即可
+ _! W5 ]- o; i- Y) X/ X3 J9 e
* ^2 o1 @' j6 b( r  t/ V+ Qslice, n' M3 Y2 {& ?" }* O, \) R% V
高维切片,要在三维空间中表现三个以上变量的函数关系,必备此命令
! E7 G5 M2 w$ N& S0 h
作者: 且吟且徐行    时间: 2015-4-1 13:08
发配三千里 发表于 2015-4-1 13:05 4 q" Q0 U# m& f
bsxfun/ i' X" \+ k, C% ~+ f
强大的、万能的、不同维数的矩阵扩展混合运算,从此告别矩阵运算中的for循环4 f: J! r/ k) \' u
另,matlab里所有以f ...

* |6 p! y1 L/ k* q8 N1 l有没有就是比较详细的比较系统的讲法啊!你得则个我有点不懂!
; X- H8 `! d0 w- J# s
作者: 发配三千里    时间: 2015-4-1 13:11
Matlab里面应该多用向量运算,把循环语句转变为向量运算会省很多时间,程序也更简洁易读。
- a; g* K3 C5 Q4 d1 N2 d% E
# V5 G8 O' Y% T, F8 K& l: O比方说,一个名叫array数组里面,你要将里面大于1的都变成0,就不必用到循环:
6 Y2 Y) e! {" O2 F, |4 |5 Z) @% |
array(array>1)=0;
- x4 d" v0 e* N4 _) B' Q/ a7 B$ I! l. v' j7 O3 u4 F
把大于1小于3的变成0。
- e* ]/ q( ~2 d0 {
  H; \. u- n. R* T' t$ @array(and(array>1,array<3))=0;
: p2 }5 I: [5 T, b' W3 v" k1 F6 N. @) R0 [; M! n& d
当然,还可以使用find,这个也很好用。
$ V; ^+ q' e2 O- `$ @: G; g6 g7 z9 ~8 ?: @" `
——————————————————————————————% _$ ]8 C, a$ Q4 j4 S9 I7 s0 h
" L1 u, _3 M5 a  I2 Q  S
另一个重要的技巧是delete/clf-plot-pause
0 ?) f7 A9 o" X# ?7 Q1 }1 \
& s' n, x: j6 L  a用plot可以画图(注意记录句柄),然后用delete删掉特定图象,或用clf清图,再绘制,这可以在figure窗口产生动画。但是如果只plot,往往只会在全部程序执行结束时显示,这时候需要用pause让figure完成图像的更新。drawnow貌似也可以,但是我比较喜欢用pause,能够简单地控制动画的速度。. e# n4 Q: `7 C
" @! D  X0 E" c4 {. s0 P. z
这会方便调试和展示。这个技巧尤其适合使用matlab的图形用户界面设计功能时构造一个显示运行状态等信息的figure。
) [$ A6 p8 {! `" a
; _3 i2 e7 P* }: E. `——————————————————————————————
" ?% E$ @9 H' Y
& V4 x5 G  y3 y, [8 @- tmathworks 有一个fig函数(不是系统自带的,是别人编写的),可以很容易地调整字体、尺寸以及绘图是否有边框等等,不必画出来再自己手动调整。这对于写论文的人来说会很方便。
3 \/ u" y& [* X0 v" F8 Q+ m5 D
" K! z$ _$ d; e' c: p3 K——————————————————————————————% P1 W0 p' y. }* ]. ?
' j& x* B; C( P+ @
善用eval,可以让你的程序的灵活度大大加强。尤其是在变量名的问题上。当然,这可能会对代码维护和调试带来麻烦。很多情况可以用其他方法代替。 @王备 指出了一个链接,值得一读Alternatives to the eval Function
/ I5 \  [" b  A& D  y( v/ }, i& c. \' G4 o3 W/ [
——————————————————————————————
2 ~) |7 q/ ~1 n5 O0 w  K* p
& i4 E  T+ b8 wsave、load可以将部分或全部变量、结构体等存入mat文件或从mat导入workspace
$ }. q) ]+ ~$ c' u7 z+ w' [
3 _. r# _" E4 q8 N4 [global可以将变量变为全局变量,在各函数之间共享。不过这不太好用,尽量慎用吧。
. B1 y+ w% s: Z$ H9 a$ F
9 \; i# u8 R" z! F——————————————————————————————# ?3 R7 c' B4 U, z
3 i5 _6 ^6 T9 c4 N! _( H! w  Q
exist可以检测某目标(如变量)是否存在,减少一些麻烦。5 F# H' I  _4 O$ h( M

8 q. |$ E! o& o  {——————————————————————————————
2 ~- @- f& U' t* p9 K& L- b4 q9 K# P6 w  i
surf、mesh都很漂亮,不过surf之后记得用shading interp,看起来更漂亮。
: G% G; L% b5 [6 l* T( X+ k- K  y7 W3 W
——————————————————————————————$ o0 W, ~! ~, A8 u$ h) _% R

  u! x: Q" N6 V对于一些重复性的矩阵赋值,比如:1、2、3、4、1、2、3、4# X( C& t# M+ v/ l# g  x: L
6 V! g' j! o* Z  @) w
可以使用repmat,将一个矩阵重复扩展为更大的矩阵。. n: T! C' ?( A) v( Z/ Q

作者: 入戏太深丶    时间: 2015-4-1 14:26
1. 可以用nohup matlab <script.m> result.out &把程序丢到linux服务器上后台跑,然后exit即可安全退出,第二天在result.out中查看结果;
6 P! u$ H0 ]- M+ d, w( n# v2. matlab -nojvm -nodisplay -nodesktop 不启动图形界面跑matlab,比有图形界面要快一些;
1 @) E3 _6 c' C4 r5 L3. 没有图形界面调程序的时候,cd/pwd/cd ../ls等doc命令就很有用了;
) j, ?$ ~3 O# P- {4. clear all,clc,ctrl+C中断正在跑的程序(比如死循环了)什么的;
/ `3 @& u+ A, ]& o5. find (查找矩阵元素不需要循环遍历);
: }7 B2 i1 h9 E) [- d( f6. cmd = sprint ('command'); system(cmd); 在服务器上跑Linux指令;! Z- \7 d$ ~7 \- V+ {
7. 第二句改成eval(cmd)也有相似效果,没研究过区别。
: U* }" _, Y  v/ f2 Y% o* y( ^




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5