440 likes | 550 Views
第 3 章 MATLAB 程序设计 (2). 3 . 5 循环语句. 3.5.1 while 循环. while 循环的一般形式: while 条件表达式 语句组; end. 例 3-16 从键盘输入若干个数,当输入 0 时结束 输入,求这些数的平均值和它们之和。. 例 3-17 已知 ( 1 ) n 为任意给定的整数,求 y 的值。 ( 2 ) y≥1.5 时,求 n 的值。. 3.5.2 for 循环. for 语句的格式为:.
E N D
3.5 循环语句 3.5.1 while循环 while 循环的一般形式: while 条件表达式 语句组; end MATLAB 7.X程序设计
例3-16从键盘输入若干个数,当输入0时结束 输入,求这些数的平均值和它们之和。 MATLAB 7.X程序设计
例 3-17已知 (1)n为任意给定的整数,求y的值。 (2)y≥1.5时,求n的值。 MATLAB 7.X程序设计
3.5.2 for循环 for语句的格式为: for循环变量=表达式1:表达式2:表达式3 循环体语句 end MATLAB 7.X程序设计
for语句的更一般的格式为: for 循环变量=矩阵表达式 循环体语句 end 执行时依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。 MATLAB 7.X程序设计
例3-18已知 当m=100时,求y的值。 MATLAB 7.X程序设计
例 3-19设 求 MATLAB 7.X程序设计
例3-20求[100,200]之间第一个能被13整 除的整数。 例3-21使用for循环语句逐一显示构架数组 的域值。 例3-22输出全部三位的水仙花数。 例3-23编程求出Fibonacci数列中第一个 大于10000的元素及序号。 MATLAB 7.X程序设计
例3-24编程列出n阶Hilbert矩阵。 例3-25求某正整数范围内的全部素数。 MATLAB 7.X程序设计
3.5.3 循环程序的等价形式 1 数组运算的应用 MATLAB的基本数据单元为数组,定义了矩阵运算和数组运算,循环程序在一些特殊情况下可以用数组运算替代。 MATLAB 7.X程序设计
例3-26求1-100的平方、平方根和立方根。 • 方法1: square=zeros(1,100);square_root=zeros(1,100);cube_root=zeros(1,100); for ii=1:100 square(ii)=ii^2; square_root(ii)=ii^(1/2); cube_root(ii)=ii^(1/3); end • 方法2: ii=1:100;square(ii)=ii.^2; square_root(ii)=ii.^(1/2); cube_root(ii)=ii.^(1/3); MATLAB 7.X程序设计
2 逻辑数组的应用 下面介绍逻辑数组和循环程序等价方面的应用。 MATLAB 7.X程序设计
方法1: a=magic(3); for ii=1:size(a,1) for jj=1:size(a,2) if a(ii,jj)>5 a(ii,jj)=sqrt(a(ii,jj)); end end end a 例3-27编程求3阶魔方矩阵大于5的元素的平 方根。 MATLAB 7.X程序设计
方法2: a=magic(3); b=a>5; %b是逻辑数组 a(b)=sqrt(a(b)) 分析:方法1和方法2程序的执行结果相同,b=a>5和a(b)=sqrt(a(b))语句等价于二重循环。 MATLAB 7.X程序设计
如果要求同时对小于等于5的元素求平方呢? a=magic(3); b=a>5; a(b)=sqrt(a(b)); a(~b)=a(~b).^2; a MATLAB 7.X程序设计
例3-28创建向量1,2,... ,10000,求其中大于5000的所有元素的平方根。要求证明用逻辑数组方法执行时间短。 MATLAB 7.X程序设计
3.6 函数文件 3.6.1函数文件的格式 函数文件是一种特殊类型的运行在自己独立的工作空间的M-文件,通过在输入形参表接收数据,通过输出形参表返回结果到调用文件。 函数文件的一般格式为: function 输出形参表=函数名(输入形参表) 注释行 … 函数体语句 … (return) MATLAB 7.X程序设计
说明: 1)函数说明行 2)H1行 3)help text 4)编写和修改记录 5)函数体 注意:1) 、2)、3)和4)是注释行 MATLAB 7.X程序设计
例3-29编写一个函数文件,求Fibonacci数组中第一个大于整数n 的元素及序号。 定义函数文件f0: function f0(n) a(1)=1;a(2)=1;i=2; while a(i)<= n a(i+1)=a(i-1)+a(i);i=i+1; end i,a(i) 调用时在命令窗口输入: f0(10000) MATLAB 7.X程序设计
例3-30求n!,n=1,2,…,10。 定义函数文件ffactor: function f=ffactor(n) if n<=1 f=1; else f=ffactor(n-1)*n; end return; %返回 MATLAB 7.X程序设计
编写下述的命令文件中调用函数文件ffactor.m for i=1:10 fac(i)=ffactor(i); end fac MATLAB 7.X程序设计
3.6.2 全局变量和临时变量 1 全局变量 global X Y Z 2 局部变量 presistent X Y Z MATLAB 7.X程序设计
3.6.3 函数文件的应用 1 建立内联函数 建立内联函数的命令格式为: inline (EXPR) 功能:以字符串EXPR创建内联函数,如不指出变量,用x作为自变量。 已建立的内联函数,可通过formula函数查看, 格式为: formula (FUN) %其中FUN为已建立的内联函数 MATLAB 7.X程序设计
例3-31建立函数 方法1: f= inline('(x-3).^2-1') ; formula(f) f(3) 方法2: 建立函数文件fc function ff=fc(x) ff=(x-3).^2-1; 在命令窗口输入语句ff=fc(3)调用fc,结果为-1。 MATLAB 7.X程序设计
2 函数的零值和极小值 函数的零值函数fzero的格式: X = fzero(FUN,X0) 功能:求函数FUN在X0附近的零点 函数的极小值可通过函数fminbnd求出,格式为: X=fminbnd(FUN,x1,x2) 功能:求FUN在 x1和x2之间的最小值。 MATLAB 7.X程序设计
例3-32求函数f(x)=sin(3x)在2附近 的零点。 f=inline('sin(3*x)'); X=fzero(f,2) MATLAB 7.X程序设计
例3-33求函数f(x)=sin(x)+3在区间[2 5]的极小值。 f=inline('sin(x)+3'); x=fminbnd(f,2,5) ; 或x=fminbnd('sin(x)+3',2,5) ; sin(x)+3 %f(x)在区间[2 5]的极小值 MATLAB 7.X程序设计
3.7 MATLAB 文件处理 两类文件:M文件和数据文件。 常用的文件的一般管理命令: 3.7.1 MATLAB 文件处理简介 what [目录名] 功能:显示目录内容 type文件名 功能:显示M-文件的内容 which 函数名 功能:显示函数所在的文件位置,给出路径。 MATLAB 7.X程序设计
cd 目录名 功能:改变目录 path 路径名 功能:路径控制命令 dir 目录名 功能:显示目录内容命令 delete 文件名 功能:删除文件或对象命令 ! 功能:执行系统命令 MATLAB 7.X程序设计
3.7.2 数据文件的分类 数据文件有二进制格式文件和ASCII文本文件两种形式, 有四点区别: • 1)是否能在输出设备上显示 • 2)否能在不同的计算机间传送 • 3)是否需要大的存储空间 • 4)执行时间 MATLAB 7.X程序设计
3.7.3 文件打开和关闭 在读写数据文件之前,必须先用fopen函数打开文件,并指定允许对该文件进行的操作。 fopen函数的调用格式为: • Fid=fopen(文件名,打开方式) 其中fid用于存储文件句柄值,如果句柄值大于0,则说明文件打开成功。句柄值用来标识该数据文件,其他函数可以利用它对该数据文件进行操作。 • 文件名用字符串形式,表示待打开的数据文件。文件名用字符串形式,表示待打开方式有:r(读)、w(写)、a(追加)、r+(可读可写)等。 MATLAB 7.X程序设计
文件在进行完读、写等操作后,应及时关闭,以免数据丢失。文件在进行完读、写等操作后,应及时关闭,以免数据丢失。 • 关闭文件用fclose函数实现,调用格式为: sta=fclose(Fid) • 该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0;否则,返回-1。如果要关闭所有已打开的文件用fclose('all')。 MATLAB 7.X程序设计
3.7.4 二进制I/O函数 • 打开二进制数据文件后,应用fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中; • 应用fread函数 读取二进制文件的数据,并将数据存入矩阵。 • fwrite函数调用格式为: COUNT=fwrite(fid,A,precision) 其中COUNT返回所写的数据元素个数,fid为文件句柄,A用来存放写入文件的数据,precision用于控制所写数据的精度,常用的数据精度为:char、unchar、int、long、float、double等。缺省数据精度为unchar,即无符号字符格式。 MATLAB 7.X程序设计
fread函数调用格式为: [A,count]=fread(Fid,size,precision) 其中 A用来存放读取的数据, COUNT返回所读取的数据元素个数, Fid为文件句柄, size为可选项,若不选用则读取整个文件内容,若选用则它的值可以是下列值: • N 读取N个元素到一个列向量 • Inf 读取整个文件 • [M,N] 读数据到M*N的矩阵中,数据按列存放 precision代表数据精度,常用的数据精度为char,unchar,int,long,float,double等。缺省数据精度为unchar,即无符号字符格式。 MATLAB 7.X程序设计
例3-34建立一数据文件magic5.dat,用于存放5阶魔方阵。然后打开该文件,对大于5的元素求平方根,对小于等于5的元素求平方后存放在原数据的后面。例3-34建立一数据文件magic5.dat,用于存放5阶魔方阵。然后打开该文件,对大于5的元素求平方根,对小于等于5的元素求平方后存放在原数据的后面。 MATLAB 7.X程序设计
3.7.5格式化I/O函数 • 打开格式化数据文件后,应用fprintf函数可以将数据按指定格式写入到文本文件中; • 应用fscanf 函数读取文本文件的内容,并按指定格式存入矩阵。 • fprintf函数调用格式为: COUNT = fprintf (FID,FORMAT,A) 其中,COUNT返回所写入的数据元素个数,A存放要写入文件的数据。先按format指定的格式将数据矩阵A格式化,然后写入到Fid所指定的文件。format可以控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。 MATLAB 7.X程序设计
fscanf函数调用格式为: [A,COUNT] = fscanf(FID,FORMAT,SIZE) 其中,A用来存放读取的数据, COUNT返回所读取的数据元素个数。 Fid为文件句柄。 Format可以控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。 size 为可选项,若不选用则读取整个文件内容,若选用则它的值可以是下列值: • N 读取N个元素到一个列向量 • Inf 读取整个文件 • [M,N] 读数据到M*N的矩阵中,数据按列存放。 MATLAB 7.X程序设计
例3-35建立一数据文件cfs.dat,用于存放1-10平方和立方。例3-35建立一数据文件cfs.dat,用于存放1-10平方和立方。 • 例3-36建立一数据文件,用于存放若干名学生的姓名和成绩。 MATLAB 7.X程序设计
3.7.6文件位置和状态函数 文件位置和状态函数有: 测试文件的尾部函数 feof 文件指针的当前位置函数 ftell 设置文件的读写指针函数 frewind和fseek。 MATLAB 7.X程序设计
Feof 函数的格式为: feof (FID) 功能:测试文件的尾部。其中FID为文件句柄,如果文件位置指针是该文件的尾部,返回1 ;否则返回0。 • ftell函数的格式为: POSITION = ftell (FID) 功能:返回文件指针的当前位置。返回值为从文件开始到指针当前位置的字节数。若返回值为-1表示为获取文件当前位置失败。 • frewind 函数的格式为: frewind (FID) 功能:设置文件位置指针为文件的开头。 MATLAB 7.X程序设计
fseek函数的格式为: STATUS = fseek (FID, OFFSET, ORIGIN) 功能:以指定的OFFSET相对于ORIGIN重新定位文件位置指针。其中FID为文件句柄,OFFSET表示位置指针相对移动的字节数,它的取值有3种可能:若为正整数表示向文件尾方向移动;若为负数表示向文件头方向移动;若为零表示不移动。 ORIGIN 表示位置指针移动的参照位置,它的取值有3种可能:'cof' 表示文件的当前位置,'bof'表示文件的开始位置,'eof'表示文件的结束位置。 若成功STATUS返回值为0,否则返回值为-1,这时可用ferror 函数获取出错信息。 如语句fseek(fid,0,-1)的功能是设置文件指针为文件的开头。 MATLAB 7.X程序设计
例3-37演示函数数据文件的指定位置数据的读取过程。例3-37演示函数数据文件的指定位置数据的读取过程。 MATLAB 7.X程序设计
重点内容: • (1)常用的逻辑函数的格式和功能; • (2)流程控制语句的格式和执行过程; • (3)自定义函数文件的定义和调用方法; • (4)数据文件的建立和读写方法。 MATLAB 7.X程序设计