|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Smartk 于 2020-2-18 16:17 编辑 ' W1 d6 ?0 w4 K7 T0 @
5 }6 u# \ Y) \: L, X z( Q
6 Y) K6 w* ?: l4 |5 Q1.打断点和分段
' \0 v6 ~* ^9 ?: B8 C2 z1 M4 k 写完脚本并保存后,在每一行可执行代码前,有一个行号,和一个小横线。报错信息中会有类似“Error in 文件名 (line 行号)”这样的提示,其中的行号就是代码前的这个行号。小横线说明这一行是可执行代码,而不是注释。鼠标左键小横线,此时横线变为红点,说明在这个位置设置了一个断点。脚本运行时,遇到断点会自动暂停,并进入调试模式。此时可以用continue继续执行,也可以step逐行执行,也可以step in进入调用的子函数执行。初学者一般熟悉step即可。
! Z: Z" x5 p& K& c0 M' @8 L* _
! n' O4 {3 w3 C/ U1 W( V- M
) x% C, Z/ x6 @# F0 ~
! s. K! Q$ ]$ ~5 Q7 `1 t
+ T! S0 g$ v3 R# T/ h- E) s2 l& w 进入调试模式时,可以观察workspace里的变量,看是否和预想一样,也可以在command window里输入其他代码或运行其他脚本/函数。在调试模式中,可以通过左键断点(红点)和小横线来设置新的断点和取消旧的断点。也可以按quit debugging退出调试模式。- j4 p5 ^5 w2 E
分段是类似断点的一种运行方式,参考上一篇中%%注释的说明。当脚本中有多个%%时,%%相当于分段符号,左键run and advance可以实现逐段运行,运行完一段后,相当于进入调试模式,可以在workspace里查看运行结果,但其他的操作一般不建议进行。分段运行的另一种用法,是需要输出多个图像的时候,可以运行一段,截图,再运行一段,再截图。1 D5 ~' {& g* }4 J$ e; v
! ]8 o- w- L3 ]
2.常见报错
. m! h) `' _; Y 运行脚本后,会在command window里出现红色或者黄色的字,就是报错信息与提示。首先,报错信息会给出定位,哪个文件,第几行。有时会在多个位置给出报错,这说明报错那行的调用关系,例如自定义脚本A中n行调用了自定义函数B,而自定义函数B的m行出错了,则报错信息会定位到A的n和B的m,看起来好像是两个地方出错,其实是B的m错了,但实际中也可能是调用B的方式不对。这种情况尤其会出现在调用系统自带函数时,此时一般是调用方式不对,所以要关注A的n。# }" h+ T4 b# e! U1 X
给出报错定位后,就是看具体的报错信息了,matlab中常见的一些报错信息有:
0 j5 q2 O' s) S% ?3 I+ o% P, E4 B+ ~. @
Undefined function or variable '函数/变量名'.
) g" @3 x! E$ u: [) d说明使用变量前没有遵循先定义再使用的原则
& R$ P: d7 s9 E; e6 @" S U2 A" d9 u3 R4 R* Q; V) t! W
Inner matrix dimensions must agree. c+ Z# m9 r) j8 I6 M
数值运算中常见错误,参考数值基本运算那篇的矩阵运算部分$ v( ~4 l8 `+ \" u
/ s% D, a& L$ T/ m- G# ]6 l) PIndex exceeds matrix dimensions.
) w2 d4 j) {6 e. y) ]超出索引,例如a=[1 2 3],此时当用到a(4)时5 B3 `+ n- l, [* m' j* K, z
虽然定义了a1~3,但没有定义a4,此时却用到了a4,因此报错( R+ N" ]* M* S. |0 h5 C
本质上,这也是一种未定义先使用的错误
7 Q$ e! B% T" ?2 o8 u0 E2 ~5 n- a
Subscript indices must either be real positive integers or logicals.2 P' R% f; B6 L- ~! K
参考矩阵赋值中所说的分块赋值,圆括号中表示位置或者序号,当圆括号中出现非自然数时报错, o1 N0 n# F# k& u
5 ` |6 ~) F9 a4 m2 H" e; Z+ L
Expression or statement is incorrect--possibly unbalanced (, {, or [.
0 S$ a/ H7 y/ r: N T) o有开括号而没有关括号,或者有关括号而没有开括号,一般是计算式太长而打错了
2 q! d, S! _" \- O. j! [- |9 Q3 I# W% b( V; j+ c- P1 L. S9 [
Invalid data type. 或者Data must be numeric.
0 u. O0 o* H+ n$ @( U或者Undefined function '函数名' for input arguments of type 'double'.. Q- q- L0 G5 O1 p* \" y5 j: d0 s
参考前述的数值运算与符号运算的说明,有些函数只用于数值,有些只用于符号,混用时报错。
% O: s( \/ u* |' T$ H, s
$ |2 }" X1 S& P. O, `5 Q% Y6 }! C8 s3.最后总结# J( n, n/ i+ G. n
1)doc+函数名,多看帮助多看范例。看到范例,逐行运行看结果" K, m4 N7 _9 Q% p; S
2)分清数值和符号,两种运算两套系统9 H; {' ~3 b! s D: r+ k; W, R
3)学好数学再学软件(其实基本的数学知识在帮助文档里也有)! J' j' i1 U! y! L; `! l( y$ S" q! u
|
|