APP下载

Matlab程序单步调试方法及样例分析

2015-08-14王若楠田野马玉峰刘立士

现代电子技术 2015年15期
关键词:计算结果

王若楠+田野+马玉峰+刘立士

摘 要: 针对单步调试法在程序调试中的重要作用,引用了一个具体的样例,进行Matlab程序单步调试法的分析并逐步检验,根据运行结果与实际计算结果的比较,验证了该方法在程序调试中的重要地位,并且该实验结果还可以应用于复杂的算法验证中,具有很大的实用意义。

关键词: 程序调试;系统质量;运行结果;计算结果;单步调试法

中图分类号: TN92?34 文献标识码: A 文章编号: 1004?373X(2015)15?0139?03

Single?step debugging method of Matlab program and instance analysis

WANG Ruonan, TIAN Ye, MA Yufeng, LIU Lishi

(School of Information Science and Engineering, Shenyang Ligong University, Shenyang 110159, China)

Abstract: A specific instance is cited and analyzed by using single?step debugging of Matlab program. The debugging method is verified step by step. In comparison with operation results and actual computation results, the important status of the proposed method in program debugging is verified. The experimental results can be applied in complicated algorithm verification. The method has great practical significance.

Keywords: program debugging; system quality; operation result; computation result; single?step debugging method

0 引 言

Matlab(Matrix Laboratory)作为一种高效的科学及工程计算语言,广泛地应用于数学分析、自动控制、系统仿真、人工智能等领域[1?5]。

在Matlab应用中,程序调试是保证系统质量的关键步骤[6?7],其主要目的是发现程序中的错误并及时纠正。目前主要有直接调试和单步调试两种方法。直接调试法主要应用于简单的Matlab程序,如程序设计中的流程控制问题;当M文件很大或者M文件中含有复杂的嵌套时,则需要单步调试法对程序进行调试,文献[8]采用单步调试法验证信号处理指标和实时性是否满足要求,文献[9]针对现场故障,采用继电保护应用软件仿真验证系统,进行单步跟踪调试,准确判断装置保护程序逻辑正确性。

上述研究只是应用了单步调试方法,并没有提到具体的调试步骤。因此,本文针对具体的样例,进行了Matlab环境下程序的单步调试,该样例可为复杂的Matlab程序设计提供依据和参考。

1 单步调试法

程序调试中常见的错误有以下三种:拼写错误、语法错误与逻辑错误[1],Matlab会在程序运行出错的时候提示是哪一行出现问题,但却不能确定导致出错的是哪一行,或者在运行过程中没有报错,但是得出的结果却是不符合逻辑的。在这些情况下就需要单步调试解决问题。单步调式法具体可以由以下几个步骤完成:

(1) 设置断点;

(2) 程序运行到断点时步进;

(3) 在断点处查看所调试的变量是否与逻辑值相符;

(4) Step in,进入子程序,查看运行情况;

(5) 在子程序中步进或者直接跳出进入主程序。

2 样例分析

以公式[y=110n=010n?P(A(z,x)=n)+n=11∞P(A(z,x)=n)]为例,其中复合函数[A(z,x)]服从泊松分布,即[P(A(z,x)=n)]的概率[10]为:

[P(A(z,x)=n)=(z?x)n?e-z?xn!] (1)

将式(1)代入样例公式得:

[y=110y1+y2] (2)

其中:

[y1=n=010n?(z?x)n?e-z?xn!] (3)

[y2=n=11∞(z?x)n?e-z?xn!] (4)

仿真参数[z]设置为1,以[x=1]为例,使用单步调试法测试程序的正确性。图1为该公式的主程序示意图。

图1 主程序

程序中的[s1(1,x)]和[s2(1,x)]分别对应公式中的[y1]和[y2]。

首先设置断点,如图2所示。

图2 主程序断点设置

单击运行程序,当程序运行到断点处时即暂停,然后单击单步运行,当程序运行到第二个断点时,即进入泊松子程序,如图3所示。

图3 泊松子程序

运行完这一步后,跳出子程序,回到主程序,此时程序的各参数运行结果如图4所示。

此时,将[z=1,][x=1]与[n=0]代入式(3),得出此时[y1]的累加结果为[y1=0],此结果与上述程序运行结果相符,继续测试当[n=1]时的结果。点击继续程序的运行,当第二次运行完时,各参数运行结果如图5所示。

图4 [n=0]时的运行结果

图5 [n=1]时的运行结果

此时,将[z=1,][x=1]与[n=1]代入式(3),得出此时[y1]的累加结果如图6所示。

图6 [n=1]时的计算结果

此结果与上述程序运行结果相符,继续测试当[n=2]时的运行结果。点击继续程序的运行,当第三次运行完时,各参数运行结果如图7所示。

图7 [n=2]时的运行结果

此时,将[z=1,][x=1]与[n=2]代入式(3),得出此时[y1]的累加结果如图8所示。

图8 [n=2]时的计算结果

此结果与上述程序运行结果相符,可以表明该主程序的第一部分是正确的。

继续设置断点,如图9所示。

图9 主程序第二次设置断点

单步运行程序,当运行完一次后,各参数运行结果如图10所示。

图10 [n=11]时的运行结果

将[z=1,][x=1]与[n=11]代入式(4),得出此时[y2]的累加结果如图11所示。

图11 [n=11]时的计算结果

此结果与上述程序运行结果相符,继续测试当[n=12]时的运行结果。点击继续程序的运行,当第二次运行完时,各参数运行结果如图12所示。

图12 [n=12]时的运行结果

将[z=1,][x=1]与[n=12]代入式(4),此时[y2]的累加结果如图13所示。

图13 [n=12]时的计算结果

此结果与上述程序运行结果相符,可以表明该主程序的第二部分是正确的。

综合上述的分析,该程序的第一部分及第二部分对于每次累加后[y1]和[y2]的结果都是正确的,所以,其编写是正确的。因此,该样例成功运用单步调试法完成了本程序的测试,为后续大数量数据的运行提供了基础。

3 结 论

通过以上实例的分析,验证了单步调试法在程序测试中的重要作用。通过此方法,程序员可以通过Matlab搭建系统模型,利用Matlab软件本身的计算优势,在程序编译过程中快速找到错误所在,提高编写程序的效率,还可以应用于复杂的算法测控中,具有很强的实用价值。

注:本文通讯作者为田野。

参考文献

[1] 许波,刘征.Matlab工程数学应用[M].北京:清华大学出版社,2000.

[2] 王向东,戎海武,文翰.数学实验[M].北京:高等教育出版社,2004.

[3] 薛定宇,陈阳泉.高等应用数学问题的Matlab求解[M].北京: 清华大学出版社,2004.

[4] 黄忠霖.控制系统Matlab计算机仿真[M].北京:国防工业出版社,2004.

[5] 姜启源,邢文训,谢金星,等.大学数学实验[M].北京:清华大学出版社,2005.

[6] 李建新,刘乃安,刘继.现代通信系统分析与仿真[M].西安:西安电子科技大学出版社,2001.

[7] 刘志俭.Matlab应用接口用户指南[M].北京:科学出版社,2000.

[8] 刘春.伪码调相中断连续波雷达信号处理系统的设计与实现[D].南京:南京理工大学,2010.

[9] 朱宁,吴崇昊,李志坚,等.一种继电保护应用软件仿真验证系统的设计[J].电力自动化设备,2012,32(6):140?144.

[10] 毛用才,胡奇英.随机过程[M].西安:西安电子科技大学出版社,2006.

猜你喜欢

计算结果
4种估算肾小球滤过率计算公式对患者肾功能的评估结果比较
不等高软横跨横向承力索计算及计算结果判断研究
勘误说明
存放水泥
趣味选路
扇面等式
基于MIKE21二维数值模拟的不同桥墩概化方式下河道壅水计算结果对比分析
脑筋急转弯
超压测试方法对炸药TNT当量计算结果的影响
噪声对介质损耗角正切计算结果的影响