【良心出品】MATLAB实验五《 M文件和函数句柄》
- 格式:doc
- 大小:52.00 KB
- 文档页数:4
M文件与M函数Matlab输入命令的常用方式有两种:一种是直接在Matlab的命令窗门中逐条输入Matlab 命令;二是m文件工作方式。
当命令行很简单时,使用逐条输入方式还是比较方便的。
但当命令行很多时(比如说几十行乃至全成百上千行命令),显然再使用这种方式输入MATLAB 命令,就会显得杂乱无章,不易于把握程序的具体走向,并且给程序的修改和维护带来了很大的麻烦。
这时,建议采用Matlab命令的第二种输入形式m文件工作方式。
m文件工作方式,指的是将要执行的命令全部写在一个文本文件中,这样既能使程序显得简洁明了,又便于对程序的修改与维护。
m文件直接采用Matlab命令编写,就像在Matlab的命令窗口直接输入命令一样,因此调试起来也十分方便,并且增强了程序的交互性。
m文件与其他文本文件一样,可以在任何文本编辑器中进打编辑、存储、修改和读取。
利用m文件还可以根据白己的需要编写一些函数,这些函数也可以橡Matlab提供的函数一样进行调用。
从某种意义上说,这也是对MA TLAB的二次开发。
m文件有两种形式:一种是命令方式或称脚本方式;另一种就是函数文件形式。
两种形式的文件扩展名均是.m。
1、M文件当遇到输入命令较多以及要重复输入命令的情况时,利用命令文件就显得很方便了。
将所有要执行的命令按顺序放到一个扩展名为.m的文本文件中,每次运行时只需在MATLAB 的命令窗口输入m文件的文件名就可以了。
需要注意的是,m文件最好直接放在Matlab的默认搜索路径下(一般是Matlab安装目录的子目录work中),这样就不用设置m文件的路径了,否则应当用路径操作指令path重新设置路径。
另外,m文件名不应该与Matlab的内置函数名以及工具箱中的函数重名,以免发生执行错误命令的现象。
Matlab对命令文件的执行等价于从命令窗口中顺序执行文件中的所有指令。
命令文件可以访问Matlab工作空间里的任何变量及数据。
命令文件运行过程中产生的所有变量都等价于从Matlab工作空间中创建这些变量。
【良心出品】MATLAB实验五《M文件和函数句柄》实验五 M 文件和函数句柄一、实验目的1、掌握M 文件的编写方法。
2、熟练掌握MATLAB 的五种程序控制流结构。
3、掌握M 函数文件的一般结构。
4、了解函数句柄的创建、观察及基本使用方法。
二、实验主要仪器与设备装配有MA TLAB7.6软件的计算机三、预习要求做实验前必须认真复习第六章M 文件和函数句柄。
四、实验内容及实验步骤1、已知函数??≤<≤--<=+-x e x xx xy x 111113,编写能对任意一组输入x 值求相应y 值的程序,并验证运行结果。
(1)编写M 函数文件function y=exm060101(x)% y=exm060101(x) Function calculate of example n=length(x); for k=1:n if x(k)<-1 y(k)=x(k); elseif x(k)>=1 y(k)=exp(1-x(k)); elsey(k)=x(k)^3; endend(2)把文件exm060101.m 放置在搜索路径上(3)运行以下指令x=[-2,-1,-1.2,-0.4,0.8,1,6] y=exm060101(x) 运行结果: x =-2.0000 -1.2000 -0.4000 0.8000 1.0000 6.0000y =-2.0000 -1.2000 -0.0640 0.5120 1.0000 0.00672、已知学生的名字和百分制分数。
要求根据学生的百分制分数,分别采用“满分”、“优秀”、“良好”、“及格”、“不及格”等表示学生的学习成绩。
试用switch结构编程实现。
clear;%定义分数段:满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(<60)。
for k=1:10a(k)={89+k};b(k)={79+k};c(k)={69+k};d(k)={59+k};end;c=[d,c]; %输入学生的名字和分数A= cell(3,5) ;A(1,:)={'Jack','Marry','Peter','Rose','T om'};A(2,:)={72,83,56,94,100};for k=1:5switch A{2,k}case 100r='满分';case ar='优秀';case br='良好';case cr='及格';otherwiser='不及格';endA(3,k)={r};endA运行结果:A ='Jack' 'Marry' 'Peter' 'Rose' 'Tom'[ 72] [ 83] [ 56] [ 94] [ 100]'及格' '良好' '不及格' '优秀' '满分'3、试用for 循环结构创建Hilbert 矩阵。
MATLAB函数句柄和M文件第 6 章M 文件和函数句柄6.1 Matlab控制流6.2 脚本文件和函数文件6.3 Matlab的函数类别6.4 函数句柄6.1 MATLAB 控制流6.1.1 if-else-end 条件控制6.1.2 swith-case 控制语句6.1.3 for 循环和while 循环6.1.4 控制程序流和的其他常用指令6.1.1 if-else-end 条件控制0.1x 2例 6.1-1 】已知y e sin x 0.5(x 0.1) sin x ,在50 x 5 区间,求函数的最小值。
回顾与复习 :[x,fval,exitflag,output]=fminbnd(fun,x1,x2,options) 求一元函数在区间 (x1, x2)中极小值在第四章中采用的方法( 1)采用优化算法求极小值 x1=-50;x2=5; % yx=@(x)(sin(x)^2*exp(-0.1*x)-0.5*sin(x)*(x+0.1)); [xc0,fc0,exitflag,output]=fminbnd(yx,x1,x2)<9>%( 2)据图形观察,重设 fminbnd 的搜索区间 xx=[-23,-20,-18];%fc=fc0;xc=xc0; % for k=1:2[xw,fw]=fminbnd(yx,xx(k),xx(k+1)); <16> if fw<fc xc=xw; fc=fw; end endfprintf(' 函数最小值 %6.5f 发生在 x=%6.5f 处 ',fc,xc) 函数最小值 -3.34765 发生在 x=-19.60721 处1)function [xmin,fmin,n]=exm060101(fx,a,b,Nt) % exm060101.m2sin(x) /exp(x/10) - (sin(x) (x + 1/10))/2-50-45 -40 -35 -30 -25-20 -15 -10 -5x70 6050 40 30 2010[~,f0]=fminbnd(fx,a,b); % n=1; jj=1;%% while 1n=2*n; %d=(b-a)/n;% x=a:d:b;%ii=0;xc=zeros(1,n);fc=xc; %for k=1:n %[w,f,eflag]=fminbnd(fx,x(k),x(k+1)); % if eflag>0 % ii=ii+1; xc(ii)=w; fc(ii)=f; end end[fmin,kk]=min(fc); % xmin=xc(kk); % if abs(f0-fmin)<1e-6 % jj=jj+1; % if jj>Nt %break % endelseif f0-fmin>1e-6 % f0=fmin; % jj=1; %end end 2) clear fx=@(x)(sin(x)^2*exp(-0.1*x)-0.5*sin(x)*(x+0.1)); a=-50;b=5; [xmin,fmin,n]=exm060101(fx,a,b,3);fprintf(' 在x=%6.5f 处,函数到达最小 值 %6.5f\n',xmin,fmin)fprintf(' 最终子区间分割数为 %d\n',n)在 x=-19.60721 处,函数到达最小值 -3.34765 最终子区间分割数为 1286.1.2 switch-case 控制结构% fx % a 、 b % Nt % xmin【例 6.1-2】已知学生姓名和百分制分数,用“满分” ,优秀、良好、及格和不及格表示学生成绩clear;%for k=1:10a(k)={89+k};b(k)={79+k};c(k)={69+k};d(k)={59+k};end;c=[d,c];%A=cell(3,5); %A(1,:)={'Jack','Marry','Peter','Rose','Tom'表 6.1-3 循环结构的使用方式【例 6.1-3 】请分别写出用 for 和 while 循环语句计算 1000000K 0.2i 1 0.2 0.22 0.21000000的程序。
M文件和函数句柄一、概念1、编程的概念2、向量化编程与数据流控制二、知识点1、编程基础(1)程序的基本构件:变量、运算符、标点符号、关键词(字)、特殊值(预定义变量)、MATLAB函数(内建函数、M文件函数、重载函数)(2)数据流控制(3)M文件的基本类型2、编写复杂程序必须的组件和技术(1)函数:主函数、子函数、嵌套函数、匿名函数(2)对象:内联对象(3)句柄:直接句柄、匿名句柄(4)泛函指令:eval、feval(5)变量的使用域(6)跨内存调用和赋值3、三、命令、函数列表四、练习题1、【7.2.1】for循环和while循环控制2、3、【例7.2-3】对于预先指定的控制精度ε,求∑∑===N n n k k S 111,其中N 要满足约束⎪⎪⎭⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧≤=∑=εN k k N 11min arg 。
4、5if-elseif-else 条件分支控制【例7.2-5】借助“if-else 条件分支控制”编写M 码,以实现式(7.2-1)分域函数的可视化(参见图7.2-5)。
⎪⎪⎩⎪⎪⎨⎧>+≤+<--≤+=-----+-- 15457.0 117575.015457.0),(5.175.375.065.175.375.0222222y x e y x e y x e y x z x x y x y x x y(7.2-1)6try-catch容错控制【例7.2-6】对MATLAB初学者来说,易混淆plot和ezplot的不同适用场合:前者只适于“离散数值数据”表达的曲线绘制;后者则适于“函数解析式”表达的曲线绘制。
本例将利用try-catch结构的意外警示(Throw an Exception)及意外处理(Handle an Exception)的能力,编写一个具备plot全部功能,7M文件【例7.3-1】编写一个M函数文件。
它具有以下功能:(A)根据指定的半径,画出蓝色圆周线;(B)可以通过输入字符串,改变圆周线的颜色、线型;(C)假若需要输出圆面积,则绘出圆。
实验五 M 文件和函数句柄
一、实验目的
1、掌握M 文件的编写方法。
2、熟练掌握MATLAB 的五种程序控制流结构。
3、掌握M 函数文件的一般结构。
4、了解函数句柄的创建、观察及基本使用方法。
二、实验主要仪器与设备
装配有MA TLAB7.6软件的计算机
三、预习要求
做实验前必须认真复习第六章M 文件和函数句柄。
四、实验内容及实验步骤
1、已知函数⎪⎩
⎪⎨⎧≤<≤--<=+-x e x x
x x
y x 11111
3
,编写能对任意一组输入x 值求相应y 值的程序,
并验证运行结果。
(1)编写M 函数文件 function y=exm060101(x)
% y=exm060101(x) Function calculate of example n=length(x); for k=1:n if x(k)<-1 y(k)=x(k); elseif x(k)>=1 y(k)=exp(1-x(k)); else
y(k)=x(k)^3; end
end
(2)把文件exm060101.m 放置在搜索路径上 (3)运行以下指令
x=[-2,-1,-1.2,-0.4,0.8,1,6] y=exm060101(x) 运行结果: x =
-2.0000 -1.2000 -0.4000 0.8000 1.0000 6.0000
y =
-2.0000 -1.2000 -0.0640 0.5120 1.0000 0.0067
2、已知学生的名字和百分制分数。
要求根据学生的百分制分数,分别采用“满分”、“优秀”、“良好”、“及格”、“不及格”等表示学生的学习成绩。
试用switch结构编程实现。
clear;
%定义分数段:满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(<60)。
for k=1:10
a(k)={89+k};b(k)={79+k};c(k)={69+k};d(k)={59+k};
end;
c=[d,c]; %输入学生的名字和分数
A= cell(3,5) ;
A(1,:)={'Jack','Marry','Peter','Rose','Tom'};
A(2,:)={72,83,56,94,100};
for k=1:5
switch A{2,k}
case 100
r='满分';
case a
r='优秀';
case b
r='良好';
case c
r='及格';
otherwise
r='不及格';
end
A(3,k)={r};
end
A
运行结果:
A =
'Jack' 'Marry' 'Peter' 'Rose' 'Tom'
[ 72] [ 83] [ 56] [ 94] [ 100]
'及格' '良好' '不及格' '优秀' '满分'
3、试用for 循环结构创建Hilbert 矩阵。
K=5;
A = zeros(k,k); for m = 1:K
for n = 1:K
A(m,n)=1/(m+n-1) ;
end end format rat A
format short g 运行结果: A =
1 1/
2 1/
3 1/
4 1/
5 1/2 1/3 1/4 1/5 1/
6 1/3 1/4 1/5 1/6 1/
7 1/4 1/5 1/6 1/7 1/
8 1/5 1/6 1/7 1/8 1/9
4、编写计算∑∑===N
n n k k S 111,其中⎪⎪⎭
⎪
⎪⎬⎫
≤⎪⎪⎩⎪⎪⎨⎧=∑=ε
N k k N 1
1
min arg ,ε是预先 给定的控制精度。
使用while 循环结构编程实现。
(1)编写M 函数文件exm060104(x)
function [S,N]=exm060104(epsilon) k=0; s=0; d=inf; S=0;
while d>epsilon
k=k+1;
s=s+k; d=1/s;
S=S+d;
end N=k;
(2)把文件exm060104.m保存在处于MATLAB搜索路径的文件夹中。
(3)运行以下指令(控制精度假设取0.0001)
[S,N]=exm060104(0.0001)
运行结果:
S =
1.9859
N =
141
五、实验报告与思考题
说明M函数文件的一般结构。
(1)函数申明行(function declaration line):位于函数文件的首行;以MATLAB
关键字function开头;函数名以及函数的输入/输出量名都在这一行被定义.
(2)H1行(the first help text line):紧随函数申明行之后以%开头的第一注释行;
按MA TLAB自身文件的规则,H1行包含大写体的函数文件名和运用关键词
简要描述的函数功能。
该H1行提供lookfor关键词查询和help在线帮助使用。
(3) 在线帮助文本(help text)区:H1行及其之后的连续的一%开头的所有注释
行构成整个在线帮助文本。
它通常包括:函数输入/输出宗量的含义;调用
格式说明。
(4) 编写和修改记录:起几何位置与在线帮助文本区相隔一个空行(不用%符开
头)。
该区域文本内容也都以%开头;标志编写及修改改M文件的作者和日
期、版本记录。
它用作软件档案管理。
(5) 函数体(function body):为清晰起见,与前面的注释一空行相隔。
这部分
内容由实现该M函数文件功能的MA TLAB指令组成。
它接受输入量,进行
程序流控制,创建输出量。
其中为阅读、理解方便,也配置适当的空行和注释。
(6)若仅从运算角度看,唯“函数申明行”和“函数体”两部分是构成M函数文件
所必不可少的。