chap4 关于matlab的程序设计

更新时间:2023-05-24 00:23:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

程序设计

第四章 程序设计

4.1 M文件函数

Matlab函数有M文件函数与脚本文件之分。所谓的脚本文件是没有输入输出变量,只是一系列系统命令的集合,类似于DOS的宏命令;M文件函数获取传递给它的变量,进行处理,返回计算结果。

讲例:>>type(edit) flipud

M文件函数的构成

首行称为函数说明符,以function开头,第一行定义的函数名必须与要保存的文

件名一致,实际上MATLAB忽略首行的函数名,直接根据存储在磁盘上的文件名执行函数。

接下来是文件的注释行,即help的帮助文本。(用函数flipud示例)其中第一行

帮助文体称为H1行,是由lookfor命令所搜索的行。

M文件名最多31个字符,命名规则与变量相同。

调用函数error可中止函数执行,显示出错信息,并把控制权返回命令窗口 调用函数warning可探囊取物报告警告信息,然后继续运行

warning(‘…’) %在命令窗口中显示警告字符串

warning on,warning off在全局范围内打开或关闭

M文件函数可以调用脚本文件或其它作为子函数的函数,多个子函数的顺序可任

意排列

输入输出变量

M文件可以没有输入输出变量

可以用比M文件函数中的说明行所确定的数目少的实际输入输出变量,可分别调

用函数nargin,nargout确定函数调用中所用的输入输出变量个数。由于nargin,nargout不是变量,所以不能运用赋值函数进行重新赋值。(help mmdigit) 调用一个函数时,输入变量不会拷贝到函数的工作空间,但如果改变输入变量内

的任何值,则数组就拷贝到函数的工作空间。因此,为节约存储和增加速度,最好从大数组内抽取元素,对它们作修正,而不使整个数组拷贝到工作空间。 在函数说明行中指定最后一个输入参量为varargin,则函数可接受一个变量和无限

个输入变量。Varargin是一个预定义的单元数组,它的第i个变量是从varargin出现开始的第i个参量。例:

function a=myfunction(x,varargin)

程序设计

用a=myfunction(x,y,z,t)调用,则varargin(1)=y,varargin(2)=z,,varargin(3)=t 这样每次可以用不同数目的参量进行调用。

在函数说明行中指定最后一个输出变量为varargout,则函数可接受一个变量和无

限个输出变量。Varargin是一个预定义的单元数组,它的第i个单元是从varargout出现开始的第i个参量。如

function [a,varargout]=function(x,y)

调用形式为 [a,b,c]=function(x,y),则varargout(1)=b,varargout(2)=c

函数工作空间

函数都有自己的临时工作空间,该空间随函数的调用而建立,随函数操作的结束而删除,递归调用的函数均有自己的独立工作空间,MATLAB提供了几种用于基本工作空间与函数工作空间间的通信关系

1. 全局变量说明为global函数可以和其它函数、MATLAB工作空间共享变量,并自

身递归调用。但必须在每个所期望的工作空间中用global对该变量进行说明。例:tic,toc中变量TICTOC的用法

2. 函数evalin允许延伸到另一工作空间,计算一个表达式,然后返回结果到当前空

间,与eval类似。A=eval(‘caller’,’expression’)在调用空间计算expression,然后返回给变量A;A=evalin(‘base’,’expression’)在MATLAB工作空间中计算expression,把结果返回到当前工作空间变量A;evalin(‘workspace’,’try’,’catch’)提供了捕捉错误功能,如果在空间中第一个表达式’try’出现错误,则‘catch’就是当前工作空间中要计算的表达式

3. 函数assignin可以把当前工作空间内的一些表达式的结果赋值给另一个工作空间

内的变量。Assignin(‘workspace’,’vname’,x)把当前工作空间内的变量X的内容赋值给工作空间名为vname的变量

4. 正在被执行的M文件名可在一个函数内的变量mfilename中得到,这种变量在脚

本文件中也存在。

4.2

4.2.1 顺序结构

若程序是命令文件,则程序运行后,中间变量都予以保留;若程序是函数文件,则程序运行完成后,中间变量将全部删除

4.2.2 循环结构

1. for-end 循环

程序流的控制

程序设计

for x=arrays

(commands)

end

for循环不会因为在循环体内对循环变量重新进行赋值而终止

for后面的表达式中的数组可以是任何合法的MATLAB数组

for循环结构可以按需要进行嵌套

应用技巧

(1)为得到高效的代码,就尽量提高代码的向量化程度,避免使用循环结构 如 for i=1:10 i=1:10;

A(i)=1/(i+1) A(i)=1./(i+1)

end

(2)为得到尽快的运算速度,应尽量对数组进行预定义。

如 对于上面的(1)中编程方法,可改为

i=1:10;

A=zeros(1,10);

A(i)=1./(i+1)

2. while-end 循环

while expression

statements

end

表达式的值一般为标量,但MATLAB允许是一个数组,只有当该数组的所有元素

均为真时,才会执行循环体;若表达式为空数组,则不执行循环体

4.2.3 分支结构

1.if-else-end

if expression

statements1;

else

statements2;

end

如果只有一种选择,else部分可以不写

如果多于两种选择,则中间可填加elseif 结构

程序设计

2. witch-case-end结构

switch switch-expr

case case-expr

statement;

case {case-expr1,case-expr2,…}

statement;

otherwise

statement;

end

4.3

return 指令

在被调函数中插入return语句,强制MATLAB结束执行函数并返回指令窗口 pause指令

使程序运行指令暂停,等待用户按任意键继续。主要用于程序调试用查看中间结果 另一种用法 pause(n) 在继续执行前,暂停n秒

break指令

使最内层for,while,if语句终止循环

input指令

提示用户从键盘输入数值、字符串或表达式,并接受输入

R=input(‘message’) 将用户从键盘输入的内容Message赋值给变量R

R=input(‘message’,’s’) 将用户从键盘输入的内容Message作为字符串的形式赋值

给变量R

输入的字符串需要转行时,可用符号‘\n’

keyboard指令waitforkeyboard

与input一样,在遇到keyboard指令时,MATLAB将会暂停程序的运行,并调用键盘 指令进行处理,用户可以从键盘输入各种命令,只要输入return指令,按enter后, 程序将继续执行

error指令

显示错误信息并将控制权返回键盘。其它一些相关的命令

errortrap 错误发生后程序是否继续执行的双位开关

lasterr 显示MATLAB自动判断的最新出错原因,并中止程序执行

warning(‘some message’) 显示警告信息,并继续运行

lastwarn 显示MATLAB自动给出的最新出错信息,然后继续运行

echo 指令 程序流控制

程序设计

用来控制M文件在执行过程中显示与否,这对程序的调试和演示极为有用。 对命令文件

echo on 显示其后所有执行文件的指令

echo off 关闭显示其后所有执行文件的指令

echo 在两种状态之间进行转换

对函数文件或命令文件

echo filename on 使filename指定文件中的指令在执行时显示出来 echo filename off

echo on all 使当前内存中函数文件的指令在执行中显示出来

echo off all

4.4

sprintf('%0.5g',(1+sqrt(5))/2) 1.618

sprintf('%0.5g',1/eps) 4.5036e+15

sprintf('%15.5f',1/eps) 4503599627370496.00000

sprintf('%d',round(pi)) 3

sprintf('%s','hello') hello

sprintf('The array is %dx%d.',2,3) The array is 2x3.

sprintf('\n') is the line termination character on all platforms 数据显示格式控制

本文来源:https://www.bwwdw.com/article/cof4.html

Top