数学建模社区-数学中国

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

作者: 百年孤独    时间: 2016-4-2 17:55
标题: Matlab常见语法错误(1)
Matlab常见语法错误( T8 ^0 ^3 D$ a* j4 L3 e+ H
Subscript indices must either be real positive integers or logicals   o, s: S' M* `
中文解释:下标索引必须是正整数类型或者逻辑类型+ M/ q9 l. w, S) B1 f$ A$ M

; `* N7 t$ N9 L, ^, z4 }- t出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab的语法规定矩阵的索引从 1 开始,这与 C 等编程语言的习惯不一样。
' ]- Q+ O3 f3 O# d( }* n0 A  {& y8 Z7 v
解决办法:自己调试一下程序,把下标为 0 或者负数的地方修正。关于矩阵的各种访问方式。
1 p- j. R7 A- y& Q4 w6 Z& ~1 P$ M
举例:7 d3 }& o" j; Y3 {* u# D. C
【错误代码】:
5 V. S- m) F5 Z) \1 ~1. for s = 0:0.2:2
: J3 N3 F' s. q! w8 y* m) R2. a(s) = 4 * s - 1; : B  p/ H7 s( {, k. T7 o4 W
3. end
: Q; u$ T/ ~3 F( }/ T0 j' f0 |【正确代码】:
7 R8 A$ S; b; {. b" g; M; C1.
. P  m) m$ d5 ^/ {2. for s = 1:10 . J/ W$ Y4 F2 j: W& z" v* ?$ B" K
3. a(s) = 4 * s - 1; 3 i) R1 \; v: |
当然,这样的赋值使用循环是低效的,因此不提倡
: \$ n' \  B. H- d. ]3 M
Undefined function or variable "a" 8 l0 M% i' e0 f
中文解释:函数或变量 a 没有定义8 m0 F* ]8 n/ @5 h8 T, `2 }% l

! h/ u# N2 k0 h  i9 V: E出错原因及解决办法:4 a: c1 [5 q& y+ L! x0 h4 ~2 B2 J

- a/ ?) S- u1 J6 J1. 如果 a 是变量,则参见 [原创]写给学习 matlab 的新手们 一贴中技巧 6 后半部分
. U3 q* S. [( V2. 如果 a 是函数,则这是因为matlab在所有已添加的路径中都无法找到该函数对应的m文件而导致的,对此,把该m文件移动到当前路径下再运行便可。(注:何谓“所有已添加的路径”——在命令窗口中输入 pathtool 可以查看;何谓“当前路径”——在命令窗口中输入 pwd 可以查看)/ R; S6 z+ ]' N% U% z
5 j; q4 g8 c1 r$ X
举例:% ], ^' h3 A" k/ Q1 y3 u
myPlus.m: 9 t4 ~1 ^' q' M
1. function d = myPlus(a,b)
$ s' j5 F6 d8 S0 m+ N; F2. d = a + b;
: \0 h$ `) B8 Q1 r【错误调用】:
' Q7 f6 l* H) `* j) P: P5 g, ]命令窗口:
0 Q2 R4 p+ T0 l7 l% E4 \1. >> z = myPlus(a,b) : m4 n( ^, B$ j) |6 [9 T; v) k
【正确调用】:
0 a7 P* k! M1 T命令窗口: 2 M* y- V; l! f* M" u- D$ L
1. >> x = 2; ( b5 v+ [' R4 z* Y
2. >> y = 5; . @) h& M5 l# |* F4 p# Q- m

  s' y& q) Y* u( R7 L9 R- o
7 d2 Q( E" n0 F0 E0 I' Q" H# J* Q" J2 T) U
& i3 C% {4 R# u' _5 \8 e





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