MATLAB 07_M文件,函数句柄
- 格式:doc
- 大小:5.64 MB
- 文档页数:18
【良心出品】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中的句柄在matlab中,每一个对象都有一个数字来标识,叫做句柄.当每次创建一个对象时,matlab就为它建立一个唯一的句柄句柄中包含有该对象的相关信息参数,可以在后续程序中进行操作,改变其中的参数,以便达到不同的效果例如:gcf 是返回当前被激活的窗口的句柄。
你可以认为它就指代当前窗口。
figure(gcf)打开这个窗口。
这两天在看句柄式图形方面的东西,以下是我在看书过程中整理的学习笔记,比较详细的介绍了句柄以及与其密切相关的各种图形对象和它们的属性。
希望能对初学Matlab界面设计的朋友们有所帮助。
GUI学习笔记:句柄式图形常用函数:(1)get(h)返回句柄值h所指定的图形对象的所有属性名称与相对应的属性值(2)a = get(h)返回由句柄值h所指定的图形对象的属性结构数组,并且该数组的字段名称就是该对象的属性名称。
(3)a = get(0,'factory')返回所有能由用户设置的属性的默认定义值。
(4) a = get(0,'FactoryObjectTypePropertyName1','FactoryObjectTypePr opertyName2',...)返回指定对象类型指定的属性值,输入参数FactoryObjectTypePropertyName为一个关键词,由字符Factory 与图形对象类型(如Figure)还有属性名称(如Color)组成。
a = get(0,'factoryFigureColor')返回Figure对象的Color属性值。
(5) a = get(h,'DefaultObjectTypePropertyName1','DefaultObjectTypePr opertyName1',...)返回句柄值为h的对象指定属性的默认值。
如“DefaultFigureColor”。
第 6 章 M 文件和函数句柄从总体上说,单独的MATLAB 指令,及由若干指令构成的孤立表达式,只能解算或仿真简单理论数学模型所描述的问题。
复杂些的问题通常需要用一组理论数学算式。
这些问题的解算及仿真就需要借助较复杂的MATLAB 程序进行。
这种MATLAB 程序由较多的MATLAB 指令和多种多样的MATLAB 表达式组成,并循着一定的执行次序运行。
这种程序的扩展名为m 。
这就是脚本M 文件或函数M 文件。
本章系统介绍编写MATLAB 程序时最常用到的四种控制结构、M 函数文件的构造、主函数、子函数以及匿名函数。
最后一节专门叙述函数句柄的创建、观察和调用。
6.1 MATLAB 控制流作为一种计算机编程语言,MATLAB 提供了多种用于程序流控制的描述关键词(Keyword )。
本节只介绍其中最常用的条件控制(if, switch )和循环控制(for, while, continue, break )。
由于MATLAB 的这些指令与其它语言相应指令的用法十分相似,因此本节只结合MATLAB 给定的描述关键词,对这四种指令进行简要的说明。
6.1.1if-else-end 条件控制if-else-end 指令为程序流提供了一种分支控制,它最常见的使用方式见表6.1-1。
【例6.1-1】已知函数xx x e xx y x ≤<≤--<⎪⎩⎪⎨⎧=+-111113,编写能对任意一组输入x 值求相应y 值的程序。
(1)function y=exm060101(x)% y=exm060101(x) Function calculate of example 6.1-1n=length(x); for k=1:n if x(k)<-1y(k)=x(k);elseif x(k)>=1y(k)=exp(1-x(k));elsey(k)=x(k)^3;endend(2)(3)x=[-2,-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.00676.1.2switch-case控制结构【例6.1-2】已知学生的名字和百分制分数。
matlab句柄函数
MATLAB句柄函数是MATLAB编程中常用的一种函数,它在MATLAB 程序中起着重要的作用。
它的核心特性是可以在不同层次的句柄函数之间传递句柄,使用这种句柄函数可以使程序更加简洁、灵活、易于理解。
首先,我们来看一下MATLAB的句柄函数的基本原理:句柄函数是一种函数,它可以把一个函数的调用指针传递给另一个函数,从而使得应用程序可以具有更高的灵活性和可读性。
句柄函数可以用来改变句柄中给定函数的行为,这样可以大大简化程序代码、提高可维护性。
例如,可以使用句柄函数改变函数的调用参数、或者使用句柄函数在不同函数之间传递数据。
MATLAB的句柄函数的实现,需要使用句柄函数的宏。
实现句柄函数的宏是一种可以将多个函数调用连接在一起的功能,它可以将一个或多个函数的参数传递到另一个函数,从而使程序易于编写、易于阅读、也更容易调试。
此外,使用MATLAB句柄函数时也可以通过函数指针减少函数之间的耦合,提高程序的灵活性和可读性。
函数指针是一种原型,它可以用来向不同的函数传递参数,而不必按照原有的顺序,从而可以将连接函数的步骤简化。
MATLAB的句柄函数还可以用来实现更高级的功能,例如层次式句柄函数,它可以将多个函数的调用指针传递给另一个函数,从而可以大大简化程序,使程序更加简洁、易于理解。
总而言之,MATLAB句柄函数是一种非常有用的函数,它可以简化程序代码、提高可维护性,从而使程序更加简洁、灵活、易于理解。
MATLAB句柄函数可以大大提高软件编程的效率,为程序员提供更多的灵活性和可读性。
MatLab的函数句柄函数句柄(function_handle)定义官⽅定义:函数句柄是⼀种表⽰函数的 MATLAB® 数据类型。
函数句柄的典型⽤法是将函数传递给另⼀个函数。
例如,您可以将函数句柄⽤作基于某个值范围计算数学表达式的函数的输⼊参数。
函数句柄的其他典型⽤法包括:指定回调函数(例如,响应 UI 事件或与数据采集硬件交互的回调)。
构造以内联⽅式定义⽽⾮存储在程序⽂件(匿名函数)中的函数的句柄。
我的理解:相当于C语⾔中的指针,给函数取了个别名,相当于原函数来使⽤。
帮助:isa(h,'function_handle')来查看变量h是否为函数句柄。
创建函数句柄通过在函数名称前添加⼀个@符号来为函数创建句柄。
例如,如果您有⼀个名为myfunction的函数,请按如下所⽰创建⼀个名为f的句柄:f=@myfunction;此时,相当于给myfunction取了个别名叫f。
调⽤该函数就有两种⽅法:1.f(x)2.myfunction(x)注:参数列表根据具体的函数⽽定,不仅仅只是例⼦中的x函数句柄是您可传递给其他函数的变量。
例如,计算 x2 在区间 [0,1] 上的积分。
q=integral(f,0,1);函数句柄会存储其绝对路径,因此如果您有有效句柄,则可以从任意位置调⽤该函数。
您不必在创建句柄时指定函数路径,只需指定函数名。
匿名函数您可以创建指向匿名函数的句柄。
匿名函数是基于单⾏表达式的 MATLAB 函数,不需要程序⽂件。
构造指向匿名函数的句柄,⽅法是定义anonymous_function函数主体,以及指向匿名函数arglist的以逗号分隔的输⼊参数列表。
语法为:h=@(arglist)anonymous_function语法:@(参数列表)单⾏表达式例⼦:定义匿名函数sqrsqr=@(x)x.^2;等价于:函数⽂件function myfun=sqr(x);myfun=x.^2;将⼀个函数传递到另⼀个函数您可以使⽤函数句柄作为其他函数(称为复合函数)的输⼊参数。
第 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 条件控制【例 6.1-1】已知x x x e y x si n )1.0(5.0si n 21.0+-=-,在505x -≤≤区间,求函数的最小值。
-50-45-40-35-30-25-20-15-10-55010203040506070x sin(x)2/exp(x/10) - (sin(x) (x + 1/10))/2在第四章中采用的方法(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.m% fx% a、b% Nt% xmin、ymin% n[~,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;endend[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; %endend2)clearfx=@(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.2switch-case控制结构【例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' };% <7>A(2,:)={72,83,56,94,100}; % <8> %for k=1:5switch A{2,k} % case 100 % r='满分'; case a % r='优秀'; case b % r='良好'; case c % r='及格'; otherwise %r='不及格'; endA(3,k)={r}; end AA ='Jack' 'Marry' 'Peter' 'Rose' 'Tom' [ 72] [ 83] [ 56] [ 94] [100]'及格' '良好' '不及格' '优秀' '满分'6.1.3 for 循环和while 循环【例 6.1-3】请分别写出用for 和while 循环语句计算1000000210000002.02.02.012.0+++==∑= i i K 的程序。
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 11
1,其中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.01
5457.0),(5.175.375.065.175.375.022222
2y 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)假若需要输出圆面积,则绘出圆。
8主函数和子函数
【例7.4-1】编写一个内含子函数的M函数绘图文件。
9
10函数句柄的创建和调用
【例7.5-1】采用M 函数文件描写2
1
cos )(at t y =,其中a 是可变参数。
试画出3.02.0≤≤t 区间上的
11内联对象:函数文件的简化。
【例7.6-5】用内联对象表达⎥⎦
⎤
⎢⎣⎡=x b a x b a y sin ),,(2。
12变长度”输入输出量
【例7.7-1】变长度输入输出量的应用示例。
13词串彩化和定界符匹配提示
【例7.8-1】本例采用专门设计的exm070801.m,集中表现“词串彩化”、“定界符匹配指示”、以及“M-Lint 检测信息的静态标志”等提示信息,以使读者能从具体实例中获得体验。
M-Lint 代码分析器
15M文件调试器
五、习题
1、。