|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Smartk 于 2020-2-18 16:17 编辑 0 ~$ O3 g! @9 [# _9 s
7 R% H8 @5 C9 x* m: t: `* g
! n0 ~* v* O7 Z& M' P8 P. {% _/ l1.打断点和分段
: m8 H( U2 k8 N, a 写完脚本并保存后,在每一行可执行代码前,有一个行号,和一个小横线。报错信息中会有类似“Error in 文件名 (line 行号)”这样的提示,其中的行号就是代码前的这个行号。小横线说明这一行是可执行代码,而不是注释。鼠标左键小横线,此时横线变为红点,说明在这个位置设置了一个断点。脚本运行时,遇到断点会自动暂停,并进入调试模式。此时可以用continue继续执行,也可以step逐行执行,也可以step in进入调用的子函数执行。初学者一般熟悉step即可。2 A/ \) i& ?4 V* m
7 y% _5 d g" @0 w- e k
5 v% c7 h9 M5 n- \' |$ R5 j
; u$ L0 @& k! m" d7 r3 _& t! R4 I" T4 h5 j. j
进入调试模式时,可以观察workspace里的变量,看是否和预想一样,也可以在command window里输入其他代码或运行其他脚本/函数。在调试模式中,可以通过左键断点(红点)和小横线来设置新的断点和取消旧的断点。也可以按quit debugging退出调试模式。
" c( e8 X8 q4 [% g 分段是类似断点的一种运行方式,参考上一篇中%%注释的说明。当脚本中有多个%%时,%%相当于分段符号,左键run and advance可以实现逐段运行,运行完一段后,相当于进入调试模式,可以在workspace里查看运行结果,但其他的操作一般不建议进行。分段运行的另一种用法,是需要输出多个图像的时候,可以运行一段,截图,再运行一段,再截图。; d# y0 n' Q; {* m. X8 z( [2 g9 a
6 u2 ~. p P4 M1 A1 W) n9 Z2.常见报错; V- d+ K; x7 l6 J2 r% J
运行脚本后,会在command window里出现红色或者黄色的字,就是报错信息与提示。首先,报错信息会给出定位,哪个文件,第几行。有时会在多个位置给出报错,这说明报错那行的调用关系,例如自定义脚本A中n行调用了自定义函数B,而自定义函数B的m行出错了,则报错信息会定位到A的n和B的m,看起来好像是两个地方出错,其实是B的m错了,但实际中也可能是调用B的方式不对。这种情况尤其会出现在调用系统自带函数时,此时一般是调用方式不对,所以要关注A的n。
0 k1 {2 Z- G) z" U9 B$ M- q 给出报错定位后,就是看具体的报错信息了,matlab中常见的一些报错信息有:
' s6 X0 W3 A) k! C0 s
& a. X; e6 j, F6 a8 GUndefined function or variable '函数/变量名'., C7 ^/ Q/ u0 h0 p
说明使用变量前没有遵循先定义再使用的原则
( V: k% a! s9 C% \0 R) }
" i2 t0 t* S2 eInner matrix dimensions must agree.# u; s, C4 p" v% S6 n4 ^
数值运算中常见错误,参考数值基本运算那篇的矩阵运算部分9 E0 _* {. n4 t
) p/ A! `0 A- g* [5 f
Index exceeds matrix dimensions.
0 \; W- m$ L+ e" l* m超出索引,例如a=[1 2 3],此时当用到a(4)时
2 _" k. U1 K( Y9 H0 R, i, v, U虽然定义了a1~3,但没有定义a4,此时却用到了a4,因此报错; M1 d4 K& K) U
本质上,这也是一种未定义先使用的错误
4 V1 ?, Q- s0 \
1 W6 v2 c$ r+ r; j% N" W# `Subscript indices must either be real positive integers or logicals.% @+ n$ ^) z* b; a1 U( W8 Z
参考矩阵赋值中所说的分块赋值,圆括号中表示位置或者序号,当圆括号中出现非自然数时报错
9 k/ t% G( d( E& O6 e8 e
/ W* F* U5 c& Q$ [+ L) HExpression or statement is incorrect--possibly unbalanced (, {, or [.: f s8 P3 ]) L8 t
有开括号而没有关括号,或者有关括号而没有开括号,一般是计算式太长而打错了4 F$ \3 k R- E' X6 I
2 b) G; e& ?% q7 h) A6 N& C$ f$ z7 f
Invalid data type. 或者Data must be numeric.
4 i" V# J7 g! t% V- Z+ D: B或者Undefined function '函数名' for input arguments of type 'double'.& |/ v* P& k5 m$ q
参考前述的数值运算与符号运算的说明,有些函数只用于数值,有些只用于符号,混用时报错。: X$ [" P5 ^+ C5 b3 C% \4 Q
8 U$ I. t2 F& j( U3 ?, q! v# {. F; ?( ^
3.最后总结
@; b4 N5 D% b( ^& J4 X1)doc+函数名,多看帮助多看范例。看到范例,逐行运行看结果
* i1 t+ @6 L6 J8 Z0 u6 Z2)分清数值和符号,两种运算两套系统
# m& m' r' p7 q% L8 F! j$ z3)学好数学再学软件(其实基本的数学知识在帮助文档里也有)% u6 A) ^8 U- D' J: l
|
|