QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 847|回复: 0
打印 上一主题 下一主题

调试MATLAB程序

[复制链接]
字体大小: 正常 放大
回帖奖励 10 点体力 回复本帖可获得 10 点体力奖励! 每人限 1 次(中奖概率 10%)

413

主题

36

听众

1854

积分

升级  85.4%

  • TA的每日心情
    开心
    2019-9-18 21:55
  • 签到天数: 258 天

    [LV.8]以坛为家I

    社区QQ达人

    群组2015国赛冲刺

    群组2016美赛公益课程

    群组国赛讨论

    群组第三届数模基础实训

    群组Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2015-9-3 20:53 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

                            调试MATLAB程序
    有一个古老的说法,人这一生唯一能够确定的东西是死亡和税收.我们在这里再增加一项,无论你编定多大的程序,你第一次运行时,肯定通不过!
        程序中的错误我们称之为BUGS,找出并排出它们,我们称之为调试(debugging).已知一个程序,而无法运行,我们怎样调试它呢?

    MATLAB中有三种类型的错误.
        第一种错误是语法错误.语法错误是MATLAB自身的错误,例如拼写错误和标点错误.当编译M文件时,maltab编译器将会找出这些错误.例如,语句

    x = ( y + 3 ) / 2 );

    有一个语法错误,因为其括号不平衡.

    如果这句存储在M文件test.m中,当test编译进,将会出现下面的信息。

    >> test
    ??? Error: File:d:\MATLAB7\work\test.m Line: 1 Column: 10
    Unbalanced or misused parentheses orbrackets.


    第二种类型的错误是一种运行时错误。当一个非法的数学运算出现在程序的过程(例如,除以0),将会出现运行时错误。这些错误将会使程序返回InfNaN,用来参与下一步的运算。导致这个程序的结果变无效。

    错误的第三种形式是逻辑错误(logical error).逻辑错误是指编译和运行都能通过,而产生了错误的结果。

    在编程过程中出现的最普遍的错误是书写错误。一些书写错误可能产生无效的MATLAB语句。这些错误产生的语法错误可能会被编译器发现。另一个书写错误发生在变量名的书写上。例如,变量中的字符可能被调换,漏写或错写。这样就会创建一个新的变量,在前面我们已经提到,MATLAB能够很容易地创造一个新的变量,它不会发现这个错误。书写错误也能导致逻辑错误。例如,如果变量vel1vel2都在程序中代表速度,如果一时疏忽用其中一个替代了另一个,那么你就只能用人工检查代码找出此类错误。
        有的时侯程序开始时能够执行,但是运行时错误和逻辑错误可能在执行中发生。在这种情况下,可能是输入错误,也可能是逻辑结构错误。找出这类错误的第一步是检查程序的输入数据。既可以去掉输入语句后的分号,也可以加入一个多余的输出语句以证明这个输入值是不是你想要的。如果你已经排除了变量名错误和输入值错误,接着你要处理的是逻辑错误。你应该检测是否有逻辑错误,应当检查每一个赋值语句。

    1.如果一个赋值语句非常的长,把他分成许多小的赋值语句。小的语句易证明。

    2.检查你的赋值语句中括号的放置。在赋值语句中,由于括号导致运算顺序错误是极其常见的错误。如果你对运算顺序仍有疑问,应该多加括号,使之更加清晰。

    3.保证每个变量正确的初始化。

    4.保证函数中用到的单位统一。例如,在三角函数中输入必须是弧度值,而不是角度值。如果你仍然得到的是错误的语句,在更多的位加上输出语句,以检查中间计算。
        如果你能确定错误的位置,那么你就知道在那里找到问题所在,百分九十五地在这片区域内。如果问题依然存在,那么这时你就应当把你遇到的问题解释给你的同学或老师,让他们给你检查错误。
        一个人看自己编写的代码找不到错误是非常常见的,而其他的人则可以迅速地找出错误的地方,而这个地方你可能已经看了一次又一次。


    好的编程习惯

    确保你在编程设计过程:

    1.初始化所有变量

    2.适当应用括号使运算顺序清晰以减少调试的工作量


    MATLAB中有一个专门的调试器,叫做symbolic debugger.
            symbolicdebugger
    允许用户一句一句地执行语句,检测出所有的变量值,它能让你看到所有的中间值,而不用在其中加入输出语句。



    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    数学中国版主团队!
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-1-1 12:17 , Processed in 0.411568 second(s), 51 queries .

    回顶部