第八次课 讲稿Word文档格式.docx
《第八次课 讲稿Word文档格式.docx》由会员分享,可在线阅读,更多相关《第八次课 讲稿Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
杂的问题,应编写成能存储的程序文件。
m文件模式
将matlab语句构成的程序存储成以m为扩展名的文
件,然后再执行该程序文件,这种工作模式称为程
序文件模式。
程序文件不能在指令窗口下建立,因为指令窗口只
允许一次执行一行上的一个或几个语句。
二、m文件的创建
m文件的类型是普通的文本文件,我们可以使用系统认可的文本文件编辑器来建立m文件。
如dos下的edit,windows的记事本和word等。
具体的创建方法:
在matlab命令窗
口点击file菜单
newm-file
保存:
2.点击file—SaveWorkspaceAs
将工作空间中的内容存入文件。
3.!
edit——用dos下edit编辑器编制m文件。
4.edit——用matlab自带的编辑器编制m文件。
5.word——用word编辑m文件。
注意:
所创建的m文件必须纳入matlab搜索路径后,才能在matlab命令窗口运行。
三、M文件的特点与形式
1.M文件的特点:
MATLAB是一种解释性语言,就MATLAB本身而言,它并不能做任何事情,只对用户发出的指令起解释执行作用。
用户可以把所要实现的指令罗列编制成文件,再统一送入MATLAB系统中解释运行,这就是M文件。
此文件必须以m为扩展名,MATLAB系统才能识别。
也就是说,M文件其实是一个像命令集一样的ASCII(纯文本)码文件。
因此M文件语法简单,调试容易,人机交互性强。
用户可以使用任何字处理软件对其进行编写和修改。
2.M文件的两种形式命令式(Script)
函数式(Function)
命令式文件就是命令行的简单叠加,MATLAB会自动按顺序执行文件中的命令。
函数式文件主要用以解决参数传递和函数调用的问题,它的第一句以function语句为引导。
(一)、命令式文件
用户在编制命令式文件时,只需把所要执行的命令按行编辑到指定的文件中,且变量不需要预先定义,也不存在文件名对应问题,但要注意以下几点:
1)标点符号的运用要恰到好处;
2)建立好的书写风格,保持程序的可读性;
3)不要忘记m为文件的扩展名。
例5.1建立一命令集以实现绘制LOGO图。
在Medit窗口中编写以下内容。
%logotu.m
loadlogo%加载logo
surf(L,R),%三维图形
colormap(M)%颜色映像函数,M—三列矩阵,三者综合构成对应颜色
n=size(L,1)
axisoff
axis([1n1n-.2.35])
view(-37.5,60)%视角函数
title(‘LifeistooshorttospendwritingDOloops…’)
>
>
logotu
说明:
1)以符号%引导的是注释行,不可执行,可供help命令查询;
2)不需要用end语句作为M文件的结束标志;
3)在运行此文件之前,需要把它所在目录加到MATLAB的
搜索路径上去,或将文件所在目录设为当前目录。
(二)、函数式文件
1.函数:
为了实现计算中的参数传递,需要用到函数式文件。
函数
式的标志是第一行为function语句。
函数式文件可以有返
回值,也可以只执行操作而无返回值。
函数式文件执行
后,只保留最后结果,不保留任何中间结果,所定义的变
量也仅在函数内部起作用,并随调用的结束而被清除。
例:
下面是一个MATLAB提供的上下翻转矩阵的函数,文件名是flipud.m
functiony=flipud(x)
%FLIPUDFlipmatrixinup/downdirection.
%FLIPUD(X)returnsXwithcolumnspreservedandrowsflippedin
%theup/downdirection.Forexample,
%x=14becomes36
%2525
%3614
%SeealsoFLIPLR,ROT90,FLIPDIM.
ifndims(x)~=2,error(‘Xmustbea2-Dmatrix,’);
end
%判断输入矩阵维数是否正确
[m,n]=size(x);
%求输入矩阵的大小
y=x(m:
-1:
1,:
);
%将矩阵上下翻转
2.函数的结构
函数M文件由以下几个部分组成:
1)函数定义行;
2)H1行
3)函数帮助文本
4)函数体
5)注释
输出参数
函数名
函数flipud的定义行是:
functiony=flipud(x)
输入参数
•H1行:
是指帮助文本的第一行,它紧跟在定义行之后。
它以“%”符号开头,用于总结说明函数名和函数的功能。
函数flipud的H1行为:
%FLIPUDFlipmatrixinup/downdirection
lookfor命令查询时,在窗口中显示的内容。
•帮助文本:
位于在H1行之后函数体之前的说明文本,以“%”符号开头,一般用来比较详细地介绍函数的功能和用法。
help命令查询时,可以显示的内容。
•函数体:
是函数的主体部分,函数体包括进行运算和赋值操作的所有MATLAB程序代码。
•注释:
除了函数开始的帮助文本外,还可以在函数体中添加对语句的注释。
注释必须以“%”开头。
一、循环语句
MATLAB提供两种循环方式for
while
1.for循环
循环的判断条件是对循环次数的判断,也就是说,在一般情况下,循环语句的循环次数是预先设定好的。
for循环语句的一般格式:
forv=expression(表达式)
statements(执行语句)
end
该语句首先将一个表达式赋予一个变量,表达式的通常格式为m:
n或m:
i:
n,然后按照表达式的列来执行for和end之间的语句。
form=2:
5
S(m)=m*2+1
S=
05
057
0579
057911
•for语句一定要有end作为结束标志,否则下面的输入都被认为是for循环之内的内容;
•循环语句中的分号“;
”可防止中间结果的输出;
•循环语句书写成锯齿形将增加可读性;
•如果m或n有小于1的值,结构上仍然是合法的,但内部并不运行。
设有向量t,t=[-10135]’,由此生成一个5*5阶的Vandermonde(范德蒙)矩阵。
程序
(1)如下:
(双循环语句)
n=max(size(t));
forj=1:
n
forI=1:
a(I,j)=t(I)^(n-j)
程序
(2)如下:
(向量运算的单循环语句)
a(:
n)=ones(n,1);
forj=n-1:
1
j)=t’.*a(:
j+1);
2.while循环
与for不同的是,while循环不能指定循环的次数,语句的判断控制是一个逻辑判断语句,当表达式里的所有元素为真时,就执行while和end语句之间的程序代码。
一般格式:
whileexpression
statements
end
例:
用计算形式计算矩阵的幂(expm_a)
用expm(A)=I+A+A2/2!
+A3/3!
+…求A的指数函数
程序如下:
functionexpm_a(a)
%由expm(A)=I+A^2/2!
+A^3/3!
+...计算A的指数函数
e=zeros(size(a));
f=eye(size(a));
k=1;
whilenorm(e+f-e,1)>
0%求矩阵的1范数,
e=e+f;
f=a*f/k;
k=k+1;
e
二、选择语句
MATLAB提供了if_else_end语句来进行判断选择,if语句大致可分为三个步骤:
1)判断语句紧跟在关键字if后面,它首先被计算;
2)判断表达式计算结果,若结果为0,判断值为假;
若结果为
1,判断值为真;
3)若判断值为真,则执行其后的执行语句,否则跳过,不予执行。
选择语句的一般形式:
ifexpression()
statements;
elseexpression()
B样条函数的判断函数
functionf=pdbsline(x)
ifx<
f=0;
elseifx<
f=x;
2
f=2-x;
else
说明:
1)else部分可以是复合语句或其它控制语句;
2)注意if语句嵌套时,if和else必须对应,否则容易出错;
3)else子句中嵌套if时,就形成了elseif结构,可以实现多路选择结构。
三、分支语句switch-case-otherwise
switch-case-otherwise语句实现在多种情况(case)下的开关控制,以执行分支结构。
通用格式如下:
switchswitch_expr
casecase_expr,
statement,…,statement
case{case_expr1,case_expr2,case_expr,…}
…..
otherwise,
其中switch_expr给出了开关条件。
当case_expr的内容与之匹配时则执行其后的语句。
如果没有case的内容与switch_expr的内容匹配,则执行otherwise后面的语句。
注意:
在执行过程中,只执行一个case后面的命令并跳出开关,程序在end后面继续执行。
四、人机交互语句
1.echo命令
一般情况下,M文件执行时,文件中的命令不会显示在命令窗口中。
echo命令可使文件命令在执行时可见。
其格式如下:
echoon打开命令式文件的回应命令;
echooff关闭回应命令;
echofileon使指定的file文件的命令在执行中被显示出来;
echofileoff关闭指定文件的命令在执行中的回应;
echofile文件在执行中的回应显示开头;
echoonall/echooffall显示/关闭其后所有执行文件的执行过程。
2.用户输入提示命令inputyesinput
input命令用来提示用户从键盘输入数据、字符串或表达式,并接收输入值。
下面是几种常用的格式:
R=input(‘Howmanyapples’)
R=input(‘Whatisyourname?
’s’)
yesinput是一个智能输入命令,它带有默认输入和默认输入的范围检查。
此命令通用格式为:
answer=yesinput(question,default,possib)
检验范围
默认值
问题
yesinput命令演示之一
order=yesinput(‘Orderofthefilter’,10,[012]);
运行此命令后,结果如下:
Orderofthefilter(10):
-9
14
3
order=3
yesinput演示命令之二
color=yseinput(‘Colorusedontheplot’,’red’,’red|blue|green’);
Colorusedontheplot(red):
white
red
color=red
3.请求键盘输入命令keyboard
keyboard和input作用相似,当程序遇到此命令时,MATLAB就将暂时停止运行程序并处于等待键盘输入状态。
处理完毕后,键入R,程序将继续运行。
4.等待用户反应命令pause
此命令用于使程序暂时中止运行,等待用户按任意键后继续执行。
调用格式如下:
pause暂停程序等待回应;
pause(n)程序运行中等待n秒后继续运行;
pauseon显示其后的pause命令,并且执行pause命令;
pauseoff显示其后的pause命令,但不执行pause命令。
5.中断命令break
break语句常常用在循环语句或条件语句中。
通过使用break语句,可不必等待循环的自然结束,而根据循环另设的条件来判断是否跳出循环。
求鸡兔同笼问题:
鸡兔同笼,头共36,脚共100。
求鸡、兔各多少?
在MATLAB中输入以下语句:
i=1;
while1
ifrem(100-i*2,4)==0&
(i+(100-i*2)/4)==36
break;
i=i+1
a1=i
a2=(100-2*i)/4
在MATLAB语言的函数中,变量主要有输入变量、输出变量及函数内所使用的变量。
输入变量相当于函数的入口变量,也是一个函数操作的主要对象。
某种程度上讲,函数的作用就是对输入变量进行操作以实现一定的功能。
MATLAB语言提供了一些对输入变量进行控制的函数,如:
nargin、varargin、inputname.
•nargin控制输入变量的个数;
返回输入变量的个数。
编制一个函数,函数名为test69,它实现如下功能,如果调用过程中时只提供一个输入变量,则求该输入变量的模,如果有两个输入变量则求两个输入变量的和,程序如下:
functionc=test69(a,b)
if(nargin==1)
c=det(a);
elseif(nargin==2)
c=a+b;
nargin(‘function’)返回函数的输入变量的个数。
•varargin实现不定数目输入变量的函数的程序设计。
编制一个函数,函数名为test610,它可以实现如下功能:
通过使用函数varargin,用户可以输入任意多个学生的数学、英语及语言的成绩,然后求各科目的平均值。
程序如下:
function[mathavg,englishavg,chineseavg]=test610(varargin)
l=length(varargin)
mathsum=0;
englishsum=0;
chinesesum=0;
fori=1:
l
mathsum=mathsum+varargin{i}
(1)
englishsum=englishsum+varargin{i}
(2)
chinesesum=chinesesum+varargin{i}(3)
mathavg=mathsum/l
englistavg=englishsum/l
chineseavg=chinesesum/l
•inputname(inputvarno)略
与输入变量相应,MATLAB对输出变量也提供了相应的函数,如narout,varargout等。
具体的使用方法与函数nargin,varargin相似。
在MATLAB语言中,函数内部定义的变量均为局部变量,即不加载到工作空间中。
如果需要使用全局变量,则应当使用命令global定义,而且在任何使用该全局变量的函数中都应加以定义,在命令窗口中也不例外。
全局变量的示例。
见test612.M函数
在命令窗口也定义相应的全局变量。
globalfirstlevelsecondlevel
firstlevel=85;
secondlevel=75;
[num,num2,num3]=test612([908960],[798960],[9998100])