第三章 MATLAB程序设计基础 chapter 3: Foundation of matlab program design 数据及数据文件( Data and data file) 1.数据类型: Data mode)用于编程和计算的数据类型(表3-1) 数组: 字符数组( Character array) 数值数组( Numeric array 包括整形in8,uint8,intl6,uinl6,int32,uint32)单精度 ( signal),双精度(dube)( MATLAB最常用的变量类型), 稀疏( sparce)数组。、 Int-- Integrate Uint---Unsigned INteger data 单元数组 ell array) 结构数组 Structure array Java 类 (Java class) 函数句柄( Function handlel) 在工作空间浏览器中不同的数据类型有着不同的图标标识,(见 图3-2) 2.数据文件( Data file MATLAB支持的各种数据文件( Readable file formats of MATLAB)及其调用方法和返回值见(表3-2) (1)二进制数据文件:( Binary date file)以mat为扩展名。是标准的 MATLAB数据文件,以二进制编码形式存储。mat文件可以由 MATLAB提供的save和load命令直接存取。 (2)ASCⅡ码数据文件:( ASCI code data file)扩展名为t,dat 等,可以是在 MATLAB环境下存储的,也可能是其他软件的计算
第三章 MATLAB 程序设计基础 chapter 3: Foundation of MATLAB program design 一、 数据及数据文件(Data and Data file) 1. 数据类型:(Data mode) 用于编程和计算的数据类型(表 3—1) 数组: 字符数组(Character array)、 数值数组(Numeric array)— 包括整形(int8,uint8,int16,uint16,int32,uint32)单精度 (signal), 双精度(duble)(MATLAB 最常用的变量类型), 稀疏(sparce)数组。、 Int---Integrate. Uint---Unsigned INTeger data 单元数组(Cell array)、 结构数组(Structure array) Java 类(Java class) 函数句柄(Function handle) 在工作空间浏览器中不同的数据类型有着不同的图标标识,(见 图 3—2)_ 2. 数据文件(Data file) MATLAB 支持的 各种数 据文件 (Readable file formats of MATLAB)及其调用方法和返回值见(表 3—2) (1)二进制数据文件:(Binary date file) 以.mat 为扩展名。是标准的 MATLAB 数据文件,以二进制编码形式存储。.mat 文件可以由 MATLAB 提供的 save 和 load 命令直接存取。 (2)ASCⅡ码数据文件:(ASCⅡ code data file)扩展名为.txt, .dat 等, 可以是在 MATLAB 环境下存储的,也可能是其他软件的计算
结果,可以被 MATLAB调用,也可以用文本编辑器打开进行观察与 修改。可以用save和load命令进行读入和存取。 (3)图象文件: Graphics file)扩展名为bmp,jpg.fif等,用于图形图 象处理,可以用 imread和 amorite命令进行读入和存取 (4).声音文件:( Sound file)扩展名为wav,用 wavered和 wavwrite 命令进行读入和存取。 Readable file formats Data formats Command Returns MAT-MATLAB workspace load Variables in file Double DAT- Formatted text importdata Double DLM- Delimited tex dread Double array. TAB-Tab separated text dread Double array. Spreadsheet formats XLS- Excel worksheet mIsread Double array and cell array. WKI- Lotus 123 worksheet wklread Double array and cell array. Scientific data formats CDF- Common Data Format cdfread Cell array of cDF records FITS- Flexible Image Transport System fitsread Primary or extension table data HDF Hierarchical data Format hdfread hdf or hdf-eos data set Movie format Avi- Movie viread MATLAB movie Image formats TIFF-TIFF image Imre Truecolor, grayscale or indexed image(s). PNG -PNG image imread Truecolor, grayscale or indexed Image. HDF-HDF image imread Truecolor or indexed image(s). BMP-BMP image Truecolor or indexed image. JPEG-JPEG image imread Truecolor or grayscale image. GIF -GIF image imread Indexed image PCX -PCX image imread Indexed image ⅹwD- XWD image Imre Indexed image. CUR- Cursor image imread Indexed image. ICO-Icon image lmra Indexed image Ras- Sun raster image imread Truecolor or indexed PBM -PBM image imread Grayscale image
结果,可以被 MATLAB 调用,也可以用文本编辑器打开进行观察与 修改。 可以用 save 和 load 命令进行读入和存取。 (3).图象文件:(Graphics file) 扩展名为.bmp, .jpg .tif 等,用于图形图 象处理,可以用 imread 和 imwrite 命令进行读入和存取。 (4).声音文件: (Sound file) 扩展名为.wav ,用 waveread 和 wavwrite 命令进行读入和存取。 Readable file formats. Data formats Command Returns MAT- MATLAB workspace load Variables in file. CSV- Comma separated numbers csvread Double array. DAT- Formatted text importdata Double array. DLM- Delimited text dlmread Double array. TAB- Tab separated text dlmread Double array. Spreadsheet formats XLS - Excel worksheet xlsread Double array and cell array. WK1- Lotus 123 worksheet wk1read Double array and cell array. Scientific data formats CDF - Common Data Format cdfread Cell array of CDF records FITS- Flexible Image Transport System fitsread Primary or extension table data HDF - Hierarchical Data Format hdfread HDF or HDF-EOS data set Movie formats AVI - Movie aviread MATLAB movie. Image formats TIFF - TIFF image imread Truecolor, grayscale or indexed image(s). PNG - PNG image imread Truecolor, grayscale or indexed image. HDF - HDF image imread Truecolor or indexed image(s). BMP - BMP image imread Truecolor or indexed image. JPEG - JPEG image imread Truecolor or grayscale image. GIF - GIF image imread Indexed image. PCX - PCX image imread Indexed image. XWD - XWD image imread Indexed image. CUR - Cursor image imread Indexed image. ICO - Icon image imread Indexed image. RAS - Sun raster image imread Truecolor or indexed. PBM - PBM image imread Grayscale image
PGM - PGMimage imread Grayscale image. PPM -PPM image imread Truecolor image. Audio formats au -NeXT/Sun sound aurea Sound data and sample rate. SND- NeXT/Sun sound aurea Sound data and sample rate. WAV-Microsoft Wave sound wavread Sound data and sample rate 3.数据输入向导( Import wizard) File菜单下的工具 Import wizard用于将各种类型数据文件中 的数据导入工作空间,称为数据输入向导。在 Import对话框中输入 需要导入的数据文件名后出现 Import wizard窗口,可预观测将要导 入的数据、显示图象、播放声音等。 几种数据的导入: (1)mat数据文件( mat data file) 调入途径:Fie输入文件名,也可用 Browse打开文件浏览器选择 输入文件; Clipboard,数据从剪贴板中调入, 窗口内容:左侧,变量名称、大小、类型。右侧观察前10行10列信 Next:显示数据输入向导窗口第二页。 (2)ASCⅡ码数据文件:( ASC I code data file)输入ASCⅡ数 据文件名选择显示数据内容(data)或头文本内容( textdata) 选择Next下一页进行导入内容选择(通过钩选决定将何变量导入工 作空间)-按 Finish完成导入操作或按 Cancel终止数据的导入。 (3)图象数据文件:( Graphics data file)输入图形数据文件名一点 击 show image(可在图象上拖曳放大区域)--按 Finish完成数据 导入(或按 Cancel终止数据导入)。 (4)声音数据文件:( Sound data file)输入声音数据文件名-点击 Play Sound弹出一个显示声音数据波形的图形窗口(按 Play agine 按钮重新播放声音,按Done按钮关闭预观察窗口)-按 Finish完 成数据导入(或按 Cancel终止数据导入)
PGM - PGM image imread Grayscale image. PPM - PPM image imread Truecolor image. Audio formats AU - NeXT/Sun sound auread Sound data and sample rate. SND - NeXT/Sun sound auread Sound data and sample rate. WAV - Microsoft Wave sound wavread Sound data and sample rate. 3. 数据输入向导(Import wizard) File 菜单下的工具 Import Wizard 用于将各种类型数据文件中 的数据导入工作空间,称为数据输入向导。在 Import 对话框中输入 需要导入的数据文件名后出现 Import Wizard 窗口,可预观测将要导 入的数据、显示图象、播放声音等。 几种数据的导入: (1) mat 数据文件( mat data file) 调入途径: File 输入文件名,也可用 Browse 打开文件浏览器选择 输入文件;Clipboard,数据从剪贴板中调入。 窗口内容:左侧,变量名称、大小、类型。右侧观察前 10 行 10 列信 息。 Next: 显示数据输入向导窗口第二页。 (2)ASCⅡ码数据文件:(ASCⅡ code data file) 输入 ASCⅡ数 据文件名---选择显示数据内容 (data)或头文本内容(textdata)--- 选择 Next 下一页进行导入内容选择(通过钩选决定将何变量导入工 作空间)---- 按 Finish 完成导入操作或按 Cancel 终止数据的导入。 (3)图象数据文件:(Graphics data file) 输入图形数据文件名---点 击 show image(可在图象上拖曳放大区域)------按 Finish 完成数据 导入(或按 Cancel 终止数据导入)。 (4)声音数据文件:(Sound data file) 输入声音数据文件名---点击 Play Sound 弹出一个显示声音数据波形的图形窗口(按 Play agine 按钮重新播放声音,按 Done 按钮关闭预观察窗口)------按 Finish 完 成数据导入(或按 Cancel 终止数据导入)
(5)剪贴板的数据:( Clipboard data)需要导入已存放在系统剪贴 板中的数据,点数据输入向导窗口中的 Clipboard选项,-Next进入 下一页一按 Finish完成数据导入(或按 Cancel终止数据导入)。 二.M文件( M-file) MATLAB的两种工作方式:1,交互式命令操作方式 Interactive mode)通过命令窗口进行交互式操作;2,M文件( M-file)的编程 工作方式( programming mode) 1.M文件编程:( M-file program)可用普通文本编辑器编制 MATLAB文件,文件由纯ASCⅡ字符组成,确定文件名后加m扩展 名,称为M文件。 MATLAB提供了一个方便的编辑/调试器,功能较多,推荐使用。 建立M文件的一般步骤:( normal process of M- file creating) (1)打开文件编辑器:( Opening the file editor)最简单的方法是在 操作桌面的工具栏上选择新建文件键(NewM-Fle)或打开已 有文件键( Open File,也可以在命令窗口输入命令ed建立新文 件或输入 edit filename,打开名为 filename的M文件; (2)编写程序内容:( Compose the program content)编写新的文件 或修改已有文件; (3)保存文件:( save file)文件运行前必须完成保存操作,与一般 的文件编辑保存操作相同; (4)运行文件:( running file)在命令窗口输入文件名即可运行。如 要在编辑器中直接完成运行,可在编辑器的Deb吗g菜单下save and run选项,或按Run快捷键,最快捷的方法是直接按F5 键执行运行。 M文件有两种形式:命令文件( Script File)和函数文件( Function file 2.命令文件:( Script File)M文件中最简单的一种,是可用于自动重 复执行的一组 MATLAB命令和函数组合,不需输出输入参数,用M 文件可以调用工作空间已有的变量或创建新的变量。运行过程中产生
(5)剪贴板的数据:(Clipboard data) 需要导入已存放在系统剪贴 板中的数据,点数据输入向导窗口中的 Clipboard 选项,--Next 进入 下一页--按 Finish 完成数据导入(或按 Cancel 终止数据导入)。 二. M 文件(M-file) MATLAB 的两种工作方式:1,交互式命令操作方式(interactive mode)—通过命令窗口进行交互式操作;2,M 文件(M-file) 的编程 工作方式(programmingmode)。 1. M 文件编程:(M-file program)可用普通文本编辑器编制 MATLAB 文件,文件由纯 ASCⅡ字符组成,确定文件名后加.m 扩展 名,称为 M 文件。 MATLAB 提供了一个方便的编辑/调试器,功能较多,推荐使用。 建立 M 文件的一般步骤:(normal process of M- file creating) (1)打开文件编辑器:(Opening the file editor) 最简单的方法是在 操作桌面的工具栏上选择新建文件键(New M- File)或打开已 有文件键(Open File),也可以在命令窗口输入命令edit建立新文 件或输入 edit filename, 打开名为 filename 的 M 文件; (2)编写程序内容:(Compose the program content) 编写新的文件 或修改已有文件; (3)保存文件:(save file) 文件运行前必须完成保存操作,与一般 的文件编辑保存操作相同; (4)运行文件:(running file) 在命令窗口输入文件名即可运行。如 要在编辑器中直接完成运行,可在编辑器的 Debug 菜单下 save and run 选项,或按 Run 快捷键,最快捷的方法是直接按 F5 键执行运行。 M 文件有两种形式:命令文件(Script File)和函数文件(Function File) 2. 命令文件: (Script File) M 文件中最简单的一种,是可用于自动重 复执行的一组 MATLAB 命令和函数组合,不需输出输入参数,用 M 文件可以调用工作空间已有的变量或创建新的变量。运行过程中产生
的变量都是全局变量 建立一个命令文件等价于从命令窗口中顺序输入文件里的命令,程 序不需要预先定义,只要依次将命令编辑在命令文件中,再将程序保 存成为扩展名为m的M文件即可 运行命令文件时,只需在命令窗口键入文件名即可。 例:用三角函数计算画出花瓣图形。 theta=-pi: 0.01: pi rho(l, )=2 sin(5*theta). 2 %计算四种不同rho rho(2, )=cos(10*theta). 3; rho(3, sin(theta). 2 rho(4 )-=5*cos(3.5*theta). 3; for k= 1: 4 Subplot(2, 2, k), polar(theta, rho(k,: ) end 将程序保存成名为 petals的M文件并运行。 注 (1)“%“引导注释行,不予执行; (2)不需要用“end”最为M文件的结束标志; (3)若文件存放在自己的目录上,在运行文件前,应先将自己的目 录设置为当前工作目录。最简单方法:在当前目录浏览器中设 (4)运行后存放在工作空间的变量可以用工作空间浏览器查看。 3。函数文件( Function File) 如果M文件的第一个可执行行以 function开始,便是函数文件,每 一个函数文件定义一个函数。函数文件区别于命令文件之处在于命令 文件的变量在文件执行完成后保留在工作空间中而函数文件内定义 的变量只在函数文件内起作用,文件执行完后即被清除。 例:建立 average函数用于计算矢量中单元的平均值
的变量都是全局变量。 建立一个命令文件等价于从命令窗口中顺序输入文件里的命令,程 序不需要预先定义,只要依次将命令编辑在命令文件中,再将程序保 存成为扩展名为.m 的 M 文件即可。 运行命令文件时,只需在命令窗口键入文件名即可。 例:用三角函数计算画出花瓣图形。 theta=-pi:0.01:pi; rho(1,:) =2*sin(5*theta).^2; %计算四种不同 rho rho(2,:)=cos(10*theta).^3; rho(3,: )=sin(theta).^2; rho(4,: )=5*cos(3.5*theta).^3; for k = 1:4 Subplot(2,2,k), polar(theta,rho(k,: )) end 将程序保存成名为 petals 的 M 文件,并运行。 注: (1) ‘%‘引导注释行,不予执行; (2) 不需要用“end”最为 M 文件的结束标志; (3) 若文件存放在自己的目录上,在运行文件前,应先将自己的目 录设置为当前工作目录。最简单方法:在当前目录浏览器中设 置。 (4) 运行后存放在工作空间的变量可以用工作空间浏览器查看。 3。函数文件(Function File) 如果 M 文件的第一个可执行行以 function 开始,便是函数文件,每 一个函数文件定义一个函数。函数文件区别于命令文件之处在于命令 文件的变量在文件执行完成后保留在工作空间中,而函数文件内定义 的变量只在函数文件内起作用,文件执行完后即被清除。 例:建立 average 函数用于计算矢量中单元的平均值
function y=average(x) %oAVERAGE Mean of vector elements %AVERaGE(X), Where X is a vector, is the mean of vector element. %oNon-vector input results in an error Im, n]=size(x); f((m=1)(n=1)|(m=1&n==1) error( Input must be a vector) end y=sum(x)length(x); 将文件存盘,缺省状态下自动存储名为 average.m的函数。这样 只要接受一个输入参数便可计算返回一个输出参数,与其他 MATLAB函数一样使用。 例:用已建立的 average函数文件求1-99的平均值。 z=1:99; average(z) 函数文件的基本组成部分: (1)函数定义行:( the lines for function identification)由 function引导,并定义函数名、输入参数和输出参数,函数定义行必 须放在文件的第一个可执行上。可以设多个输入输出参数,如: function, y, z=sphere(theta, phi, rho) 也可以没有输出参数,如: function printresults(x) (1)H行: ines h) lookfor查询时使用的; (2)帮助文本:( Help text)建立在线查询信息; (3)函数体:( Function body)包含全部的用于完成计算及 给输出参数赋值等工作的语句 (4)注释:( explanatory notes)以%起始导行尾结束部分的 说明文字。可放置在程序中的任何部位。 2.局部变量与全局变量 Local variable and globalvariable
function y = average(x) %AVERAGE Mean of vector elements. %AVERAGE(X),Where X is a vector, is the mean of vector element. %Non-vector input results in an error. [m,n]=size(x); if(~((m==1) | (n==1)) | (m==1& n==1)) error(' Input must be a vector') end y=sum(x)/length(x); 将文件存盘,缺省状态下自动存储名为 average.m 的函数。这样 只要接受一个输入参数便可计算返回一个输出参数,与其他 MATLAB 函数一样使用。 例:用已建立的 average 函数文件求 1~99 的平均值。 z=1:99; average(z) 函数文件的基本组成部分: (1)函数定义行:(the lines for function identification) 由 function 引导,并定义函数名、输入参数和输出参数,函数定义行必 须放在文件的第一个可执行上。可以设多个输入输出参数, 如: function[x,y,z]=sphere(theta,phi,rho) 也可以没有输出参数,如: function printresults(x) (1)H1 行:(Lines H1)lookfor 查询时使用的; (2)帮助文本:(Help text) 建立在线查询信息; (3)函数体: (Function body) 包含全部的用于完成计算及 给输出参数赋值等工作的语句; (4)注释:(explanatory notes) 以%起始导行尾结束部分的 说明文字。可放置在程序中的任何部位。 2. 局部变量与全局变量 (Local variable and Global variable)
用 global就可以把一个变量定义为全局变量。 MATLAB中变量 名是区分大小写的,习惯上常将大写字母定为全局变量。如: globaIAbc 三.程序结构( Structure of program) 8种控制程序流程 (control flow statement)的语句:for; while,ir, switch, try, continue, break, return 1。循环语句( Loop statement) (1)for语句: forv=表达式 通常为一个矢量形式为:ms:n 语句体 end 例 n=10 orE:n x(i)=(i+1).^2 end 49162536496481100121 例:嵌套循环:注意与end的配对。 m=. fori=l fori=l:n a(j)=1/(计+j-1); end end format rat
用 global 就可以把一个变量定义为全局变量。MATLAB 中变量 名是区分大小写的,习惯上常将大写字母定为全局变量。如: global A B C 三. 程序结构(Structure of program) 8 种控制程序流程(control flow statement) 的语句:for, while, if, switch, try, continue, break, return 1。循环语句(Loop statement) (1) for 语句: for v=表达式 通常为一个矢量 形式为: m:s:n 语句体 end 例: n=10 for i=1:n x(i)=(i+1).^2; end x x = 4 9 16 25 36 49 64 81 100 121 例:嵌套循环:注意与 end 的配对。 m=3; n=4; for i=1:m for j=1:n a(i,j)=1/(i+j-1); end end format rat a a =
12 1/3 1/4 12 1/3 1/4 1/5 1/3 1/4 1/5 1/6 例:运用非1步长,产生0-20以内的偶数 fori=0:2:20 (i/2+1)=i d 02468101214161820 (2). While语句:为条件循环语句。循环不确定次数,只要表达式 的结果非零,语句体就重复执行,直到循环条件不成立为止。 While表达式 语句体 en 例: while循环,求解n!达到100位数的第一个n是多少。 n while prod(l: n<lelon n=n+1; en 2.条件语句( Selection statement) (1)if-end语句 (simple if statement) 表达式 语句体 end (2) if-else-end语句
1 1/2 1/3 1/4 1/2 1/3 1/4 1/5 1/3 1/4 1/5 1/6 例: 运用非 1 步长,产生 0-20 以内的偶数 for i=0:2:20 a(i/2+1)=i ; end a a = 0 2 4 6 8 10 12 14 16 18 20 (2).While 语句:为条件循环语句。循环不确定次数,只要表达式 的结果非零,语句体就重复执行,直到循环条件不成立为止。 While 表达式 语句体 end 例:while 循环,求解 n!达到 100 位数的第一个 n 是多少。 n=1; while prod(1:n)<1e100 n=n+1; end n n = 70 2. 条件语句(Selection statement) (1) if—end 语句(simple if statement) if 表达式 语句体 end (2)if—else--end 语句
if表达式 语句体1 else 语句体2 end 当计算的表达式结果为真时执行语句体1,结果为假时执行语 句体2。 例:判断学生是否通过学业 if((attendance>=0.90)&(grade>=60)) pass=l; els fail end (1) if--elseif-end语句 if表达式1 语句体1; elseif表达式2 语句体2 ese 语句体3; end 例:用色彩区分数据点的范围。 n=100; x=1:n y=randn(l, n); hold on fori=l:n y()<-
if 表达式 语句体 1; else 语句体 2: end 当计算的表达式结果为真时执行语句体 1,结果为假时执行语 句体 2。 例:判断学生是否通过学业。 if ((attendance>=0.90) & (grade>=60)) pass=1; else fail=1; end (1)if—elseif—end 语句 if 表达式 1 语句体 1; elseif 表达式 2 语句体 2; else 语句体 3; end 例: 用色彩区分数据点的范围。 n=100; x=1:n; y=randn(1,n); hold on for i=1:n if y(i)<-1
plot(x(i)y(i),”g") elseif y(i)>=-1 y(i) plot(x(i)y(i),’ob") elseif y(i>=l plot(x(i)y(i),’xr) d en hold off (3)分支语句: switch-case-end 通过对某个变量值的比较做各种不同的执行选择。 形式: switch表达式(数字或字符串) case数字或字符串1 语句体1; case数字或字符串2 语句体2 otherwise 语句体n end 例:检查 input num的数值 switch input num dip( negative one);%当 input num=1时显示 case 0 disp(zero); %当 input num=0时显示 case 1 disp( positive one);%当 input num=1时显示
plot(x(i),y(i),'*g') elseif y(i)>=-1 & y(i)=1 plot(x(i),y(i),'xr') end end hold off (3) 分支语句:switch—case—end 通过对某个变量值的比较做各种不同的执行选择。 形式: switch 表达式(数字或字符串) case 数字或字符串 1 语句体 1; case 数字或字符串 2 语句体 2; …… otherwise 语句体 n; end 例:检查 input_num 的数值. switch input_num case -1 disp(‘negative one’); %当 input_num=-1 时显示 case 0 disp(‘zero’); %当 input_num= 0 时显示 case 1 disp(‘positive one’); %当 input_num= 1 时显示