ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:377.75KB ,
资源ID:7024613      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7024613.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MATLAB函数句柄和M文件要点.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MATLAB函数句柄和M文件要点.docx

1、MATLAB函数句柄和M文件要点第 6 章 M文件和函数句柄6.1 Matlab控制流6.2 脚本文件和函数文件6.3 Matlab的函数类别6.4 函数句柄.1 MATLAB控制流6.1.1 if-else-end 条件控制6.1.2 swith-case 控制语句6.1.3 for循环和while循环6.1.4 控制程序流和的其他常用指令.1.1 if-else-end条件控制【例6.1-1】已知,在区间,求函数的最小值。回顾与复习:x,fval,exitflag,output=fminbnd(fun,x1,x2,options) 求一元函数在区间(x1, x2)中极小值在第四章中采用的方

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) % % (2)据图形观察,重设fminbnd的搜索区间xx=-23,-20,-18; %fc=fc0;xc=xc0; %for k=1:2 xw,fw=fminbnd(yx,xx(k),xx(k+1); % if fw0 % ii=ii+1; xc(ii)=w; fc(ii)=f; end end fmin,kk=min(fc); % xmin=xc(kk); %

3、 if abs(f0-fmin)Nt %break % end elseif f0-fmin1e-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.5fn,xmin,fmin)fprintf(最终子区间分割数为 %dn,n) 在x=-19.60721处,函数到达最小值-3.34765最终子区间分割数为 128 .1.2 switch-case

4、控制结构【例6.1-2】已知学生姓名和百分制分数,用“满分”,优秀、良好、及格和不及格表示学生成绩clear;% 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 A2,k % case 100 % r=满分; case a % r=优秀; case b % r=良好; case c % r=及格; otherwise % r=不及格

5、; end A(3,k)=r; endAA = Jack Marry Peter Rose Tom 72 83 56 94 100 及格 良好 不及格 优秀 满分 .1.3 for循环和while循环表 6.1-3 循环结构的使用方式for 循环while循环for ix=array (commands)endwhile expression (commands) end【例6.1-3】请分别写出用for 和while 循环语句计算的程序。此外,还请写出避免循环的数值、符号计算程序。(1)for 循环方法tics1=0;for k=0:1e6s1=s1+0.2(k);end;s1 toc (2

6、)while循环方法tics2=1;k=1;while k1e6+1 %注意:上限与for循环不同 s2=s2+0.2k; k=k+1;ends2toc (3)数值求和指令tics3=sum(0.2.(0:1e6)toc (4)符号求和指令ticsyms k;s4=vpa(symsum(0.2k,0,1e6)toc 【例6.1-4】编写计算,其中,是预先给定的控制精度。(1)function S,N=exm060104(epsilon)% S,N=exm060104(epsilon)% Calculate the sum of a special series S=1+1/(1+2)+1/(1

7、+2+N)% S Sum of a special series% N The minimum among all numbers to have 1/sum(1:N)epsilon k=k+1; s=s+k; d=1/s; S=S+d;endN=k;(2)(3)S,N=exm060104(0.0001) syms k n NSINF=limit(symsum(1/symsum(k,1,n),n,1,N),N,inf) N=141;SN=vpa(symsum(1/symsum(k,1,n),n,1,N) .1.4 控制程序流的其它常用指令 break语句和continue语句􀂄

8、; 一般与if语句配合使用。􀂄 break语句用于终止循环的执行。􀂄 continue语句跳过当前循环,进入下一次。例: 求100,200之间第一个能被21整除的整数。程序如下:for n=100:200if rem(n,21)=0continueendbreakendnn = 105 try语句try语句组1catch语句组2endtry语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2例:矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。

9、A=1,2,3;4,5,6; B=7,8,9;10,11,12;tryC=A*B;catchC=A.*B;endlasterr ans =错误使用 *内部矩阵维度必须一致。脚本文件和函数文件 M脚本文件 M函数文件 局部变量和全局变量 M函数文件的一般结构6.2.1 M脚本文件􀂄 指令集合􀂄 所产生变量驻留在matlab工作空间􀂄 Clear指令或者matlab关闭时才删除6.2.2 M函数文件􀂄 从形式上看,第一行是function引导的函数申明行􀂄 中间变量存放在临时工作空间,函数调用结束时,临时工作

10、空间变量立即被清除。 M函数文件的一般结构function 输出形参表=函数名(输入形参表)注释说明部分;函数体语句;具体:􀂄 1.函数申明行。􀂄 2.help和lookfor帮助使用。􀂄 3.在线帮助文本区,包括函数输入输出宗量的含义,调用格式说明。(在线帮助文本,help菜单下matlab help)。􀂄 4.编写和修改记录。用于软件档案管理。􀂄 5.函数体。Matlab指令。6.2.3 局部变量和全局变量􀂄 局部变量: 存在于函数空间内部的中间变量。产生于该函数的运行之中,影响范围

11、也仅仅限于该函数。􀂄 全局变量:基本工作空间和几个不同函数空间共享一个变量,即全局变量。必须逐个用global函数加以定义。一个函数改变其值,则所有的同名变量值改变。【例6.2-1】编写一个M函数文件。它具有以下功能:(A)根据指定的半径,画出蓝色圆周线;(B)可以通过输入字符串,改变圆周线的颜色、线型;(C)假若需要输出圆面积,则绘出圆。(1)function S,L=exm060201(N,R,str)% exm060201.m The area and perimeter of a regular polygon (正多边形的面积和周长)% N The number o

12、f sides % R The circumradius% str A line specification to determine line type/color% S The area of the regular polygon% L The perimeter of the regular polygon% exm060201 用蓝实线画半径为 1 的圆% exm060201(N) 用蓝实线画外接半径为 1 的正 N 边形% exm060201(N,R) 用蓝实线画外接半径为 R 的正 N 边形% exm060201(N,R,str) 用 str 指定的线画外接半径为 R 的正 N

13、边形% S=exm060201(.) 给出多边形面积 S ,并画相应正多边形填色图% S,L=exm060201(.) 给出多边形面积 S 和周长L,并画相应正多边形填色图% Zhang Zhiyong 编写于 2006-1-31switch nargin case 0 N=100;R=1;str=-b; case 1 R=1;str=-b; case 2 str=-b; case 3 ; % otherwise error(输入量太多。);end;t=0:2*pi/N:2*pi;x=R*sin(t);y=R*cos(t); if nargout=0 plot(x,y,str);elseif

14、nargout2 error(输出量太多。);else S=N*R*R*sin(2*pi/N)/2; % L=2*N*R*sin(pi/N); % fill(x,y,str)endaxis equal squarebox onshg (2) S,L=exm060201(6,2,-g) %图 6.2-1 绿色正六边形例2:求圆周率function piva = PiMonteCarlo(n)% PiMonteCarlo(n),用随机投点法模拟圆周率pi,作出模拟图. n为投点次数,可以是非负整数标量或向量.% piva = PiMonteCarlo(n),用随机投点法模拟圆周率pi,返回模拟值p

15、iva. 若n为标量(向量),则piva也为标量(向量).x = 0;y = 0;d = 0;m = length(n); % 求变量n的长度pivalue = zeros(m,1); % 为变量pivalue赋初值% 通过循环用投点法模拟圆周率pifor i = 1:m x = 2*rand(n(i),1)-1; % 随机投点的横坐标 y = 2*rand(n(i),1)-1; % 随机投点的纵坐标 d = x.2+y.2; pivalue(i) = 4*sum(d 1 % 如果n为向量,则返回圆周率的模拟值与投点个数的散点图 figure; % 新建一个图形窗口 plot(n,pivalu

16、e,k.); % 绘制散点图 h = refline(0,pi); % 添加参考线 set(h,linewidth,2,color,k); % 设置参考线属性 text(1.05*n(end),pi,pi,fontsize,15); % 添加文本信息 xlabel(投点个数); ylabel(pi的模拟值); % 添加坐标轴标签 else % 如果n为标量,则返回投点法模拟圆周率的示意图 figure; % 新建一个图形窗口 plot(x,y,k.); % 绘制散点图 hold on; % 绘制边长为2的正方形 h = rectangle(Position,-1 -1 2 2,LineWidt

17、h,2); t = linspace(0,2*pi,100); % 定义一个角度向量 plot(cos(t),sin(t),k,linewidth,2); % 绘制单位圆 xlabel(X); ylabel(Y); % 添加坐标轴标签 title(Pi的模拟值: num2str(pivalue); % 添加标题 axis(-1.1 1.1 -1.1 1.1); axis equal; % 设置坐标轴属性 endelse piva = pivalue; % 输出圆周率的模拟值end p = PiMonteCarlo(1000:5000:50000) % 返回圆周率pi的模拟值向量 PiMonte

18、Carlo(100:50:20000) % 绘制模拟值与投点个数的散点图 PiMonteCarlo(1000) .2 MATLAB的函数类别从扩展名M观察,MATLAB的M文件分为M脚本文件和M函数文件。那么,在MATLAB中,函数Function 又被细分为:主函数;子函数;嵌套函数;私用函数;匿名函数等。限于篇幅,本节只对主函数、子函数及匿名函数进行阐述。.2.1 主函数(Primary function).2.2 子函数(Subfunction)【例6.3-1】编写一个内含子函数的M函数绘图文件。(1)function Hr=exm060301(flag )% exm060301.m D

19、emo for handles of primary functions and subfunctions% flag 可以取字符串 line 或 circle 。% Hr 子函数cirline的句柄t=(0:50)/50*2*pi;x=sin(t);y=cos(t);Hr=cirline; % feval(Hr,flag,x,y,t)% function cirline(wd,x,y,t)% switch wdcase line plot(t, x, b ,t , y, r, LineWidth, 2)case circle plot(x, y, -g, LineWidth, 8), axi

20、s square offotherwise error(输入宗量只能取 line 或 circle ! )endshg(2) HH=exm060301(circle) ? 未定义与 char 类型的输入参数相对应的函数 exm060301。HH = cirline图 6.3-1 绿色圆周线HH=exm060301(line) HH = cirline (3) t=0:2*pi/5:2*pi;x=cos(t);y=sin(t); % HH(circle,x,y,t) CC=functions(HH) CC = function: cirline type: scopedfunction file

21、: E:2016秋Matlabprogramexm060301.m parentage: cirline exm060301 图 6.3-2 由子函数绘制的绿色正五边形.2.3 匿名函数(Anonymous function)(1)匿名函数的创建FH(arglist)expr(2)匿名函数的调用FH(arglist) 直接调用格式.3 函数句柄 函数句柄(Function handle)是MATLAB的一种数据类型。 包含了函数的路径、函数名、类型以及可能存在的重载方法;好处:(1). 引入函数句柄是为了使feval及借助于它的泛函指令工作更可靠;(2). 使“函数调用”像“变量调用”一样方便

22、灵活;(3). 提高函数调用速度,特别在反复调用情况下更显效率;(4). 提高软件重用性,扩大子函数和私用函数的可调用范围;(5). 迅速获得同名重载函数的位置、类型信息。可以与变量一样方便地使用:比如说,在现在这个目录运行时,创建了本目录一个函数的句柄,当转到其他目录时,可以通过函数句柄直接调用上一个目录的函数,而不需要把那个函数文件复制过来,因为创建的函数句柄中已经包含了路径信息;提高函数调用速度:因为matlab对函数的调用每次都是要搜索所有的路径,从set path中可以看到,路径是非常的多的,所以如果一个函数在程序中需要经常用到的话,使用函数句柄,对速度会有提高的.3.1 函数句柄的

23、创建和观察(1)创建函数句柄hm=magic hm = magic (2)函数句柄的调用M1=hm(4)M2=feval(hm,4) M1 = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1M2 = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 【例6.4-1】为magic函数创建文件句柄,并观察其内涵(1)hm=magic hm = magic (2)class(hm)isa(hm, function_handle) ans =function_handleans = 1 (3)CC=functions(hm) CC = func

24、tion: magic type: simple file: D:Matlab R2014atoolboxmatlabelmatma. (4)M1=hm(4) M1 = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 (5)M2=feval(hm,4) M2 = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 .3.2 函数句柄的基本用法原函数调用格式argout1, argout2, , argoutn=FunName(argin1, argin2, , arginn)Hfun=FunName函数句柄调用格式argout1, arg

25、out2, , argoutn=Hfun(argin1, argin2, , arginn)【例6.4-2】(1)S,L=exm060201(3,2,-r) % S = 5.1962L = 10.3923S = 图 6.4-1 直接调用函数exm060201所画的红色等边三角形(2)Hexm=exm060201, % (3)which(exm060201) (5)S,L=exm060201(3,2,-r) (6)S,L=Hexm(3,2,-r) % 图 6.4-2 在新视野中里用函数句柄Hexm所画的红色等边三角形 思考题1:猜数游戏首先由计算机产生1,100之间的随机整数,然后由用户猜测所产生的随机数。根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,则显示“High”,小于则显示“Low”,等于则显示“You won”,同时退出游戏。用户最多可以猜7次。a=ceil(100*rand(1);for i=1:7 b=input(the number is ?); if ba xx=high else if ba xx=low else xx=you are right a break end endend

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1