找回密码
 注册
关于网站域名变更的通知
查看: 541|回复: 1
打印 上一主题 下一主题

matlab最基础教程:编程调试与常见报错

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-2-18 16:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 Smartk 于 2020-2-18 16:17 编辑 / e6 i. @' y, D+ N2 S# D
0 v4 e2 X  F8 v
1 o" v( m5 B0 ]: ?9 M( l
1.打断点和分段
8 Y: E: D. Y$ d0 m. C* ^2 g   写完脚本并保存后,在每一行可执行代码前,有一个行号,和一个小横线。报错信息中会有类似“Error in 文件名 (line 行号)”这样的提示,其中的行号就是代码前的这个行号。小横线说明这一行是可执行代码,而不是注释。鼠标左键小横线,此时横线变为红点,说明在这个位置设置了一个断点。脚本运行时,遇到断点会自动暂停,并进入调试模式。此时可以用continue继续执行,也可以step逐行执行,也可以step in进入调用的子函数执行。初学者一般熟悉step即可。
% W% a% K2 ]* [* _9 n% R# k) ~* J$ t, o

3 {5 j: u  @: n& F1 k9 u5 n- o( i7 P  k( p
! X8 t% Q( {0 [/ @2 z. ?) y

" I4 [; l2 d! N8 Q7 A    进入调试模式时,可以观察workspace里的变量,看是否和预想一样,也可以在command window里输入其他代码或运行其他脚本/函数。在调试模式中,可以通过左键断点(红点)和小横线来设置新的断点和取消旧的断点。也可以按quit debugging退出调试模式。
6 x; a, a2 ?* k9 O    分段是类似断点的一种运行方式,参考上一篇中%%注释的说明。当脚本中有多个%%时,%%相当于分段符号,左键run and advance可以实现逐段运行,运行完一段后,相当于进入调试模式,可以在workspace里查看运行结果,但其他的操作一般不建议进行。分段运行的另一种用法,是需要输出多个图像的时候,可以运行一段,截图,再运行一段,再截图。
3 L9 L7 b" R* w8 q

* f+ U& }: k, W5 m$ {) O2.常见报错- T9 k9 e5 `' V, n3 v# J$ Z
    运行脚本后,会在command window里出现红色或者黄色的字,就是报错信息与提示。首先,报错信息会给出定位,哪个文件,第几行。有时会在多个位置给出报错,这说明报错那行的调用关系,例如自定义脚本A中n行调用了自定义函数B,而自定义函数B的m行出错了,则报错信息会定位到A的n和B的m,看起来好像是两个地方出错,其实是B的m错了,但实际中也可能是调用B的方式不对。这种情况尤其会出现在调用系统自带函数时,此时一般是调用方式不对,所以要关注A的n。
) S1 z! ]5 ~# Q2 q, M    给出报错定位后,就是看具体的报错信息了,matlab中常见的一些报错信息有:
/ S9 U, E6 w, U2 g" O3 n+ T0 d) u7 |( B5 S8 u% m
Undefined function or variable '函数/变量名'.
( t. e9 s5 o6 J* e说明使用变量前没有遵循先定义再使用的原则
9 B: V" ~2 R% b6 u$ H. o, |+ i1 w) ^7 E
Inner matrix dimensions must agree./ O! b9 q( X6 s& N; X& d) e
数值运算中常见错误,参考数值基本运算那篇的矩阵运算部分
- s! N7 b7 \+ h8 K) g( n9 r4 G" {# o( O+ N. Q" W: o: D! h5 X1 s& u7 [
Index exceeds matrix dimensions.* d$ e- f3 v+ `+ N2 d0 H
超出索引,例如a=[1 2 3],此时当用到a(4)时
0 `6 ], j; j; l8 @$ o2 b虽然定义了a1~3,但没有定义a4,此时却用到了a4,因此报错
# z  @& G- r6 x本质上,这也是一种未定义先使用的错误
$ c, F0 ~/ M$ z/ V0 u" o/ w" [$ a$ k" Y
) y9 Z9 I. K, e# uSubscript indices must either be real positive integers or logicals.
: V; A# V8 F* n/ K3 X: x. R. |参考矩阵赋值中所说的分块赋值,圆括号中表示位置或者序号,当圆括号中出现非自然数时报错
) |& w0 h- H, f4 _6 U" J( e/ ~
( U# q: I+ E0 A* b1 X& AExpression or statement is incorrect--possibly unbalanced (, {, or [.% H9 y% a8 Z% a( X' n2 C
有开括号而没有关括号,或者有关括号而没有开括号,一般是计算式太长而打错了
, ~3 g7 o4 V$ i% I* L* L2 _
5 @& N# s% G- O) }( Q; RInvalid data type. 或者Data must be numeric.: l# ?1 e3 N: x5 x
或者Undefined function '函数名' for input arguments of type 'double'.
* g$ w- O7 @% o; Z' ^参考前述的数值运算与符号运算的说明,有些函数只用于数值,有些只用于符号,混用时报错。6 v5 n9 C1 l2 _" g& B; Z* A

. q0 @1 L) ?! H3.最后总结
. c2 R% D/ a6 P' e5 [1 d2 o1)doc+函数名,多看帮助多看范例。看到范例,逐行运行看结果
8 Q. q  m: O5 u8 a2 Y2 Z2)分清数值和符号,两种运算两套系统
% V3 W/ J( h4 n& s3)学好数学再学软件(其实基本的数学知识在帮助文档里也有)
3 G" D1 {! y# X  A* j" q! E

该用户从未签到

2#
发表于 2020-2-27 16:11 | 只看该作者
matlab最基础教程:编程调试与常见报错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 03:55 , Processed in 0.156250 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表