|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Smartk 于 2020-2-18 16:17 编辑
( X' i" ^8 g) {+ Z
3 e6 T" h3 M* w! h. o
+ i8 Y) ]# ^6 Z9 q; i1.打断点和分段
8 r7 l( ~; A# W! ? 写完脚本并保存后,在每一行可执行代码前,有一个行号,和一个小横线。报错信息中会有类似“Error in 文件名 (line 行号)”这样的提示,其中的行号就是代码前的这个行号。小横线说明这一行是可执行代码,而不是注释。鼠标左键小横线,此时横线变为红点,说明在这个位置设置了一个断点。脚本运行时,遇到断点会自动暂停,并进入调试模式。此时可以用continue继续执行,也可以step逐行执行,也可以step in进入调用的子函数执行。初学者一般熟悉step即可。
; D9 d* _: I; m9 I4 d
- x3 _6 T+ z) N: [: l, T) P. q7 \' k# o p+ d0 p0 M
$ c. C3 p) p! h* ^
5 N( f/ w* _6 e8 y
进入调试模式时,可以观察workspace里的变量,看是否和预想一样,也可以在command window里输入其他代码或运行其他脚本/函数。在调试模式中,可以通过左键断点(红点)和小横线来设置新的断点和取消旧的断点。也可以按quit debugging退出调试模式。
. C+ N0 V5 x1 r4 t8 ^# t 分段是类似断点的一种运行方式,参考上一篇中%%注释的说明。当脚本中有多个%%时,%%相当于分段符号,左键run and advance可以实现逐段运行,运行完一段后,相当于进入调试模式,可以在workspace里查看运行结果,但其他的操作一般不建议进行。分段运行的另一种用法,是需要输出多个图像的时候,可以运行一段,截图,再运行一段,再截图。& c' E" W4 w( o j, l4 m$ g' O
! o( _- X7 S: e7 C ~$ S2.常见报错/ H. }4 h, r% _; F7 e- @( w& ?- R
运行脚本后,会在command window里出现红色或者黄色的字,就是报错信息与提示。首先,报错信息会给出定位,哪个文件,第几行。有时会在多个位置给出报错,这说明报错那行的调用关系,例如自定义脚本A中n行调用了自定义函数B,而自定义函数B的m行出错了,则报错信息会定位到A的n和B的m,看起来好像是两个地方出错,其实是B的m错了,但实际中也可能是调用B的方式不对。这种情况尤其会出现在调用系统自带函数时,此时一般是调用方式不对,所以要关注A的n。# \' s. K! l! O, |" t% O& J7 o7 q
给出报错定位后,就是看具体的报错信息了,matlab中常见的一些报错信息有:; M. P& u: R6 A* \; f" L' V* U
8 Y; @7 y2 w$ |Undefined function or variable '函数/变量名'.
( m2 D! X7 ?$ o* W0 I2 v说明使用变量前没有遵循先定义再使用的原则. j9 ^) ^ P; g {+ j
i0 g2 k& i1 A
Inner matrix dimensions must agree.5 g$ p* O9 a6 J5 E
数值运算中常见错误,参考数值基本运算那篇的矩阵运算部分" Y+ r4 K4 F( Y. `$ _
1 P; E1 `) h! jIndex exceeds matrix dimensions.
$ s3 c0 p% l8 K4 P" S, U2 \* E* a" @超出索引,例如a=[1 2 3],此时当用到a(4)时( z& I" R# N! N/ }+ x
虽然定义了a1~3,但没有定义a4,此时却用到了a4,因此报错
6 ^- H4 n) \! A, X$ s本质上,这也是一种未定义先使用的错误& w k( k6 ]9 ~6 ~
! t) D( b, C3 V/ W
Subscript indices must either be real positive integers or logicals.
2 E$ h: N8 b9 k参考矩阵赋值中所说的分块赋值,圆括号中表示位置或者序号,当圆括号中出现非自然数时报错% z `' R0 p+ g" g) [: `. ^
, q7 O: H# d) [) }2 v) e& ^1 B
Expression or statement is incorrect--possibly unbalanced (, {, or [., j1 w, t* x+ G4 m
有开括号而没有关括号,或者有关括号而没有开括号,一般是计算式太长而打错了
9 w' [9 M R1 _6 D. m8 ^$ A8 h5 f# a
2 ?& m- g S- t9 f5 QInvalid data type. 或者Data must be numeric.
! b9 _8 t6 K) c0 {9 }. ~! W2 ^或者Undefined function '函数名' for input arguments of type 'double'.0 e m: M$ Z. z5 \9 S
参考前述的数值运算与符号运算的说明,有些函数只用于数值,有些只用于符号,混用时报错。$ T+ P' t' `5 B' F) i
) o( L: t. r$ O5 }+ B, R2 N3.最后总结
) q) _% X) y: k* ?. s9 ?1)doc+函数名,多看帮助多看范例。看到范例,逐行运行看结果
6 |) M5 @! F' n: D/ V+ V1 Z2)分清数值和符号,两种运算两套系统% l8 K" f& e4 q8 C* W+ [
3)学好数学再学软件(其实基本的数学知识在帮助文档里也有)2 G' a2 Q3 N. _4 o" R6 ^8 D! l
|
|