第二章Matlab程序设计_第1页
第二章Matlab程序设计_第2页
第二章Matlab程序设计_第3页
第二章Matlab程序设计_第4页
第二章Matlab程序设计_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章 程序设计声明和致谢 课件取自网络电子课件,只进行了很少的编辑和加工,对不知名的网络电子课件作者表示感谢!前言o现代大地测量领域的大型解算软件,如GPS和InSAR解算软件等,一般按以下方式完成解算:n数据文件编辑n参数文件配置n软件解算并保存结果到文件n读取解算结果文件进行分析和可视化显示(绘图)o文件操作是大型程序设计中很重要的一个内容,绘图是结果表达的重要手段提纲提纲 o1.文件操作n1.1 文件的打开与关闭n1.2 文件的读写操作n1.3 数据文件定位写操作o2. 程序设计n2.1 M文件n2.2 函数文件n2.3 程序设计n2.4 程序调试Matlab环境下的文件与其它系统一样

2、,也有二类文件组成,一是文件,又称M文件,另一类是数据文件。系统除提供了文件的一般管理功能外,还提供了对数据文件进行操作的特殊功能函数。数据文件的打开与关闭数据文件的打开与关闭Matlab提供了对数据文件建立、打开、读、写以及关闭等一系列函数,数据文件一般存放在磁盘等介质上,用文件名标识,系统对文件名没有特殊要求。文件数据格式有二种形式,一是二进制格式文件,二是ASCII文本文件,系统对这两类文件提供了不同的读写功能函数。打开文件打开文件在读写文件之前,必须先用fopen命令打开一个文件,并指定允许对该文件进行的操作。文件操作结束后,应及时关闭文件,以免数据的丢失或误修改。fopen函数格式为

3、:Fid= fopen(filename,permission)打开文件打开文件 其中filename为文件名,permission为文件格式,可以是下列格式之一:or 打开文件,读数据,文件必须存在。ow 打开文件,写数据,若文件不存在,系统会自动建立。oa 打开文件,在文件末尾添加数据。or+ 打开文件,可以读和写数据,文件必须存在。ow+ 打开文件,供读与写数据用,会删除以前数据。oa+ 打开文件,供读与添加数据用。oW 打开文件供写数据用,无自动刷新功能。oA 打开文件供添加数据用,无自动刷新功能。打开文件打开文件例如:打开一个名为std.dat的数据文件并进行读操作,其命令格式为:F

4、id=fopen( std.dat, r )上述打开格式均为二进制格式,如果想用ASCII文本格式,则必须在格式字符串中加上字符t,例如用r t表示以ASCII格式打开供读操作的数据文件。关闭文件关闭文件文件在进行完读、写等操作后,应及时关闭,以保证文件的安全可靠。关闭文件命令格式为:Sta=fclose(Fid) 关闭Fid所表示的文件Sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回1。提纲提纲 o1.文件操作n1.1 文件的打开与关闭n1.2 文件的读写操作n1.3 数据文件定位写操作o2. 程序设计n2.1 M文件n2.2 函数文件n2.3 程序设计n2.4 程序调试读二进

5、制数据文件读二进制数据文件fread 读二进制数据文件。格式为:A,COUNT=fread(Fid,size,precision)其中A为数据矩阵,COUNT返回所读取的数据元素个数。size为可选项,若不选用则读取整个文件内容,若选用它的值可以是下列值:读二进制数据文件读二进制数据文件N 读取 N个元素到一个列向量。inf 读取整个文件。M,N 读数据到MN的矩阵中,数据按列存放。读二进制数据文件读二进制数据文件precision用于控制所读数据的精度格式。缺省格式为uchar,即无符号字符格式。例如:Fid=fopen(std.dat, r); A=fread(Fid, 100, long

6、); Sta=fclose(fid);以读数据方式打开数据文件std.dat,并按长整型数据格式读取文件的前100个数据放入向量A,然后关闭文件。写二进制数据文件写二进制数据文件fwrite 函数以二进制格式向数据文件写数据,其格式为:COUNT=fwrite (Fid, A, precision)例如:Fid=fopen(magic5.bin, wb);fwrite(Fid, magic, int32);上述语句将矩阵magic中的数据写入文件magic5.bin中,数据格式为32位整型二进制格式。写二进制数据文件写二进制数据文件【例例】建立一数据文件test.dat,用于存放矩阵A的数据。

7、已知 A=-0.6515 -0.2727 -0.4354 -0.3190 -0.9047 -0.7534 -0.4567 -0.3212 -0.4132 -0.3583 -0.9264 -0.8173 -0.7823 -0.3265 -0.0631 -0.1735 -0.7373 -0.0972 -0.3267 -0.6298 -0.4768 -0.6773 -0.6574 -0.1923 -0.4389写二进制数据文件写二进制数据文件Fid=fopen(test.dat, w)cnt=fwrite(Fid, A, float)fclose(Fid)程序段将矩阵A的数据以二进制浮点数格式写入文

8、件test.dat中。Fid=fopen(test.dat, r)B,cnt=fread(Fid, 5,inf, float)fclose(Fid)读取文件test.dat的内容。读文本文件读文本文件fscanf 读ASCII文本文件A,COUNT= fscanf (Fid, format, size)其中A为数据矩阵,用以存放读取的数据,COUNT返回所读取的数据元素个数。format用以控制读取的数据格式,由%加上格式符组成,格式符为:d, i, o, u, x, e, f, g, s, c与. . . 读文本文件读文本文件 例如:s=fscanf(fid, %s) 读取一个字符串a=fs

9、canf(fid, %5d) 读取5位数的整数b= fscanf(fid, %6.2d) 读取浮点数写文本文件写文本文件fprintf 写ASCII数据文件,其格式为: COUNT= fprintf(Fid, format, A,)其中A为要写入文件的数据矩阵,先按format格式化数据矩阵A,后写入到Fid所指定的文件。例如:x = 0: 0.1: 1; y = x; exp(x); Fid = fopen(exp.txt, w); fprintf(Fid,%6.2f %12.8fn,y); fclose(Fid);提纲提纲 o1.文件操作n1.1 文件的打开与关闭n1.2 文件的读写操作n

10、1.3 数据文件定位写操作o2. 程序设计n2.1 M文件n2.2 函数文件n2.3 程序设计n2.4 程序调试文件指针移动fseek函数移动文件位置指针,格式为:status=fseek(Fid, offset, origin) 其中Fid为文件句柄,offset表示位置指针相对移动的字节数,若为正整数表示向文件尾方向移动,若为负整数表示向文件头方向移动,origin表示位置指针移动的参照位置,它的取值有三种可能:cof 表示文件的当前位置,bof 表示文件的开始位置,eof 表示文件的结束位置。若定位成功status返回值为0,否则返回值为1。文件指针的当前位置ftell函数返回文件指针的

11、当前位置。其格式为: position=ftell (Fid)返回值为从文件开始到指针当前位置的字节数。若返回值为1表示获取文件当前位置失败。【例例】下述程序段说明了函数fseek和ftell的使用。 a=1: 5; Fid=fopen(fdat.bin, w); 以写方式打开文件fdat.bin fwrite(Fid, a, int16 ); 将a中的5个数据元素分别以双字节整型格式写入 status=fclose(Fid); 文件fdat.bin Fid=fopen(fdat.bin, r); 以读数据方式打开文件status=fseek(Fid, 6, bof); 将文件数据指针从开始位

12、置向尾部移动6个字节four=fread(Fid, 1, int16); 读取当前数据,即第4个数据,并移动指针到下一个数据position=ftell(Fid); eight=fread(Fid, 1, int16); 读取第5个数据status=fclose(Fid);提纲提纲 o1.文件操作n1.1 文件的打开与关闭n1.2 文件的读写操作n1.3 数据文件定位写操作o2. 程序设计n2.1 M文件n2.2 函数文件n2.3 程序设计n2.4 程序调试MATLAB有两种工作方式:交互式的命令行工作方式M文件的程序工作方式o用MATLAB语言编写的程序,称为M文件。o M文件可以根据调用方

13、式的不同分为两类:命令文件(Script File)和函数文件(Function File)。n命令文件:不返回输出参数,可以执行。n函数文件:可返回输出参数,不能执行,只能调用。M文件o建立新的M文件: 从MATLAB命令窗口的File菜单中选择New菜单项,再选择M-file命令。M文件的建立与编辑o编辑已有的M文件: 从MATLAB命令窗口的Flie菜单中选择Open M-file命令。o将需要运行的命令编辑到一个命令文件中,然后在MATLAB命令窗口输入该命令文件的名字,就会顺序执行命令文件中的命令。【例】 建立一个命令文件将变量a,b的值互换。 e31m文件: a=1:9; b=11

14、,12,13;14,15,16;17,18,19; c=a;a=b;b=c; a b 在MATLAB的命令窗口中输入e31,将会执行该命令文件。命令文件【例】建立命令文件将华氏温度建立命令文件将华氏温度f转换为摄氏温度转换为摄氏温度c 。f2c.m文件: clear; %清除工作空间中的变量f=input(Input Fahrenheit temperature:);c=5*(f-32)/9在MATLAB的命令窗口中输入f2c,将会执行该命令文件,执行情况为:Input Fahrenheit temperature:73c = 22.7778命令文件提纲提纲 o1.文件操作n1.1 文件的打开

15、与关闭n1.2 文件的读写操作n1.3 数据文件定位写操作o2. 程序设计n2.1 M文件n2.2 函数文件n2.3 程序设计n2.4 程序调试o函数文件是另一种形式的M文件,每一个函数文件都定义一个函数。事实上,MATLAB提供的标准函数大部分都是由函数文件定义的。函数文件函数文件由function语句引导,其格式为: function 输出形参表=函数名(输入形参表) 注释说明部分 函数体注:其中函数名的命名规则与变量名相同。输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于1个时,则应该用方括号括起来。函数文件格式 【例例】 编写函数文件求半径为编写函数文件求半径为r的圆

16、的面积和周长。的圆的面积和周长。 函数文件如下: function s,p=fcircle(r)%CIRCLE calculate the area and perimeter of a circle of radii r%r 圆半径%s 圆面积%p 圆周长%2004年7月30日编s=pi*r*r;p=2*pi*r;函数调用的一般格式是:函数调用的一般格式是: 输出实参表输出实参表=函数名函数名(输入实参表输入实参表) 要注意的是,函数调用时各实参出现的顺序、个数,要注意的是,函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错。应与函数定义时形参的顺序、个数一致,

17、否则会出错。函数调用时,先将实参传递给相应的形参,从而实现函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。参数传递,然后再执行函数的功能。 s,p=fcircle(5)s = 78.5398p = 31.4159函数调用o 在MATLAB中,全局变量用命令global定义。函数文件的内部变量是局部的,与其他函数文件及MATLAB工作空间相互隔离。但是,如果在若干函数中,都把某一变量定义为全局变量,那么这些函数将公用这一个变量。全局变量的作用域是整个MATLAB工作空间,即全程有效。所有的函数都可以对它进行存取和修改。因此,定义全局变量是函数间传递信息的一种手段。局

18、部变量与全局变量【例】 全局变量应用示例先建立函数文件wadd.m,该函数将输入的参数加权相加。function f=wadd(x,y) %add two variable global ALPHA BETA f=ALPHA*x+BETA*y;在命令窗口中输入: global ALPHA BETA ALPHA=1; BETA=2; s=wadd(1,2)输出为: s = 5局部变量与全局变量oMATLAB在函数调用上有一个与众不同之处:函数所传递参数数目的可调性。凭借这一点,一个函数可完成多种功能。o 在调用函数时,MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输

19、入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。函数所传递参数的可调性【例】 nargin用法示例函数文件examp.m: function fout=charray(a,b,c) if nargin=1 fout=a; elseif nargin=2 fout=a+b; elseif nargin=3 fout=(a*b*c)/2; end命令文件mydemo.m: x=1:3;y=1;2;3; examp(x) examp(x,y) examp(x,y,3)执行mydemo.m后的输出是: ans =

20、1 2 3 ans = 2 4 6 ans = 21提纲提纲 o1.文件操作n1.1 文件的打开与关闭n1.2 文件的读写操作n1.3 数据文件定位写操作o2. 程序设计n2.1 M文件n2.2 函数文件n2.3 程序设计n2.4 程序调试程序设计程序设计 o输入数据组织方式o输出设计o函数设计o主程序设计输入数据组织方式o按文件方式组织,ASCII或二进制数据文件n采用load, fread, textread, fscanf 等读入程序o在命令文件中使用赋值语句o用“input”即时赋值o数据组织的好坏,会极大影响程序编写的方便程度。输出设计o按文件方式输出结果,ASCII或二进制数据文件

21、n采用fprintf, fwrite等写入文件o在命令窗口输出函数设计o把功能相对单一的程序块,设计成函数n功能单一n输入、输出相对固定主程序设计o顺序结构o选择结构o循环结构按script的顺序执行:【例】 建立一个命令文件将变量a,b的值互换。 e31m文件: a=1:9; b=11,12,13;14,15,16;17,18,19; c=a; a=b; b=c; a b主程序设计顺序结构程序的暂停程序的暂停 暂停程序的执行可以使用pause函数,其调用格式为: pause(延迟秒数) 如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。 若要强行中止程序的运

22、行可使用Ctrl+C命令。主程序设计顺序结构选择结构的语句有if语句和switch语句。o1 if语句语句 格式一: if 条件 语句组 end格式二: if 条件 语句组1 else 语句组2 end主程序设计选择结构格式三: if 条件1 语句组1 elseif 条件2 语句组2 elseif 条件m 语句组m else 语句组m+1 end主程序设计选择结构【例】 输入三角形的三条边,求面积。 A=input(请输入三角形的三条边:); if A(1)+A(2)A(3) & A(1)+A(3)A(2) & A(2)+A(3)A(1) p=(A(1)+A(2)+A(3)/2; s=sqrt

23、(p*(p-A(1)*(p-A(2)*(p-A(3); disp(s); else disp(不能构成一个三角形。) end运行: 请输入三角形的三条边:4 5 6 9.9216主程序设计选择结构【例】 输入一个字符,若为大写字母,则输出其后继字符,若为小写字母,则输出其前导字符,若为其他字符则原样输出。 c=input(Please input a letter ,s); if c=A & c=a& c=z disp(setstr(abs(c)-1); else disp(c); end主程序设计选择结构2 switch语句语句oswitch语句根据变量或表达式的取值不同,分别执行不同的语句

24、。其格式为: switch 表达式 case 值1 语句组1 case 值2语句组2 case 值m 语句组m otherwise 语句组m+1 end主程序设计选择结构【例】 根据变量 num 的值来决定显示的内容。 num=input(请输入一个数); switch num case -1 disp(I am a teacher.); case 0 disp(I am a student.); case 1 disp(You are a teacher.); otherwise disp(You are a student.); end主程序设计选择结构实现循环结构的语句:for语句和while语句。o1 for语句:语句:格式: for 循环变量=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论