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 eflag0 % ii=ii+1; xc(ii)=w; fc(ii)=f; end fmin,kk=min(fc); xmin=xc(kk); if abs(f0-fmin)Nt %break % elseif f0-fmin1e-6 % f0=fmin; jj=1;end2)clearfx=(x)(sin(x)2*exp(-0.1*x)-0.5*sin(x)*
2、(x+0.1);a=-50;b=5;xmin,fmin,n=exm060101(fx,a,b,3);在x=%6.5f处,函数到达最小值%6.5fn,xmin,fmin)最终子区间分割数为 %dn,n) 在x=-19.60721处,函数到达最小值-3.34765最终子区间分割数为 128 .1.2 switch-case控制结构【例6.1-2】已知学生姓名和百分制分数,用“满分”,优秀、良好、及格和不及格表示学生成绩clear;% 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,MarryP
3、eterRoseTom;% A(2,:)=72,83,56,94,100; % 5 switch A2,k % case 100 % r=满分; case a % 优秀 case b % 良好 case c % 及格 otherwise %不及格 A(3,k)=r;AA = 72 83 56 94 100.1.3 for循环和while循环表 6.1-3 循环结构的使用方式for 循环while循环for ix=array (commands)while expression (commands) 【例6.1-3】请分别写出用for 和while 循环语句计算的程序。此外,还请写出避免循环的数
4、值、符号计算程序。(1)for 循环方法tics1=0;for k=0:1e6s1=s1+0.2(k);s1 toc (2)while循环方法s2=1;k=1;while k1e6+1 %注意:上限与for循环不同 s2=s2+0.2k; k=k+1;s2toc (3)数值求和指令s3=sum(0.2.(0:1e6)toc (4)符号求和指令syms k;s4=vpa(symsum(0.2k,0,1e6)toc 【例6.1-4】编写计算,其中,是预先给定的控制精度。(1)function S,N=exm060104(epsilon)% S,N=exm060104(epsilon)% Calcu
5、late the sum of a special series S=1+1/(1+2)+1/(1+2+N)% S Sum of a special series% N The minimum among all numbers to have 1/sum(1:N) s=s+k; d=1/s; S=S+d;N=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 控制程序流的其它
6、常用指令 break语句和continue语句 一般与if语句配合使用。 break语句用于终止循环的执行。 continue语句跳过当前循环,进入下一次。例: 求100,200之间第一个能被21整除的整数。程序如下:for n=100:200if rem(n,21)=0continuebreaknn = 105 try语句try语句组1catch语句组2try语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘
7、。A=1,2,3;4,5,6; B=7,8,9;10,11,12;C=A*B;C=A.*B;lasterr ans =错误使用 *内部矩阵维度必须一致。脚本文件和函数文件 M脚本文件 M函数文件 局部变量和全局变量 M函数文件的一般结构6.2.1 M脚本文件 指令集合 所产生变量驻留在matlab工作空间 Clear指令或者matlab关闭时才删除6.2.2 M函数文件 从形式上看,第一行是function引导的函数申明行 中间变量存放在临时工作空间,函数调用结束时,临时工作空间变量立即被清除。function 输出形参表=函数名(输入形参表)注释说明部分;函数体语句;具体: 1.函数申明行。
8、 2.help和lookfor帮助使用。 3.在线帮助文本区,包括函数输入输出宗量的含义,调用格式说明。(在线帮助文本,help菜单下matlab help)。 4.编写和修改记录。用于软件档案管理。 5.函数体。Matlab指令。6.2.3 局部变量和全局变量 局部变量: 存在于函数空间内部的中间变量。产生于该函数的运行之中,影响范围也仅仅限于该函数。 全局变量:基本工作空间和几个不同函数空间共享一个变量,即全局变量。必须逐个用global函数加以定义。一个函数改变其值,则所有的同名变量值改变。【例6.2-1】编写一个M函数文件。它具有以下功能:(A)根据指定的半径,画出蓝色圆周线;(B)可
9、以通过输入字符串,改变圆周线的颜色、线型;(C)假若需要输出圆面积,则绘出圆。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 the r
10、egular polygon% exm060201 用蓝实线画半径为 1 的圆% exm060201(N) 用蓝实线画外接半径为 1 的正 N 边形% exm060201(N,R) 用蓝实线画外接半径为 R 的正 N 边形% exm060201(N,R,str) 用 str 指定的线画外接半径为 R 的正 N 边形% S=exm060201(.) 给出多边形面积 S ,并画相应正多边形填色图% S,L=exm060201(.) 给出多边形面积 S 和周长L,并画相应正多边形填色图% Zhang Zhiyong 编写于 2006-1-31switch nargin case 0 N=100;R=
11、1;str=-b case 1 R=1; case 2 str= case 3 ; % otherwise error(输入量太多。);t=0:2*pi/N:2*pi;x=R*sin(t);y=R*cos(t);if nargout=0 plot(x,y,str);elseif nargout输出量太多。else S=N*R*R*sin(2*pi/N)/2; % L=2*N*R*sin(pi/N); fill(x,y,str)axis equal squarebox onshg (2) S,L=exm060201(6,2,-g) %图 6.2-1 绿色正六边形例2:求圆周率function p
12、iva = 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赋初值% 通过循环用投点法模拟圆周率pifor i = 1:m x = 2*rand(n(i),1)-1; % 随机投点的横坐标 y = 2
13、*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,colork % 设置参考线属性 text(1.05*n(end),pi,pifontsize,15); % 添加文本信息 xlabel(投点个数 ylabel(pi的模拟值 % 添加坐标轴标签 else % 如果n为标量,则返回投点
14、法模拟圆周率的示意图 plot(x,y, hold on; % 绘制边长为2的正方形 h = rectangle(Position,-1 -1 2 2,LineWidth,2); t = linspace(0,2*pi,100); % 定义一个角度向量 plot(cos(t),sin(t), % 绘制单位圆XY title(Pi的模拟值: num2str(pivalue); % 添加标题 axis(-1.1 1.1 -1.1 1.1); axis equal; % 设置坐标轴属性else piva = pivalue; % 输出圆周率的模拟值end p = PiMonteCarlo(1000:
15、5000:50000) % 返回圆周率pi的模拟值向量 PiMonteCarlo(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函数绘图文件。function Hr
16、=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 wdcase plot(t, x, b ,t , y, r, , 2) plot(x, y, , 8), axis square o
17、ffotherwise输入宗量只能取 !)shg(2) HH=exm060301() ? 未定义与 char 类型的输入参数相对应的函数 exm060301。HH = cirline图 6.3-1 绿色圆周线HH=exm060301() t=0:2*pi/5:x=cos(t);y=sin(t); HH(,x,y,t) CC=functions(HH) CC = function:cirline type:scopedfunction file:E:2016秋Matlabprogramexm060301.m parentage: 图 6.3-2 由子函数绘制的绿色正五边形.2.3 匿名函数(An
18、onymous function)(1)匿名函数的创建FH(arglist)expr(2)匿名函数的调用FH(arglist) 直接调用格式.3 函数句柄 函数句柄(Function handle)是MATLAB的一种数据类型。 包含了函数的路径、函数名、类型以及可能存在的重载方法;好处:(1). 引入函数句柄是为了使feval及借助于它的泛函指令工作更可靠;(2). 使“函数调用”像“变量调用”一样方便灵活;(3). 提高函数调用速度,特别在反复调用情况下更显效率;(4). 提高软件重用性,扩大子函数和私用函数的可调用范围;(5). 迅速获得同名重载函数的位置、类型信息。可以与变量一样方便地
19、使用:比如说,在现在这个目录运行时,创建了本目录一个函数的句柄,当转到其他目录时,可以通过函数句柄直接调用上一个目录的函数,而不需要把那个函数文件复制过来,因为创建的函数句柄中已经包含了路径信息;提高函数调用速度:因为matlab对函数的调用每次都是要搜索所有的路径,从set path中可以看到,路径是非常的多的,所以如果一个函数在程序中需要经常用到的话,使用函数句柄,对速度会有提高的.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
20、6 12 4 14 15 1M2 = 4 14 15 1 【例6.4-1】为magic函数创建文件句柄,并观察其内涵hm=magic class(hm)isa(hm, function_handleans =function_handle 1 CC=functions(hm) magicsimpleD:Matlab R2014atoolboxmatlabelmatma.(4)M1=hm(4) (5).3.2 函数句柄的基本用法原函数调用格式argout1, argout2, , argoutn=FunName(argin1, argin2, , arginn)Hfun=FunName函数句柄调
21、用格式argout1, argout2, , argoutn=Hfun(argin1, argin2, , arginn)【例6.4-2】(1)S,L=exm060201(3,2,-r) % S = 5.1962L = 10.3923S =图 6.4-1 直接调用函数exm060201所画的红色等边三角形Hexm=exm060201, % which(exm060201S,L=exm060201(3,2,) (6)S,L=Hexm(3,2,) % 图 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 blowyou are right a break
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1