当前位置:文档之家› MATLAB函数句柄和M文件

MATLAB函数句柄和M文件

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的程序。

此外,还请写出i0switch A{2,k} % case 100%r='满分 ';case a%r='优秀 ';case b%r='良好 ';case c%r='及格 ';otherwise%r='不及格 '; endA(3,k)={r};endAA ='Jack' 'Marry' 'Peter' 'Rose' 'Tom'[ 72] [ 83] [ 56] [ 94] [100]' 及格 ' '良好 ' ' 不及格 '' 优秀 ' 满分};% <7>A(2,:)={72,83,56,94,100}; % <8> %for k=1:56.1.3 for 循环和 while 循环避免循环的数值、符号计算程序。

( 1)for 循环方法 tic s1=0;for k=0:1e6 s1=s1+0.2^(k); end; s1 toc( 2)while 循环方法 tics2=1;k=1;while k<1e6+1%注意:上限与 for 循环不同s2=s2+0.2^k; k=k+1; end s2 toc( 3)数值求和指令tics3=sum(0.2.^(0:1e6)) toc(4)符号求和指令tic syms k;s4=vpa(symsum(0.2^k,0,1e6)) toc(1)function [S,N]=exm060104(epsilon) % [S,N]=exm060104(epsilon)【例 6.1-4】编写计算S给定的控制精度。

nn1k1 ,其中 N1 argmin Nkk1是预先% Calculate the sum of a special seriesS=1+1/(1+2)+ ⋯+1/(1+2+ ⋯+N)% S Sum of a special series% N The minimum among allnumbers to have 1/sum(1:N)<epsilon% epsilon Given accuracy k=0;s=0;d=inf;S=0;while d>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))break 语句和continue 语句一般与if 语句配合使用。

break 语句用于终止循环的执行。

continue 语句跳过当前循环,进入下一次。

例:求[100 ,200] 之间第一个能被21 整除的整数。

程序如下:for n=100:200if rem(n,21)~=0 continue end break end n n = 105try 语句try 语句组 1 catch 语句组 2 end try 语句先试探性执行语句组1,如果语句组 1 在执行过程中出现错误,则将错误信息赋给保留的lasterr 变量,并转去执行语句组2 例:矩阵乘法运算要求两矩阵的维数相容,否则会出错。

先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。

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 引导的函数申明行中间变量存放在临时工作空间,函数调用结束时,临时工作空间变量立即被清除。

M函数文件的一般结构function 输出形参表= 函数名(输入形参表)注释说明部分;函数体语句;具体:1. 函数申明行。

2. help 和lookfor 帮助使用。

3. 在线帮助文本区,包括函数输入输出宗量的含义,调用格式说明。

(在线帮助文本,help 菜单下matlab help )。

4. 编写和修改记录。

用于软件档案管理。

5. 函数体。

Matlab 指令。

6.2.3 局部变量和全局变量局部变量:存在于函数空间内部的中间变量。

产生于该函数的运行之中,影响范围也仅仅限于该函数。

全局变量:基本工作空间和几个不同函数空间共享一个变量,即全局变量。

必须逐个用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 of sides% R The circumradius% str A line specification to determine line type/color% S The area of the regular polygon% L The perimeter of theregular polygon % exm060201 的圆% exm060201(N,R,str) 用 str 指定的线画外接半径为 R 的正 N 边形% S=exm060201(...) 给出多边形面 积 S ,并画相应正多边形填色图% [S,L]=exm060201(...) 给出多边形面积 S 和周长 L, 并画相应正多边形填色图% Zhang Zhiyong 编写于 2006-1-31 switch nargincase 0N=100;R=1;str= '-b' ;case 1R=1;str= '-b' ;case 2str= '-b' ;case 3; %otherwiseerror( ' 输入量太多。

相关主题