数学建模社区-数学中国
标题:
Matlab常见语法错误(1)
[打印本页]
作者:
百年孤独
时间:
2016-4-2 17:55
标题:
Matlab常见语法错误(1)
Matlab常见语法错误
: x( J# A4 v4 t5 s+ @1 [
Subscript indices must either be real positive integers or logicals
( K1 _% Q* f9 E, }; D: F
中文解释:下标索引必须是正整数类型或者逻辑类型
* b( O$ Y3 ^5 q4 k
8 E- H. o" P! S( a7 n0 `1 d
出错原因:在访问矩阵(包括向量、二维矩阵、多维数组,下同)的过程中,下标索引要么从 0 开始,要么出现了负数。注:matlab的语法规定矩阵的索引从 1 开始,这与 C 等编程语言的习惯不一样。
/ t/ R2 ^# A. f
+ G+ ?8 \- |1 E% q" ~
解决办法:自己调试一下程序,把下标为 0 或者负数的地方修正。关于矩阵的各种访问方式。
3 d Y! D R- y$ G
9 B8 b, g/ I" B! R9 H/ f& i* i
举例:
8 T' f# E9 j6 P8 W) h" q. y
【错误代码】:
9 L" N7 O; T( ]2 P) P" o
1. for s = 0:0.2:2
% M& ?, U$ L, b4 r1 d
2. a(s) = 4 * s - 1;
0 l: r( j$ b2 C# K+ c% O5 H
3. end
, w, P7 F' V7 a2 H$ `+ H5 B* [7 i
【正确代码】:
0 _$ z; U& x* \* p# o% I% r$ I
1.
0 N/ w2 x$ h; q" \# K6 ^
2. for s = 1:10
7 T- |1 k+ u5 y) u7 |
3. a(s) = 4 * s - 1;
7 r& u$ m5 R8 C0 t1 W$ l+ E$ m
当然,这样的赋值使用循环是低效的,因此不提倡
/ G Q9 x4 P. }# d
Undefined function or variable "a"
) m, Z; d0 W4 U
中文解释:函数或变量 a 没有定义
* m6 E$ ]$ l" g( z; e
9 a% ^$ q+ ?2 z& C0 N* T
出错原因及解决办法:
/ `/ I6 @ B- J! K9 K! l8 N
' e/ |* f1 w3 p1 E$ ]; `
1. 如果 a 是变量,则参见 [原创]写给学习 matlab 的新手们 一贴中技巧 6 后半部分
- G2 ?* ?$ D' p( J( ~! t
2. 如果 a 是函数,则这是因为matlab在所有已添加的路径中都无法找到该函数对应的m文件而导致的,对此,把该m文件移动到当前路径下再运行便可。(注:何谓“所有已添加的路径”——在命令窗口中输入 pathtool 可以查看;何谓“当前路径”——在命令窗口中输入 pwd 可以查看)
3 x5 z+ Z+ q K @# L# a
# |1 k {2 P2 W4 O& x+ x
举例:
+ r3 {( C9 k4 e% m8 y
myPlus.m:
p( d. d' P; r6 g
1. function d = myPlus(a,b)
& Z6 V- h2 R, D! G4 t
2. d = a + b;
& Z# [* P% ]# @& Z# i+ n
【错误调用】:
' h4 ~- d! G* E1 J$ K
命令窗口:
! j$ L" L8 e' u2 K+ G
1. >> z = myPlus(a,b)
. }/ L; l( r5 z: Q9 _0 U
【正确调用】:
$ D$ e, a* H) H1 @# _' z. ?0 x
命令窗口:
% L) g+ b" V8 R
1. >> x = 2;
6 k9 H% E5 z. `! c+ ?* j
2. >> y = 5;
# g+ L( g' z* @9 p8 X
# h9 h3 z5 Z7 ]8 @# D& p
6 T0 k( s% ?# `2 w2 l5 C% a
4 n1 B& b3 }- |- u3 T9 h, w
0 v% d6 h- n0 Z4 c5 G$ F! u! u
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5