|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Smartk 于 2020-2-18 16:17 编辑
3 D5 z/ B1 R+ f9 E+ p3 e: d9 y/ H+ b) ]
, \: k0 S9 }9 g
1.打断点和分段
9 \, K- c! x1 U# e; [ 写完脚本并保存后,在每一行可执行代码前,有一个行号,和一个小横线。报错信息中会有类似“Error in 文件名 (line 行号)”这样的提示,其中的行号就是代码前的这个行号。小横线说明这一行是可执行代码,而不是注释。鼠标左键小横线,此时横线变为红点,说明在这个位置设置了一个断点。脚本运行时,遇到断点会自动暂停,并进入调试模式。此时可以用continue继续执行,也可以step逐行执行,也可以step in进入调用的子函数执行。初学者一般熟悉step即可。
' m( R3 t5 n3 R$ ^
T1 y5 C2 r% f4 M. U, u/ q [- b# s; S
" k) m" z/ X: z7 }; ~8 I
4 C$ Q/ w3 F" s7 R& I# g
进入调试模式时,可以观察workspace里的变量,看是否和预想一样,也可以在command window里输入其他代码或运行其他脚本/函数。在调试模式中,可以通过左键断点(红点)和小横线来设置新的断点和取消旧的断点。也可以按quit debugging退出调试模式。
7 a* o, C. R, T7 v( s 分段是类似断点的一种运行方式,参考上一篇中%%注释的说明。当脚本中有多个%%时,%%相当于分段符号,左键run and advance可以实现逐段运行,运行完一段后,相当于进入调试模式,可以在workspace里查看运行结果,但其他的操作一般不建议进行。分段运行的另一种用法,是需要输出多个图像的时候,可以运行一段,截图,再运行一段,再截图。4 ]# O) _! [) _8 i& v$ h: W
. [8 [: ^( F: \+ g: O
2.常见报错
8 e# T6 F# r5 }! [ 运行脚本后,会在command window里出现红色或者黄色的字,就是报错信息与提示。首先,报错信息会给出定位,哪个文件,第几行。有时会在多个位置给出报错,这说明报错那行的调用关系,例如自定义脚本A中n行调用了自定义函数B,而自定义函数B的m行出错了,则报错信息会定位到A的n和B的m,看起来好像是两个地方出错,其实是B的m错了,但实际中也可能是调用B的方式不对。这种情况尤其会出现在调用系统自带函数时,此时一般是调用方式不对,所以要关注A的n。# }8 ^3 T" Z) K1 U) R, w
给出报错定位后,就是看具体的报错信息了,matlab中常见的一些报错信息有:
" g- x- A1 L9 r7 q8 d$ m7 |
1 _! s5 [% [3 U9 D) o9 |3 Q8 SUndefined function or variable '函数/变量名'.
+ A- c: D0 A: w, v说明使用变量前没有遵循先定义再使用的原则+ p& X/ m7 F+ k/ s2 I( q7 T
6 f; k( k6 Y% D/ |6 D' t
Inner matrix dimensions must agree.5 a0 K7 h6 l$ h* e
数值运算中常见错误,参考数值基本运算那篇的矩阵运算部分3 z' L" L- h e
6 S# Q0 M% {, x+ AIndex exceeds matrix dimensions.3 @$ t, d- d+ F6 W# H
超出索引,例如a=[1 2 3],此时当用到a(4)时
' h& `& d5 g' b l, [- ?虽然定义了a1~3,但没有定义a4,此时却用到了a4,因此报错
+ q% D, P! q6 e: w$ X& f' l; [本质上,这也是一种未定义先使用的错误9 c2 V9 C* Y7 M* X9 o. b* F
# M' n1 ?' S8 @- ~. I& m8 kSubscript indices must either be real positive integers or logicals.
# ?; M, @5 O& H- n0 Q8 s参考矩阵赋值中所说的分块赋值,圆括号中表示位置或者序号,当圆括号中出现非自然数时报错7 P7 r+ G5 S2 u" Q/ m' w
+ R& h- g5 `4 R& k( ]
Expression or statement is incorrect--possibly unbalanced (, {, or [.
' i: u* A+ {2 ~! u) {+ J2 i: o有开括号而没有关括号,或者有关括号而没有开括号,一般是计算式太长而打错了7 b/ d! z* n8 b( f. W, S3 F5 Z
" Q" | v( _; f: RInvalid data type. 或者Data must be numeric.
$ [2 Q( f2 d5 x% R( w+ `& M或者Undefined function '函数名' for input arguments of type 'double'.
# j8 T( c! X+ E参考前述的数值运算与符号运算的说明,有些函数只用于数值,有些只用于符号,混用时报错。9 K' B* P$ S) R! U: X
" o. z2 M1 p9 w; n7 a( J3 j7 z! b6 ^3.最后总结" f- F3 n* a- i, J9 q$ a% Q
1)doc+函数名,多看帮助多看范例。看到范例,逐行运行看结果2 k' c& C+ g) p1 p
2)分清数值和符号,两种运算两套系统
1 e! r4 M8 v: x- e2 e3)学好数学再学软件(其实基本的数学知识在帮助文档里也有). T) v. _% M% D7 P: I( i: M
|
|