|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Smartk 于 2020-2-18 16:17 编辑
' H/ g& ^! X2 o7 e7 ~9 b' n/ {/ j: }8 y: _1 q8 b
2 Y. E) D8 w! k, `) T7 ^+ t
1.打断点和分段
. `5 F& B3 f! \; I0 @ 写完脚本并保存后,在每一行可执行代码前,有一个行号,和一个小横线。报错信息中会有类似“Error in 文件名 (line 行号)”这样的提示,其中的行号就是代码前的这个行号。小横线说明这一行是可执行代码,而不是注释。鼠标左键小横线,此时横线变为红点,说明在这个位置设置了一个断点。脚本运行时,遇到断点会自动暂停,并进入调试模式。此时可以用continue继续执行,也可以step逐行执行,也可以step in进入调用的子函数执行。初学者一般熟悉step即可。
5 q" O j& W: u4 ], Z- F) U / B. m/ \; T4 b: }# Y
* d, V+ U, S5 O x9 \3 c: n4 m
( D$ y( Y5 a: }9 u$ O
n- u7 i, a C* Y 进入调试模式时,可以观察workspace里的变量,看是否和预想一样,也可以在command window里输入其他代码或运行其他脚本/函数。在调试模式中,可以通过左键断点(红点)和小横线来设置新的断点和取消旧的断点。也可以按quit debugging退出调试模式。
2 G* I+ K. z' ` 分段是类似断点的一种运行方式,参考上一篇中%%注释的说明。当脚本中有多个%%时,%%相当于分段符号,左键run and advance可以实现逐段运行,运行完一段后,相当于进入调试模式,可以在workspace里查看运行结果,但其他的操作一般不建议进行。分段运行的另一种用法,是需要输出多个图像的时候,可以运行一段,截图,再运行一段,再截图。! S" c" S. ]0 k5 Z, o3 I
9 {. ^8 l; j0 V J. l: L' I2.常见报错' P# U/ U5 s, }, m7 r# b
运行脚本后,会在command window里出现红色或者黄色的字,就是报错信息与提示。首先,报错信息会给出定位,哪个文件,第几行。有时会在多个位置给出报错,这说明报错那行的调用关系,例如自定义脚本A中n行调用了自定义函数B,而自定义函数B的m行出错了,则报错信息会定位到A的n和B的m,看起来好像是两个地方出错,其实是B的m错了,但实际中也可能是调用B的方式不对。这种情况尤其会出现在调用系统自带函数时,此时一般是调用方式不对,所以要关注A的n。& V g0 n, ^0 |6 y* ~
给出报错定位后,就是看具体的报错信息了,matlab中常见的一些报错信息有:8 l4 ~" I& `2 O( D% M6 ~
% N9 ~& }$ d9 |- V6 {$ Q5 U( F- C
Undefined function or variable '函数/变量名'.
/ L" J7 p/ C3 R- r: T说明使用变量前没有遵循先定义再使用的原则
4 O H5 D/ N. _. h* ^ d" o
$ O2 z n h; \1 |/ p6 f4 z! R# @Inner matrix dimensions must agree.
, f: ]& r9 Y. b4 C& g数值运算中常见错误,参考数值基本运算那篇的矩阵运算部分5 y. G" x- S$ Z7 U* b: X; M
8 _) K6 y/ o1 d {) ^
Index exceeds matrix dimensions.
; m: I, q4 v T9 m超出索引,例如a=[1 2 3],此时当用到a(4)时9 d! l/ D q: D1 M
虽然定义了a1~3,但没有定义a4,此时却用到了a4,因此报错( u/ O% c( x0 a, Q7 F
本质上,这也是一种未定义先使用的错误. Y* ?: F. a! {/ ]
1 c5 @$ V% `. _" }6 cSubscript indices must either be real positive integers or logicals., d6 F9 [7 Y0 H6 [8 R& @- }: k. ~
参考矩阵赋值中所说的分块赋值,圆括号中表示位置或者序号,当圆括号中出现非自然数时报错
2 r+ N7 G( I1 J+ [5 S' z% j6 u5 n5 ?* V& H/ k
Expression or statement is incorrect--possibly unbalanced (, {, or [.
/ L! v" U4 Q) x- l/ r& J- s8 Q c有开括号而没有关括号,或者有关括号而没有开括号,一般是计算式太长而打错了
: y+ \4 r0 K0 r5 ~0 q! S7 ?7 Q" b8 r( y
; Q4 L+ P) F' ^4 c4 s/ N5 rInvalid data type. 或者Data must be numeric.
* [, P0 G! {8 _4 ^! [, V- q或者Undefined function '函数名' for input arguments of type 'double'.1 P" p8 ~4 ?: @1 l
参考前述的数值运算与符号运算的说明,有些函数只用于数值,有些只用于符号,混用时报错。
5 D2 b. h3 G2 w3 ~) v6 T! v4 u, ^, u4 A
3.最后总结
( O7 G" y! V3 t1)doc+函数名,多看帮助多看范例。看到范例,逐行运行看结果
: q: Q6 q7 B8 J: m% Q5 p: e2)分清数值和符号,两种运算两套系统8 \% R6 j& R% L: \" c. z
3)学好数学再学软件(其实基本的数学知识在帮助文档里也有)
, z5 T; Z: o) Y4 [ |
|