Matlab常见语法错误# m6 k# r. J q# f" _* j, u
Subscript indices must either be real positive integers or logicals 6 u8 M' a5 A) _2 {; t, N) N
中文解释:下标索引必须是正整数类型或者逻辑类型 / W7 t i3 \8 W) F+ e2 Y# y3 e$ z h+ q8 |; E. N. o& |/ ?2 U
出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab的语法规定矩阵的索引从 1 开始,这与 C 等编程语言的习惯不一样。7 m# e( C8 t& e2 {/ c* Y& X
/ k* [: Q# N. B) `7 A# `解决办法:自己调试一下程序,把下标为 0 或者负数的地方修正。关于矩阵的各种访问方式。 + d0 B2 r$ D# A4 D: a- [ ! I- r4 w# s5 S举例: $ M$ m/ I$ H s+ S【错误代码】: u4 w& }4 ?: G f6 Y: g3 `
1. for s = 0:0.2:2 / c/ x0 N `: {6 a8 K! w A2. a(s) = 4 * s - 1; " Z, }8 t$ J& U
3. end 7 l2 D% `% m G& g- |5 m/ T% v( ~
【正确代码】: / \1 A$ Z4 c0 Y! S$ E u0 S
1. 0 N( ^* m: u+ X3 @0 X; U2. for s = 1:10 ! {/ u. p P8 t# N- b
3. a(s) = 4 * s - 1; 1 c* i. z% m" l. R1 v% u
当然,这样的赋值使用循环是低效的,因此不提倡 & o" k& N9 H# {# p, tUndefined function or variable "a" 4 r) `) k$ u1 l/ [" T4 |中文解释:函数或变量 a 没有定义 2 a- S/ R" x1 p4 i # o4 X: ]& K6 B. I" c$ C2 R h" X0 Q# Q出错原因及解决办法: 8 v) u7 @ \8 H/ a J1 Q+ \ b: O* w& r: x
1. 如果 a 是变量,则参见 [原创]写给学习 matlab 的新手们 一贴中技巧 6 后半部分 . ~' m( o+ u( p% L4 g' X5 z2. 如果 a 是函数,则这是因为matlab在所有已添加的路径中都无法找到该函数对应的m文件而导致的,对此,把该m文件移动到当前路径下再运行便可。(注:何谓“所有已添加的路径”——在命令窗口中输入 pathtool 可以查看;何谓“当前路径”——在命令窗口中输入 pwd 可以查看) $ w! _/ l w1 {5 Y5 A7 C ) D" d- R2 w: a' L! o, v举例: ) ?6 h3 Y8 r4 f/ n6 }4 L) \+ umyPlus.m: n, |( p% V" I/ c0 }
1. function d = myPlus(a,b) 3 ^) i/ H/ r+ `0 O( C) Q, U2. d = a + b; ; h8 u- i+ @: W. ]2 [5 S
【错误调用】: ) c" I+ A! H6 O& I, [
命令窗口: 8 L& G c5 j1 P2 t. j0 T$ {1. >> z = myPlus(a,b) - {$ d1 [6 ^. T3 h# o- a, ^
【正确调用】: ; d8 k( n7 H8 z7 w. J. [ }
命令窗口: o" z( Z% ]$ L: p2 F) l" P5 h' q1. >> x = 2; 0 E- v' n) f P# ^
2. >> y = 5; - `! J) _- T# _ : R1 z7 q8 B) {, d # `; V6 {( B: F/ s5 _( _ V8 s( b/ M; p4 c! o
* i& J, F A* a4 N% a, g4 G- M! |5 D w. x