1 / 44

第 3 章 MATLAB 程序设计 (2)

第 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 语句的格式为:.

vernon-kidd
Download Presentation

第 3 章 MATLAB 程序设计 (2)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第3章 MATLAB 程序设计(2)

  2. 3.5 循环语句 3.5.1 while循环 while 循环的一般形式: while 条件表达式 语句组; end MATLAB 7.X程序设计

  3. 例3-16从键盘输入若干个数,当输入0时结束 输入,求这些数的平均值和它们之和。 MATLAB 7.X程序设计

  4. 例 3-17已知 (1)n为任意给定的整数,求y的值。 (2)y≥1.5时,求n的值。 MATLAB 7.X程序设计

  5. 3.5.2 for循环 for语句的格式为: for循环变量=表达式1:表达式2:表达式3 循环体语句 end MATLAB 7.X程序设计

  6. for语句的更一般的格式为: for 循环变量=矩阵表达式 循环体语句 end 执行时依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。 MATLAB 7.X程序设计

  7. 例3-18已知 当m=100时,求y的值。 MATLAB 7.X程序设计

  8. 例 3-19设 求 MATLAB 7.X程序设计

  9. 例3-20求[100,200]之间第一个能被13整 除的整数。 例3-21使用for循环语句逐一显示构架数组 的域值。 例3-22输出全部三位的水仙花数。 例3-23编程求出Fibonacci数列中第一个 大于10000的元素及序号。 MATLAB 7.X程序设计

  10. 例3-24编程列出n阶Hilbert矩阵。 例3-25求某正整数范围内的全部素数。 MATLAB 7.X程序设计

  11. 3.5.3 循环程序的等价形式 1 数组运算的应用 MATLAB的基本数据单元为数组,定义了矩阵运算和数组运算,循环程序在一些特殊情况下可以用数组运算替代。 MATLAB 7.X程序设计

  12. 例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程序设计

  13. 2 逻辑数组的应用 下面介绍逻辑数组和循环程序等价方面的应用。 MATLAB 7.X程序设计

  14. 方法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程序设计

  15. 方法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程序设计

  16. 如果要求同时对小于等于5的元素求平方呢? a=magic(3); b=a>5; a(b)=sqrt(a(b)); a(~b)=a(~b).^2; a MATLAB 7.X程序设计

  17. 例3-28创建向量1,2,... ,10000,求其中大于5000的所有元素的平方根。要求证明用逻辑数组方法执行时间短。 MATLAB 7.X程序设计

  18. 3.6 函数文件 3.6.1函数文件的格式 函数文件是一种特殊类型的运行在自己独立的工作空间的M-文件,通过在输入形参表接收数据,通过输出形参表返回结果到调用文件。 函数文件的一般格式为: function 输出形参表=函数名(输入形参表) 注释行 … 函数体语句 … (return) MATLAB 7.X程序设计

  19. 说明: 1)函数说明行 2)H1行 3)help text 4)编写和修改记录 5)函数体 注意:1) 、2)、3)和4)是注释行 MATLAB 7.X程序设计

  20. 例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程序设计

  21. 例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程序设计

  22. 编写下述的命令文件中调用函数文件ffactor.m for i=1:10 fac(i)=ffactor(i); end fac MATLAB 7.X程序设计

  23. 3.6.2 全局变量和临时变量 1 全局变量 global X Y Z 2 局部变量 presistent X Y Z MATLAB 7.X程序设计

  24. 3.6.3 函数文件的应用 1 建立内联函数 建立内联函数的命令格式为: inline (EXPR) 功能:以字符串EXPR创建内联函数,如不指出变量,用x作为自变量。 已建立的内联函数,可通过formula函数查看, 格式为: formula (FUN) %其中FUN为已建立的内联函数 MATLAB 7.X程序设计

  25. 例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程序设计

  26. 2 函数的零值和极小值 函数的零值函数fzero的格式: X = fzero(FUN,X0) 功能:求函数FUN在X0附近的零点 函数的极小值可通过函数fminbnd求出,格式为: X=fminbnd(FUN,x1,x2) 功能:求FUN在 x1和x2之间的最小值。 MATLAB 7.X程序设计

  27. 例3-32求函数f(x)=sin(3x)在2附近 的零点。 f=inline('sin(3*x)'); X=fzero(f,2) MATLAB 7.X程序设计

  28. 例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程序设计

  29. 3.7 MATLAB 文件处理 两类文件:M文件和数据文件。 常用的文件的一般管理命令: 3.7.1 MATLAB 文件处理简介 what [目录名] 功能:显示目录内容 type文件名 功能:显示M-文件的内容 which 函数名 功能:显示函数所在的文件位置,给出路径。 MATLAB 7.X程序设计

  30. cd 目录名 功能:改变目录 path 路径名 功能:路径控制命令 dir 目录名 功能:显示目录内容命令 delete 文件名 功能:删除文件或对象命令 ! 功能:执行系统命令 MATLAB 7.X程序设计

  31. 3.7.2 数据文件的分类 数据文件有二进制格式文件和ASCII文本文件两种形式, 有四点区别: • 1)是否能在输出设备上显示 • 2)否能在不同的计算机间传送 • 3)是否需要大的存储空间 • 4)执行时间 MATLAB 7.X程序设计

  32. 3.7.3 文件打开和关闭 在读写数据文件之前,必须先用fopen函数打开文件,并指定允许对该文件进行的操作。 fopen函数的调用格式为: • Fid=fopen(文件名,打开方式) 其中fid用于存储文件句柄值,如果句柄值大于0,则说明文件打开成功。句柄值用来标识该数据文件,其他函数可以利用它对该数据文件进行操作。 • 文件名用字符串形式,表示待打开的数据文件。文件名用字符串形式,表示待打开方式有:r(读)、w(写)、a(追加)、r+(可读可写)等。 MATLAB 7.X程序设计

  33. 文件在进行完读、写等操作后,应及时关闭,以免数据丢失。文件在进行完读、写等操作后,应及时关闭,以免数据丢失。 • 关闭文件用fclose函数实现,调用格式为: sta=fclose(Fid) • 该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0;否则,返回-1。如果要关闭所有已打开的文件用fclose('all')。 MATLAB 7.X程序设计

  34. 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程序设计

  35. 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程序设计

  36. 例3-34建立一数据文件magic5.dat,用于存放5阶魔方阵。然后打开该文件,对大于5的元素求平方根,对小于等于5的元素求平方后存放在原数据的后面。例3-34建立一数据文件magic5.dat,用于存放5阶魔方阵。然后打开该文件,对大于5的元素求平方根,对小于等于5的元素求平方后存放在原数据的后面。 MATLAB 7.X程序设计

  37. 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程序设计

  38. 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程序设计

  39. 例3-35建立一数据文件cfs.dat,用于存放1-10平方和立方。例3-35建立一数据文件cfs.dat,用于存放1-10平方和立方。 • 例3-36建立一数据文件,用于存放若干名学生的姓名和成绩。 MATLAB 7.X程序设计

  40. 3.7.6文件位置和状态函数 文件位置和状态函数有: 测试文件的尾部函数 feof 文件指针的当前位置函数 ftell 设置文件的读写指针函数 frewind和fseek。 MATLAB 7.X程序设计

  41. Feof 函数的格式为: feof (FID) 功能:测试文件的尾部。其中FID为文件句柄,如果文件位置指针是该文件的尾部,返回1 ;否则返回0。 • ftell函数的格式为: POSITION = ftell (FID) 功能:返回文件指针的当前位置。返回值为从文件开始到指针当前位置的字节数。若返回值为-1表示为获取文件当前位置失败。 • frewind 函数的格式为: frewind (FID) 功能:设置文件位置指针为文件的开头。 MATLAB 7.X程序设计

  42. 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程序设计

  43. 例3-37演示函数数据文件的指定位置数据的读取过程。例3-37演示函数数据文件的指定位置数据的读取过程。 MATLAB 7.X程序设计

  44. 重点内容: • (1)常用的逻辑函数的格式和功能; • (2)流程控制语句的格式和执行过程; • (3)自定义函数文件的定义和调用方法; • (4)数据文件的建立和读写方法。 MATLAB 7.X程序设计

More Related