数学建模社区-数学中国

标题: Matlab常见语法错误(1) [打印本页]

作者: 百年孤独    时间: 2016-4-2 17:55
标题: Matlab常见语法错误(1)
Matlab常见语法错误
8 I% C$ T7 V2 jSubscript indices must either be real positive integers or logicals $ c: m/ O5 @6 S2 |
中文解释:下标索引必须是正整数类型或者逻辑类型
. N! u1 H# T# ~3 |! S7 X% o4 d# q5 t2 n  }3 R: r3 W. b
出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab的语法规定矩阵的索引从 1 开始,这与 C 等编程语言的习惯不一样。
6 R( T! [& S: S# L0 e! t* E
; @0 d6 d1 m. X) ~- d. m% {解决办法:自己调试一下程序,把下标为 0 或者负数的地方修正。关于矩阵的各种访问方式。 / x" L; x, q+ J) w/ x1 p
( `! s7 }+ _/ k3 G
举例:
: l1 _; V) y, H3 d$ v% ~【错误代码】: : N8 f2 ?+ _$ \5 w
1. for s = 0:0.2:2
3 g; }+ t% j! H2. a(s) = 4 * s - 1; & t4 J+ ^& p! J$ T* F& ~3 s
3. end 9 a+ V5 k3 g0 k% i. ]' K6 |
【正确代码】:
" A9 A" r: T# _7 g9 D$ \# g1.
. X4 a* E% x$ Z( q' [9 k7 V1 o2. for s = 1:10
  s- j$ g& y* t9 J8 E* E! u3. a(s) = 4 * s - 1; 7 u/ y4 x: L4 z* {. c
当然,这样的赋值使用循环是低效的,因此不提倡
. v" g" j, T- y7 Q0 {$ Y8 Z
Undefined function or variable "a" 1 M* s$ r1 I1 v3 ]+ \/ x( C
中文解释:函数或变量 a 没有定义
' B7 j) H3 i5 R3 m. y" ~: t
2 W1 C' Q3 \3 n5 j) x出错原因及解决办法:$ H9 \$ w6 D/ n! ]9 v- q4 J! ?$ Y- a$ Q
. ~" Y2 m( ?- X; Y8 h% Y% N
1. 如果 a 是变量,则参见 [原创]写给学习 matlab 的新手们 一贴中技巧 6 后半部分8 k( j' A) y# r: N
2. 如果 a 是函数,则这是因为matlab在所有已添加的路径中都无法找到该函数对应的m文件而导致的,对此,把该m文件移动到当前路径下再运行便可。(注:何谓“所有已添加的路径”——在命令窗口中输入 pathtool 可以查看;何谓“当前路径”——在命令窗口中输入 pwd 可以查看)- ?7 e1 U& m+ ?) Y

6 l% I# X1 u4 [! q举例:
) z& C! s2 s2 U1 rmyPlus.m:
7 H  s4 {& o  u8 j1. function d = myPlus(a,b) ! z! V, T  i% H" ?7 k' C
2. d = a + b;
6 U) M; w; \6 h' f- C9 j* w【错误调用】:
! g# J" N+ Y* u命令窗口:
# }# V9 C2 r% k, d' m8 E1. >> z = myPlus(a,b)
  p" a6 G5 u  {( ^【正确调用】: $ X  `% H, @; r- R& K/ a
命令窗口:
/ ~, n) E3 J8 s% g2 Y, S3 k/ h1. >> x = 2; # r4 }2 U9 C7 X6 F% l$ D# ?) p
2. >> y = 5; 8 m5 ]- l  z5 b8 C8 ]: l

2 b7 c0 t7 q# u2 n
/ A0 l8 h! f! `! g. e0 n2 L: n5 G# ~+ g/ J4 Z/ K& F0 [9 I

5 \+ p* b) ^5 G2 q' N




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