




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 6 章 M 文件和函数句柄文件和函数句柄 6.16.1 MatlabMatlab控制流 6.26.2 脚本文件和函数文件 6.36.3 MatlabMatlab的函数类别 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】已知,在 xxxey x sin) 1 . 0(5 . 0sin 21 . 0 区间,求函数的最小值。505x -50-45-40-35-30-25-20-15-10-505 0 10 20 30 40 50 60 70 x sin(x)2/exp(x/10) - (sin(x) (x + 1/10)/2 回顾与复习: 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)% % (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);% if abs(f0-fmin)Nt% break% end elseif f0-fmin1e-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.5fn,xmin,fmin) fprintf(最终子区间分割数为最终子区间分割数为 %dn,n) 在 x=-19.60721 处,函数到达最小值-3.34765 最终子区间分割数为 128 6.1.2switch-case 控制结构控制结构 【例 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=不及格不及格; end A(3,k)=r; end A A = Jack Marry Peter Rose Tom 72 83 56 94 100 及格 良好 不及格 优秀 满分 6.1.3for 循环循环和和 while 循环循环 表 6.1-3 循环结构的使用方式 for 循环循环while 循环循环 for ix=array (commands) end while expression (commands) end 【例 6.1-3】请分别写出用 for 和 while 循环语句计算 的程序。此外,还请写出 10000002 1000000 0 2 . 02 . 02 . 012 . 0 i i K 避免循环的数值、符号计算程序。 (1)for 循环方法 tic s1=0; for k=0:1e6 s1=s1+0.2(k); end; s1 toc (2)while 循环方法 tic s2=1;k=1; while k2 error(输出量太多。输出量太多。); else S=N*R*R*sin(2*pi/N)/2; % L=2*N*R*sin(pi/N);% fill(x,y,str) end axis equal square box on shg (2) S,L=exm060201(6,2,-g)% 图 6.2-1 绿色正六边形 例 2:求圆周率 function piva = PiMonteCarlo(n) % PiMonteCarlo(n),用随机投点法模拟圆周率,用随机投点法模拟圆周率pi,作出模拟,作出模拟 图图. n为投点次数,可以是非负整数标量或向量为投点次数,可以是非负整数标量或向量. % piva = PiMonteCarlo(n),用随机投点法模拟圆周率,用随机投点法模拟圆周率 pi,返回模拟值,返回模拟值piva. 若若n为标量(向量),则为标量(向量),则piva也为标量也为标量 (向量)(向量). x = 0;y = 0;d = 0; m = length(n); % 求变量求变量n的长度的长度 pivalue = zeros(m,1); % 为变量为变量pivalue赋初值赋初值 % 通过循环用投点法模拟圆周率通过循环用投点法模拟圆周率pi for 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,pivalue,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,LineWidth,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; % 设置坐标轴属性设置坐标轴属性 end else piva = pivalue; % 输出圆周率的模拟值输出圆周率的模拟值 end p = PiMonteCarlo(1000:5000:50000) % 返回圆周率返回圆周率 pi 的模拟值向量的模拟值向量 PiMonteCarlo(100:50:20000) % 绘制模拟值与投点个数绘制模拟值与投点个数 的散点图的散点图 PiMonteCarlo(1000) 6.2MATLAB 的函数类别的函数类别 从扩展名 M 观察,MATLAB 的 M 文件分为 M 脚本文件和 M 函数 文件。那么,在 MATLAB 中,函数 Function 又被细分为:主函 数;子函数;嵌套函数;私用函数;匿名函数等。限于篇幅,本节 只对主函数、子函数及匿名函数进行阐述。 6.2.1主函数(主函数(Primary function) 6.2.2子函数(子函数(Subfunction) 【例 6.3-1】编写一个内含子函数的 M 函数绘图文件。 (1) function Hr=exm060301(flag ) % exm060301.m Demo 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 wd case line plot(t, x, b ,t , y, r, LineWidth, 2) case circle plot(x, y, -g, LineWidth, 8), axis square off otherwise error(输入宗量只能取输入宗量只能取 line 或或 circle ! ) end shg (2) HH=exm060301(circle) ? 未定义与未定义与 char 类型的输入参数相对应的函数类型的输入参数相对应的函数 exm060301。HH = cirline 图 6.3-1 绿色圆周线 HH=exm060301(line) HH = cirline 01234567 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1 (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: E:2016 秋 Matlabprogramexm060301.m parentage: cirline exm060301 图 6.3-2 由子函数绘制的绿色正五边形 6.2.3匿名函数(匿名函数(Anonymous function) (1)匿名函数的创建 FH(arglist)expr (2)匿名函数的调用 FH(arglist) 直接调用格式 6.3函数句柄函数句柄 函数句柄(Function handle)是 MATLAB 的一种数据类型。 包含了函数的路径、函数名、类型以及可能存在的重载方法; 好处: (1). 引入函数句柄是为了使 feval 及借助于它的泛函指令工作更可靠; (2). 使“函数调用”像“变量调用”一样方便灵活; (3). 提高函数调用速度,特别在反复调用情况下更显效率; (4). 提高软件重用性,扩大子函数和私用函数的可调用范围; (5). 迅速获得同名重载函数的位置、类型信息。 可以与变量一样方便地使用:可以与变量一样方便地使用:比如说,在现在这个目录运行时,创建了本目录 一个函数的句柄,当转到其他目录时,可以通过函数句柄直接调用上一个目录 的函数,而不需要把那个函数文件复制过来,因为创建的函数句柄中已经包含 了路径信息; 提高函数调用速度提高函数调用速度:因为 matlab 对函数的调用每次都是要搜索所有的路径,从 set path 中可以看到,路径是非常的多的,所以如果一个函数在程序中需要经常 用到的话,使用函数句柄,对速度会有提高的 6.3.1函数句柄的创建和观察函数句柄的创建和观察 (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 1 M2 = 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_handle ans = 1 (3) CC=functions(hm) CC = function: 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 6.3.2函数句柄的基本用法函数句柄的基本用法 原函数调用格式原函数调用格式 argout1, argout2, , argoutn=FunName(argin1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 26908-2025鲜枣贮藏与物流保鲜技术规范
- GB/T 17218-2025生活饮用水化学处理剂卫生安全性评价
- GB/T 46217-2025聚合物基压电复合材料电离辐射效应试验方法
- 2025江苏南通醋酸纤维有限公司招聘模拟试卷附答案详解(典型题)
- 2025广西农业科学院农业资源与环境研究所土壤生态与高值农业研究室公开招聘1人模拟试卷及完整答案详解一套
- 2025年安庆市第二人民医院招聘2人考前自测高频考点模拟试题完整参考答案详解
- 2025年哈尔滨延寿县公安局公开招聘第二批警务辅助人员32人考前自测高频考点模拟试题及答案详解(夺冠系列)
- 2025年福建省福州市鳌峰坊特色历史文化街区招聘1人考前自测高频考点模拟试题及答案详解(必刷)
- 2025广西桂林市叠彩区文化体育和旅游局计划面向社会招聘1人模拟试卷附答案详解(完整版)
- 2025河南信阳市潢川县退役军人事务局招聘3名全日制公益性岗位考前自测高频考点模拟试题及参考答案详解1套
- 2025年下半年拜城县招聘警务辅助人员(260人)考试模拟试题及答案解析
- 宅基地争议申请书
- 2025年杭州上城区总工会公开招聘工会社会工作者9人笔试参考题库附答案解析
- 百师联盟2026届高三上学期9月调研考试数学试卷(含答案)
- 河南省百师联盟2025-2026学年高二上学期9月联考化学试题(A)含答案
- 2025年互联网+特殊教育行业研究报告及未来发展趋势预测
- 住宅小区物业管理应急预案方案
- 2025年高校教师资格证之高等教育心理学考试题库(附答案)
- 低空经济框架报告低空经济
- 西游记课件-狮驼岭
- 2.3 二次函数与一元二次方程、不等式 课件(共24张)
评论
0/150
提交评论