学习matlab(十一)——流程控制

MATLAB编程的基本结构包括:顺序结构、分支结构和循环结构,此外还有一些其它的控制语句。本节首先介绍MATLAB中的变量,然后将详细介绍三种基本的程序结构,最后介绍了交互式输入。

0.变量

在MATLAB中,变量的类型包括:局部变量、全局变量和永久变量。MATLAB为每个变量分配一块内存空间。变量和工作空间紧密联系。1.局部变量 2.全局变量:全局变量采用global进行声明,格式为:global 变量1 变量
2,中间采用空格进行分割。3.永久变量 永久变量只能在函数M文件中进行定义,格式为:persistent 变量1 变量2。中间采用空格进行分割。

1.顺序结构

顺序结构是最简单的程序结构,用户在编写好程序后,按照从上到下、从左到右的顺序执行程序中的语句。由于没有控制语句,结构比较单一,但是这种程序比较容易编写。

2.分支结构

分支结构需要进行判断,只有满足一定的条件才执行某些语句。在MATLAB中,分支结构有两类:if语句和switch语句。下面分别进行介绍。1. if...end语句 2. if...else...end语句 3. if... elseif... else...end语句 4.switch...case...end语句

x=87;

if x>=90
    disp('优秀');
elseif x>=80
    disp('良好');
else
    disp('及格');
end

3.循环结构

循环结构能够重复执行某一段相同的语句。MATLAB中,提供了两种循环语句,分别是for循环和while循环。如果已知循环次数,通常用for循环语句;如果未知循环次数,但有循环条件,则用while循环语句。1. for循环语句 2. while循环语句 3. break语句和continue语句。

x = zeros(5,5);
for i=1:5
    for j=1:5
        x(i,j)=i^j;
    end
end
x

4.try-catch

在程序设计时,如果不能确定某段程序代码是否会出错,可以采用try...catch语句。在MATLAB中,使用try...catch语句能够捕获和处理错误,其调用格式为:try 程序代码1 catch 程序代码2 end。

5.人机交互函数

在MATLAB中提供了一些人机交互的函数,用户可以从键盘输入数据或字符串,可以暂停程序的运行等。下面分别进行介绍。1.函数input( ) 2.函数keyboard 3.函数pause 4.函数echo 5.函数return


(1)input()函数

r1 = input('Do you like apple?Y/N:','s');
while isempty(r1)
    r1 = input('Do you like apple?Y/N:','s');
end
disp(r1);
disp('input matrix,for example:eye(5)');
r2=input('','s');
f=eval(r2);

类似于C语言的print函数。

(2)keyboard ()函数

主要用于调试,用于查看当前数据,修改输入数据,输出结果数据。

a=[1,2,3;2,3,4];
b=[4,5,6;7,8,9];
keyboard
c=a+b;

其分别对应输入a、a(1,2)=100、return。

(3)pause()函数

用于暂停程序进程。

(4)echo()函数

用于控制是否显示程序运行语句,echo on为显示,echo off为不显示。

(5)return()函数

同C语言。

6.程序调试

在编写MATLAB程序时,难免会出现错误,这时就需要对程序进行调试。MATLAB中,M文件的调试主要有两种方法:直接调试法和工具调试法。编写的程序在能够完成特定的功能的情况下,还要对程序的性能进行分析,例如运算速度和效率等。在MATLAB中,采用Profile工具对程序的性能进行分析。在本章的最后,介绍了一些常用的编程技巧。程序调试是一个很基础也很重要的问题。没有人能一遍写出完全正确没有错误的程序。错误的程序大致分为以下三类:拼写错误:比如应该是sum( ),写成了smu( )。拼写错误非常容易发现,在程序运行时,系统会提示错误。语法错误:比如6/0,输出结果变为无穷大Inf。程序在运行时不一定会报错,但是输出结果不正常。逻辑错误:这样的错误非常隐蔽,通常是对程序的算法考虑不周全。程序可以正常执行,但是输出结果不符合预期值。

在程序运行过程中,如果遇到警告或错误,需要进行处在MATLAB中,可以采用try...catch语句来捕获错误。可以利用函数error()发出错误信息,利用函数warning()发出警告信息。

由于MATLAB语言是一种解释性语言,有时MATLAB程序的执行速度不是很理想。下面给出了一些编程的技巧,例如:尽量采用向量运算来代替循环,对于大型的矩阵预先给出维数等。

在MATLAB中,可以对程序进行计时,从而获得程序的执行时间。3种计时方法,分别是1)采用函数tic和toc进行计时;2)利用函数etime进行计时;3)利用cputime进行计时。如果程序不小心进入死循环,或者计算时间太长,用户可以在命令窗口中使用Ctrl+c来中断当前程序的执行。

(1)在利用MATLAB编程时,应尽量避免使用循环。(2)如果必须使用多重循环,但是两个循环执行的次数不同,则建议在外循环执行循坏次数少于内循环。这样也可以显著提高速度。(3)对于大型矩阵,如果预先定维,会减少程序的执行时间,提高程序的运算效率。在程序中,给大型矩阵动态的确定维数,花费的时间非常多。建议在定义大矩阵时,首先用MATLAB的内在函数,如函数zeros()或ones()对之先进行定维,然后再进行赋值处理,这样会显著减少所需的时间的。(4)在编写程序时,优先考虑MATLAB的内在函数。(5)如果用户想继续提高程序的效率,可以考虑采用更加有效的算法。(6)此外,还可以尝试采用Mex技术.

(1)对于M文件的命名,尽量不要用简单的英文单词,最好是由大小写英文字母、数字和下划线等组成。(2)在调试程序时,经常要屏蔽掉多行程序,可以在选定程序后,按快捷键Ctrl+r将这些程序行注释掉。(3)快捷键Ctrl+c可以中断正在执行的操作。(4)使用Tab键补全函数名或文件名。(5)在命令行窗口中,使用上下光标键,将历史记录中的命令复制到输入位置。(6)使用文本编辑器的cell模式,能使程序更加清晰。

(1)直接调试法

利用MATLAB编写脚本文件或函数,非常灵活,得到的程序也非常的简洁,比较容易阅读和理解。对于不是很复杂的程序,可以使用直接调试法进行程序的调试。(1)如果程序出错或给出警告信息,仔细分析出错或警告信息,会得到出错的原因。(2)在程序中,利用函数disp()将函数M文件的中间结果显示出来。(3)在单独调试一个函数M文件时,可以将该函数M文件修改为脚本M文件进行调试。(4)将程序的某些行通过注释进行屏蔽,在程序行的前面输入注释符%。(5)在程序中需要调试的地方添加keyboard函数。

(2)工具调试法

在MATLAB中,有强大的程序调试工具,可以在命令行窗口采用调试命令进行调试,也可以采用Debugger工具在图形窗口中进行程序的调试。下面分别进行介绍。

1.命令行为主的调试

在命令行窗口中输入: help debug可以查看调试命令。dbstop设置断点,dbclear清除断点,dbcont从断点处恢复执行,dbstack调用堆栈,dbstatus列出所有断点。dbstep执行一行或多行程序。dbtype查看程序的代码

2.图形化程序调试

在MATLAB中,可以利用code Analyzer工具来分析程序中的错误和性能等。在以前的MATLAB版本中叫M-lint,基本功能类似,只是名称不一样。用户首先采用M文件编辑器打开要分析的M文件,然后选择M文件编辑器中Tool菜单下的Code Analyzer选项,如图所示。其中菜单MATLAB Compiler Message Default Setting将code Analyzer工具设置为默认值单击菜单Show Code Analyzer Report,会在浏览器窗口中显示分析报告。

在MATLAB中,采用Profiler工具对MATLAB代码进行分析。用户可以在MATLAB的主界面中单击菜单DesktopProfiler,显示Profiler工具。在Run this code后面输入程序文件名或程序语句后,通过单击按钮Start Profiling进行程序的性能分析。

profile on;

f=@(x) 2*x^2+3*x+4;
a1=f(2);

profile viewer

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值