|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Smartk 于 2020-2-18 16:17 编辑
@% U8 u5 ~1 V1 H/ U' i# k4 f
: t3 h$ I C1 c8 s
* b; e: _) ?$ p, ^5 V7 O+ [, i* k1.打断点和分段
0 g6 x' B6 w" K) v3 f1 m! D3 } 写完脚本并保存后,在每一行可执行代码前,有一个行号,和一个小横线。报错信息中会有类似“Error in 文件名 (line 行号)”这样的提示,其中的行号就是代码前的这个行号。小横线说明这一行是可执行代码,而不是注释。鼠标左键小横线,此时横线变为红点,说明在这个位置设置了一个断点。脚本运行时,遇到断点会自动暂停,并进入调试模式。此时可以用continue继续执行,也可以step逐行执行,也可以step in进入调用的子函数执行。初学者一般熟悉step即可。5 S8 U1 n! t5 N# m
2 p2 ^/ `& t/ L8 S
+ n k8 `4 s6 e: v9 [0 C
1 `* C: r6 l b/ ^' h( ?- ~& ?, [
进入调试模式时,可以观察workspace里的变量,看是否和预想一样,也可以在command window里输入其他代码或运行其他脚本/函数。在调试模式中,可以通过左键断点(红点)和小横线来设置新的断点和取消旧的断点。也可以按quit debugging退出调试模式。8 q* u* \) b/ e" |8 ?
分段是类似断点的一种运行方式,参考上一篇中%%注释的说明。当脚本中有多个%%时,%%相当于分段符号,左键run and advance可以实现逐段运行,运行完一段后,相当于进入调试模式,可以在workspace里查看运行结果,但其他的操作一般不建议进行。分段运行的另一种用法,是需要输出多个图像的时候,可以运行一段,截图,再运行一段,再截图。
6 H% g+ t$ O3 y; G* V1 Y1 W0 E3 ]5 W: o: P
2.常见报错0 H( d4 n# N" k! {. M
运行脚本后,会在command window里出现红色或者黄色的字,就是报错信息与提示。首先,报错信息会给出定位,哪个文件,第几行。有时会在多个位置给出报错,这说明报错那行的调用关系,例如自定义脚本A中n行调用了自定义函数B,而自定义函数B的m行出错了,则报错信息会定位到A的n和B的m,看起来好像是两个地方出错,其实是B的m错了,但实际中也可能是调用B的方式不对。这种情况尤其会出现在调用系统自带函数时,此时一般是调用方式不对,所以要关注A的n。
) _: a! }% R) f6 u4 l: h+ e4 W6 F 给出报错定位后,就是看具体的报错信息了,matlab中常见的一些报错信息有:1 G( `' v8 p; l5 J
$ a& q5 v+ `" ]% M5 i* b2 S! Z% \Undefined function or variable '函数/变量名'.$ R! [+ _5 E. G% e+ X) c! I: y9 W
说明使用变量前没有遵循先定义再使用的原则
9 c& ?- ^7 r0 [2 O K6 l6 Z" ]: J( T# ^
Inner matrix dimensions must agree.3 ?+ n3 K* F; ]) N
数值运算中常见错误,参考数值基本运算那篇的矩阵运算部分
& Y, ]3 k7 V9 F+ ?1 Y
: [ ]& A7 g3 @Index exceeds matrix dimensions.* e0 U- W" l/ V+ m I8 ]- i* `( d: q+ F
超出索引,例如a=[1 2 3],此时当用到a(4)时' D z, O/ _( h6 _' X, w# n B
虽然定义了a1~3,但没有定义a4,此时却用到了a4,因此报错0 m3 u4 i$ e8 }- D+ |. y
本质上,这也是一种未定义先使用的错误
/ G6 L7 [- x4 R3 z* L s5 l- o7 Y3 v
Subscript indices must either be real positive integers or logicals.
5 ?; d: K' a( ]( c% E参考矩阵赋值中所说的分块赋值,圆括号中表示位置或者序号,当圆括号中出现非自然数时报错
1 s9 {1 g( ~: d: A, t0 \7 N% g! h; }
Expression or statement is incorrect--possibly unbalanced (, {, or [.
4 M: Q* K% A2 c2 g$ Z有开括号而没有关括号,或者有关括号而没有开括号,一般是计算式太长而打错了
) H |, P; u' N. T b7 n
4 B+ \3 p& I. P3 LInvalid data type. 或者Data must be numeric.1 z1 N. H6 v g3 Y0 w$ a s S$ ?
或者Undefined function '函数名' for input arguments of type 'double'.
6 ^8 Z$ ~2 V1 J- c) ~参考前述的数值运算与符号运算的说明,有些函数只用于数值,有些只用于符号,混用时报错。
; k, h0 v5 o C5 N2 X9 Y' L" Q) l! p
3.最后总结) | e& [6 o2 {4 n5 \3 z
1)doc+函数名,多看帮助多看范例。看到范例,逐行运行看结果
# b+ Y" \+ @! B0 Q4 D2)分清数值和符号,两种运算两套系统4 `& o3 G8 u4 ^5 r9 h# T1 b) J
3)学好数学再学软件(其实基本的数学知识在帮助文档里也有)
2 w) H9 e* h3 l( _8 s; z |
|