数学建模社区-数学中国

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

作者: 且吟且徐行    时间: 2015-4-1 12:57
标题: MATLAB 中有哪些命令,让人相见恨晚?
对于MATLAB 你们都有什么样的看法?7 V8 x' f/ d0 }. ^2 C3 M
: J! x& w+ C, W4 \! u# b: Z

作者: 发配三千里    时间: 2015-4-1 13:05
bsxfun& @2 V' @! L# N5 r7 i# k- o0 S
强大的、万能的、不同维数的矩阵扩展混合运算,从此告别矩阵运算中的for循环
# |$ P- B; p/ |( e+ v% j0 }另,matlab里所有以fun为后缀的命令都很好用,arrayfun,cellfun,structfun,等等
/ Y6 q1 z/ h9 L
$ s, W, q2 x0 ^  L# M5 Y@() 匿名函数
; F" L( |# Q9 q9 `* D& Y, _; f使用函数式编程,在编写以数学公式为主的程序中比传统编程方法好得多
; q" P6 F! q  x
; ?# S  {& _# }5 ^3 w1 ]set(gca,...)等
' n( _! G) |% [& a$ o所有与画图相关的命令都包含了千奇百怪的属性和参数,非常实用,如著名的 set(gca,...) " m6 A4 X0 Q2 y7 L* u  H8 Y
4 J) L9 b6 U8 O$ j/ }0 G4 B; c
$ $* g3 [7 g3 W8 ]. G: k3 s( _
画图中的标题、注释等文字内容是可以直接使用latex格式的,只须在包含latex命令的部分前后用$框起来即可% a3 Q% w& X: Y% J; p
9 L5 `" B# p$ E5 u- W2 w* q
slice3 C& G+ r. H( Y3 P5 L; A6 F
高维切片,要在三维空间中表现三个以上变量的函数关系,必备此命令! w5 ~8 K  f$ R7 x

作者: 且吟且徐行    时间: 2015-4-1 13:08
发配三千里 发表于 2015-4-1 13:05 - k0 Y+ ~* d$ S& O. b
bsxfun# T6 _( z7 D& ^9 F  D" g
强大的、万能的、不同维数的矩阵扩展混合运算,从此告别矩阵运算中的for循环
4 `  a& E* Q7 a- |另,matlab里所有以f ...
$ X4 I8 u8 `  s: ^0 q3 y
有没有就是比较详细的比较系统的讲法啊!你得则个我有点不懂!0 ~( g( B& F. ?3 i

作者: 发配三千里    时间: 2015-4-1 13:11
Matlab里面应该多用向量运算,把循环语句转变为向量运算会省很多时间,程序也更简洁易读。9 x* ?1 j3 p; q/ z7 i

7 I9 p" ]9 _6 ^8 b1 F8 x比方说,一个名叫array数组里面,你要将里面大于1的都变成0,就不必用到循环:
1 @2 g9 G, A: N3 V, e
3 c( s* h) G$ P0 I7 f4 ^% Marray(array>1)=0;
' F! w- q* L+ m. \5 l" p6 z5 k. G+ ~6 w6 s1 L5 p5 [
把大于1小于3的变成0。. R2 x$ v8 o; i& @

5 p$ f! U0 Q) `* M2 Rarray(and(array>1,array<3))=0;) s% L, C5 w: S& z  T# x

& m4 I" n- ?& D1 e6 ~3 P当然,还可以使用find,这个也很好用。/ ]( y4 j, T  a% ]" _
, C" [/ h! I4 ^4 i2 _4 t
——————————————————————————————" O7 P8 q2 v  x
4 |$ v8 [& M/ Q' L. R/ w5 S
另一个重要的技巧是delete/clf-plot-pause! ^% V5 B# \* l2 C: e
$ _& p. w& Q0 G# X6 _. n
用plot可以画图(注意记录句柄),然后用delete删掉特定图象,或用clf清图,再绘制,这可以在figure窗口产生动画。但是如果只plot,往往只会在全部程序执行结束时显示,这时候需要用pause让figure完成图像的更新。drawnow貌似也可以,但是我比较喜欢用pause,能够简单地控制动画的速度。
. k: P" n1 h) T7 y
& O) y5 n. E4 q; y8 s0 ^' r这会方便调试和展示。这个技巧尤其适合使用matlab的图形用户界面设计功能时构造一个显示运行状态等信息的figure。
# m9 S) ]- M0 |4 V( x3 j7 z
' G3 V- u# t% G* {——————————————————————————————
+ t' P+ @( r' j4 ?7 d  l. m
* k; _% A( f, A- W: Rmathworks 有一个fig函数(不是系统自带的,是别人编写的),可以很容易地调整字体、尺寸以及绘图是否有边框等等,不必画出来再自己手动调整。这对于写论文的人来说会很方便。7 c$ b, Y: H( V$ X4 b9 V, r: d
* z. ?: c3 c# J7 s
——————————————————————————————
* T6 w  k) K6 d$ O: @! {, X
% n0 M* I& W+ E/ p: d善用eval,可以让你的程序的灵活度大大加强。尤其是在变量名的问题上。当然,这可能会对代码维护和调试带来麻烦。很多情况可以用其他方法代替。 @王备 指出了一个链接,值得一读Alternatives to the eval Function2 V9 d; ]: N3 ~5 `9 ?/ ]. z0 p+ S0 [* o
5 U, g5 w8 Q" U! k$ a: Z5 {! e5 C
——————————————————————————————) @) Z* r* k+ t) `; m" y0 V
3 y/ b0 B4 {, \+ `4 H7 G
save、load可以将部分或全部变量、结构体等存入mat文件或从mat导入workspace6 k0 _* ?7 f" A0 l

( I, b& F+ @$ H" q" H6 bglobal可以将变量变为全局变量,在各函数之间共享。不过这不太好用,尽量慎用吧。( d" d& g2 }  m! j

9 v% K5 s  Z: N——————————————————————————————7 q+ L2 `, k  I* p$ j+ p2 a( n
& ?' Q/ O9 l1 w; D) a# D  d7 x
exist可以检测某目标(如变量)是否存在,减少一些麻烦。
$ O( j, T& m! K# t  X3 q+ u
& E5 {1 D" S- D+ a3 H) [2 J——————————————————————————————3 p- G* O& y2 x! F

" z2 i4 p3 T( \surf、mesh都很漂亮,不过surf之后记得用shading interp,看起来更漂亮。: X% _- [# X; r; w- t$ `1 u  {
" u2 [) ~, M, }1 B& G0 a1 H( u
——————————————————————————————1 Q+ d# B3 {; g

/ H+ E& ^( a6 k" b" z% K2 A对于一些重复性的矩阵赋值,比如:1、2、3、4、1、2、3、44 o/ j. g4 C0 ?

( D* w$ i. b2 z* s5 O0 ]可以使用repmat,将一个矩阵重复扩展为更大的矩阵。9 ]3 \. S- [4 J" `* O- N" Q

作者: 入戏太深丶    时间: 2015-4-1 14:26
1. 可以用nohup matlab <script.m> result.out &把程序丢到linux服务器上后台跑,然后exit即可安全退出,第二天在result.out中查看结果;& X+ Z1 C8 ]- y, ^9 F4 q+ w" C
2. matlab -nojvm -nodisplay -nodesktop 不启动图形界面跑matlab,比有图形界面要快一些;
/ O! Q* B+ M: [1 ?3. 没有图形界面调程序的时候,cd/pwd/cd ../ls等doc命令就很有用了;
; d5 o% H% e- b2 J, G4. clear all,clc,ctrl+C中断正在跑的程序(比如死循环了)什么的;6 y' v2 V/ p: K. T8 P
5. find (查找矩阵元素不需要循环遍历);- o% C" f, d6 U; E/ M  p$ w3 L  A
6. cmd = sprint ('command'); system(cmd); 在服务器上跑Linux指令;
# C' O$ t1 _6 Q7. 第二句改成eval(cmd)也有相似效果,没研究过区别。 $ U( U: g, S3 a" X9 j8 B





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