|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Smartk 于 2020-2-18 16:17 编辑 + i+ h2 E$ ]$ |6 a
3 d/ E# W& p% ~2 i9 o$ X! e: x' a% l/ R9 ?4 C" n; T# f* d
1.打断点和分段3 g0 ~/ X3 b. r
写完脚本并保存后,在每一行可执行代码前,有一个行号,和一个小横线。报错信息中会有类似“Error in 文件名 (line 行号)”这样的提示,其中的行号就是代码前的这个行号。小横线说明这一行是可执行代码,而不是注释。鼠标左键小横线,此时横线变为红点,说明在这个位置设置了一个断点。脚本运行时,遇到断点会自动暂停,并进入调试模式。此时可以用continue继续执行,也可以step逐行执行,也可以step in进入调用的子函数执行。初学者一般熟悉step即可。' s: F. _! O# t6 a0 V$ p
" i8 i8 m( [& x! Q3 m) z& F9 u3 k* |% r$ q* i( c7 i, r4 G
# e8 S2 ?1 @* o! I8 B0 K) k9 o$ @8 z
F2 \1 H. r8 C$ q
进入调试模式时,可以观察workspace里的变量,看是否和预想一样,也可以在command window里输入其他代码或运行其他脚本/函数。在调试模式中,可以通过左键断点(红点)和小横线来设置新的断点和取消旧的断点。也可以按quit debugging退出调试模式。+ V' F' X% T1 _
分段是类似断点的一种运行方式,参考上一篇中%%注释的说明。当脚本中有多个%%时,%%相当于分段符号,左键run and advance可以实现逐段运行,运行完一段后,相当于进入调试模式,可以在workspace里查看运行结果,但其他的操作一般不建议进行。分段运行的另一种用法,是需要输出多个图像的时候,可以运行一段,截图,再运行一段,再截图。
/ c! z. r9 `0 V" p* \) g9 a1 m( o, B* {- {& T9 j7 ]
2.常见报错5 I* y; }, d' ], Y9 \
运行脚本后,会在command window里出现红色或者黄色的字,就是报错信息与提示。首先,报错信息会给出定位,哪个文件,第几行。有时会在多个位置给出报错,这说明报错那行的调用关系,例如自定义脚本A中n行调用了自定义函数B,而自定义函数B的m行出错了,则报错信息会定位到A的n和B的m,看起来好像是两个地方出错,其实是B的m错了,但实际中也可能是调用B的方式不对。这种情况尤其会出现在调用系统自带函数时,此时一般是调用方式不对,所以要关注A的n。2 V* d, I: f. w
给出报错定位后,就是看具体的报错信息了,matlab中常见的一些报错信息有:
2 I4 V' L* q& r5 ?; K# ^6 C6 p9 x) F/ B4 Y7 g" t
Undefined function or variable '函数/变量名'.
; ]; z6 m- D* B" I2 m说明使用变量前没有遵循先定义再使用的原则0 |; |1 l+ X& t5 L
6 j) T" N1 ~: d: P6 |2 ~$ Y4 qInner matrix dimensions must agree.
; r" D- W! @6 _8 n5 P" m6 g0 X8 R( I* |数值运算中常见错误,参考数值基本运算那篇的矩阵运算部分; C6 \" j; g Y, s. U& [
* ]7 N; m" {9 K9 g+ n9 e9 z
Index exceeds matrix dimensions.3 l2 S( O6 E* |
超出索引,例如a=[1 2 3],此时当用到a(4)时0 }3 J. U/ g1 w. Y
虽然定义了a1~3,但没有定义a4,此时却用到了a4,因此报错" l# e) D$ [ o& s$ E/ V
本质上,这也是一种未定义先使用的错误
9 z; e0 v2 g0 N- W' d6 Y1 I/ [) |. H" Z2 o) \/ }# H* R6 Q
Subscript indices must either be real positive integers or logicals.
/ N! |2 E, A1 X参考矩阵赋值中所说的分块赋值,圆括号中表示位置或者序号,当圆括号中出现非自然数时报错" Q) U( H. g. T/ w' J
0 x+ k1 Y8 p/ C2 T2 ?# d9 aExpression or statement is incorrect--possibly unbalanced (, {, or [.7 f) [1 R- V3 y, f, T% T: ]
有开括号而没有关括号,或者有关括号而没有开括号,一般是计算式太长而打错了) a: U7 a# r: X
, q) k! L; Z3 b- J* G% OInvalid data type. 或者Data must be numeric.
3 X7 m: P( x. J& K ~% Q. _& ^或者Undefined function '函数名' for input arguments of type 'double'.
. s4 i" B; a6 Y* a0 ?6 p$ h参考前述的数值运算与符号运算的说明,有些函数只用于数值,有些只用于符号,混用时报错。
8 J6 Y5 y% [1 Q
; q4 A7 H! j# d7 b' p3 p, W; p3.最后总结
6 S% c' V" \/ i0 }! I* W& E# ]1)doc+函数名,多看帮助多看范例。看到范例,逐行运行看结果
9 H$ w& k* X( |# e% {2)分清数值和符号,两种运算两套系统+ ]* }( p( Y+ ?
3)学好数学再学软件(其实基本的数学知识在帮助文档里也有)) H& u1 D8 X( w
|
|