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

下载本文档

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

文档简介

1、5.6 文件的读写5.6.1 数据文件的分类分为:ASCII码文件,二进制文件有四点区别:1)是否能在输出设备上显示2)否能在不同的计算机间传送3)是否需要大的存储空间4)执行时间5.6.2 文件的打开和关闭1. 文件的打开在读写数据文件之前,必须先用fopen函数打开文件,并指定对文件进行的读、写操作。格式:fid=fopenfid=fopen(文件名,打开方式)(文件名,打开方式)其中,fid用于存储文件句柄值,如果句柄值大于0,则说明文件打开成功。句柄值用来唯一标识该数据文件,其他函数可以利用它对该数据文件进行操作文件名用字符串形式,表示待打开的数据文件;打开方式也用字符串形式,有: r

2、(读)、 w(写)、 a(追加)、 r+ (可读可写)等。 2. 文件的关闭文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数实现,调用格式为 sta=fclosesta=fclose(fidfid)该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0;否则,返回-1。如果要关闭所有已打开的文件用fclose(all)。 .3 二进制二进制I/OI/O函数函数打开二进制数据文件后,应用fwrite 函数按照指定的数据精度将矩阵中的元素写入到文件中;用fread函数读取二进制文件的数据,并将数据存入矩阵。 fwrite函

3、数的调用格式为:COUNT=fwrite(fid,A,precision)COUNT=fwrite(fid,A,precision)其中,COUNT返回所写的数据元素个数,fid为文件句柄,A用来存放写入文件的数据,precision用于控制所写数据的精度,常用的数据精度为:char、unchar、int、long、float、double等。缺省数据精度为unchar,即无符号字符格式。 fread函数的调用格式为:A,count=fread(fid,size,precision)A,count=fread(fid,size,precision)其中,A 用来存放读取的数据,COUNT返回所

4、读取的数据元素个数,fid 为文件句柄,size为可选项,若不选用则读取整个文件内容,若选用,则它的值可以是下列值:N 读取N个元素到一个列向量Inf 读取整个文件 M,N 读数据到M*N的矩阵中,数据按列存放precision 代表数据精度,常用的数据精度为char,unchar,int,long,float,double等。缺省数据精度为unchar,即无符号字符格式。 例3-34: 建立一数据文件magic5.dat,用于存放5阶魔方阵。然后打开该文件,对大于5的元素求平方根,对小于等于5的元素求平方后存放在原数据的后面。5.6.4 格式化I/O函数打开格式化数据文件后,应用fprint

5、f函数可以将数据按指定格式写入到文本文件中;应用fscanf 函数读取文本文件的内容,并按指定格式存入矩阵fprintf函数调用格式为:COUNT = fprintf (FID,FORMAT,A)COUNT = fprintf (FID,FORMAT,A)其中,COUNT返回所写入的数据元素个数, A存放要写入文件的数据。先按format指定的格式将数据矩阵A格式化,然后写入到Fid所指定的文件。format可以控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。fscanf

6、 函数调用格式为:A,COUNT = fscanf(Fid,FORMAT,SIZE)A,COUNT = fscanf(Fid,FORMAT,SIZE)其中,A 用来存放读取的数据,COUNT 返回所读取的数据元素个数。Fid 为文件句柄。Format 可以控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。size 为可选项,若不选用则读取整个文件内容,若选用则它的值可以是下列值:N 读取N个元素到一个列向量Inf 读取整个文件M,N 读数据到 M*N的矩阵中,数据按列存放。

7、 例3-35:建立一数据文件cfs.dat,用于存放1-10平方和立方。例3-36:建立一数据文件,用于存放若干名学生的姓名和成绩。5.6.5 文件位置和状态函数文件位置和状态函数有feof, ftell, frewind和fseek1. 测试文件尾部的函数(feof) 格式:feof (FID)功能:测试文件的尾部。其中FID为文件句柄,如果文件位置指针是该文件的尾部,返回1 ;否则返回0。2. 返回文件指针当前位置的函数(ftell)格式:POSITION = ftell (FID)功能:返回文件指针的当前位置。返回值为从文件开始到指针当前位置的字节数。若返回值为-1表示为获取文件当前位置

8、失败。3.设置文件读写指针的函数(frewind和fseek)格式:STATUS = fseek (FID, OFFSET, ORIGIN) STATUS = fseek (FID, OFFSET, ORIGIN) 功能:以指定的OFFSET相对于ORIGIN重新定位文件位置指针。其中FID为文件句柄,OFFSET表示位置指针相对移动的字节数,它的取值有3种可能:若为正整数表示向文件尾方向移动;若为负数表示向文件头方向移动;若为零表示不移动。ORIGIN 表示位置指针移动的参照位置,它的取值有3种可能:cof或0 表示文件的当前位置,bof或-1表示文件的开始位置,eof或1 表示文件的结束位

9、置。若成功,STATUS返回值为0,否则返回值为-1 , 这 时 可 用 f e r r o r 函 数 获 取 出 错 信 息 。 如 语 句fseek(fid,0,-1)的功能是设置文件指针为文件的开头。格式:frewind (FID) frewind (FID) 功能:设置文件位置指针为文件的开头。例3-37:演示数据文件的指定位置数据的读取方法。5.7 程序设计的辅助函数在Matlab语言的程序设计中,有几组辅助函数可用于支持文件的编辑,包括:数据检查函数、容错函数、串演算函数、跨空间变量传递函数、内存管理函数、目录与文件管理函数以及日期与时间函数等对这些函数的合理使用可以增强函数的“

10、鲁棒性”或丰富函数功能。5.7.1 数据检查函数1.1. existexist函数函数exist(A) 检查A是否为已存在的变量名、函数名、文件名、目录名或类名。如果不存在返回0, 如果A是变量名返回1,具体可查看帮助。exist(A, var) 判断是否存在变量Aexist(A, builtin) 判断是否存在Matlab内建函数Aexist(A, file) 判断是否存在文件或目录Aexist(A, dir) 判断是否存在目录Aexist(A, class) 判断是否存在类名为A的类2. 获取数据维数、大小等信息的函数包括ndims, size, numel, length 等3. 特殊数

11、据判断函数isempty(A) 如果A是空数组,则返回1,否则返回0isscalar(A) 如果A是1x1 的矩阵(标量),则返回1;否则返回0isvector(A) 如果A是行向量或列向量,则返回1;否则返回0特殊数据判断函数(cont.)X=isinf(A) 判断数组A的元素是否为无穷大,返回一个与A同型的数组。如果A(i)是无穷大, 则X(i)取1;否则,X(i)取0X=isnan(A) 判断数组A的元素是否为NaN,返回一个与A同型的数组。如果A(i)是NaN,则X(i)取1,否则X(i)取0。X=isfinite(A) 判断数组A的元素是否为有限值,返回一个与A同型的数组。如果A(i

12、)是有限值,则X(i)取1;否则X(i)取0例 当A=pi NaN Inf -Inf时,分析isinf(A),isnan(A)和isfinite(A)的运算结果4. 数据类型的获取与判断函数数据类型判断函数可以对数组的类型做出判断,如逻辑数组、稀疏数组、实数数组、标量数组、向量数组等,还可以判断数组中数值型数据的类型,如数值型的数据类型有双精度型(默认)、单精度、带符号整数型(int8,int16,int32,int64)和无符号整数型(uint8,uint16,uint32,uint64)常用的数据类型判断函数有:class(X) 返回变量X的类型名(以字符串形式)。 常用的数据类型判断函数

13、islogical(X) 如果X是逻辑数组,则返回1;否则返回0ischar(s) 如果s是字符数组,则返回1;否则返回0isnumeric(A) 如果A是数值数组,则返回1;否则返回0isreal(A) 如果A是不带虚部的实数组,则返回1;否则返回0isinteger(A) 如果A是整数型数值数组,则返回1;否则返回0isfloat(A) 如果A是浮点型数值数组,则返回1;否则返回0常用的数据类型判断函数(cont.)issparse(S) 如果S是稀疏数组,则返回1;否则返回0isstruct(S) 如果S是构架数组,返回1;否则返回0iscell(C) 如果C是元胞数组,返回1;否则返回

14、0iscellstr(X) 若X是由字符串组成的元胞数组,则返回1;否则返回0isa函数格式:isa(x, classname), classname是数据类型名或类名。 功能:如果x是由classname指定的数据类型,则返回1;否则返回0可能的数据类型: double,logical,char,single,float,int8,int16 , int32 , int64 ,uint8,uint16,uint32 ,uint64,integer,numeric,cell , struct, function_handle 或任何 MATLAB或 Java 类的类名。isa函数举例例 输入以

15、下命令,观察执行结果a=eye(3); isa(a,logical),isa(a,integer),isa(a, single),isa(a,double),isa(a, float)b=int8(a); isa(b,integer), isa(b,int8)c=logical(a); isa(c,logical)S.name=Zhang San;S.age=38;isa(S, struct), isa(S,char), isa(S.name,char)C=Zhang, Wang, Li, Zhao;isa(C, cell),iscellstr(C),isa(C, char),isa(C1,

16、char)isfield函数格式:isfield(x, name)功能:判断由字符串name指定的标记符是否为架构数组x的域名。如果是,返回1,否则返回0。例如:clear; S=struct(name,Zhang San,scores,70 80 90)isfield(S, name)isfield(S, scores)isfield(S, age)这些函数在什么函数库中?elmat(基本矩阵和矩阵操作),elfun(基本数学函数)strfun(字符串函数)datatypes(数据类型函数)sparfun(稀疏矩阵)5.7.2 容错函数)error函数格式:error(错误信息)程序执行到e

17、rror语句时,将显示错误信息并终止程序的运行。)warning函数warning的用法类似于函数error,不同的是:warning并不终止程序的执行,而仅给出警告信息。其它有关的函数:lasterr(给出上一个错误信息), lastwarn(给出上一个警告信息)。3) try-catch结构:格式:try 语句组catch 语句组end在执行以上程序时,将先执行语句组,如果执行语句组时出错,则将执行语句组(如果执行语句组时也出错,将终止程序的执行)。5.7.3 串演算函数1. eval1. eval函数函数格式:eval(s) s是字符串,其内容可以是任何合法的指令、表达式、语句或M文件名

18、。功能: 将字符串s的内容作为命令或者表达式进行执行或运算。y=eval(s) 将字符串s的内容作为表达式进行计算,将结果赋值给y。y1,y2,=eval(s) 若字符串s的内容是“某函数名(输入实参表)”,则将“y1,y2,”作为输出实参执行该函数调用。eval函数用法示例例1计算表达式 clear; t=pi; expr=t/2, t*2, sin(t) ; y=eval(expr) 例2 执行语句串clear; t=pi; eval(theta=t/2, y=sin(theta); who例3 生成1到12阶魔方矩阵,分别存入矩阵M1,,M12for n = 1:12 eval(M nu

19、m2str(n) = magic(n);end 例4 编写命令文件MyCal.m,计算由用户输入的表达式。程序如下:clear; X=1:100; while 1 ExpStr=input(expression=,s); if strcmpi(ExpStr, end) break; end eval(ExpStr)end例5 编写程序,由用户输入任意级数的项数和通项(第n项)表达式字符串,求前K项的和。程序如下:clearInitVarStr=input(输入变量初始化命令=,s); eval(InitVarStr) while 1 N=input(输入项数); if isempty(N) |

20、 N, s); if isempty(nthTermStr) , break, end S=0; for n=1:N S=S+eval(nthTermStr); end display(The sum is , num2str(S);end将以上程序保存到命令文件中, 然后运行。例如:要计算 的和,(要求输入初始化命令时回车即可)项数N和通项表达式分别输入10和n,则得到和为55; 要计算x=2,N=10时 的值,可以先输入初始化命令x=2然后,项数输入10,第n项的表达式输入xn/prod(1:n)101nnNnnnx1!例6 编写命令文件MyPlot, 用户输入任意一个 (一元)函数名字符

21、串,绘制其在0,2*pi内的图形程序如下:N=101;X=linspace(0,2*pi, N);while 1 STR=input(input function name, s) if isempty(STR) break; end Y=eval(STR, (X); plot(X,Y)end 对上述程序进行修改,允许用户修改绘图区间和取点数。程序如下:N=101; X=linspace(0,2*pi, N);while 1 STR=input(input function name or range of X) if isempty(STR), break, end if ischar(ST

22、R) Y=eval(STR, (X); plot(X,Y) elseif isvector(STR) switch length(STR) case 1, if STR2, break, end, N=STR case 2, if STR(1)1 ,N=STR(3), end if STR(1),利用命令操作方式来实现程序调试。5.8.2 MATLAB调试菜单1控制单步运行(1)Step:单步运行。每单击一次,程序运行一次,但不进入函数。(2)Step In:单步运行。遇到函数时进入函数内,仍单步运行。(3)Step Out:停止单步运行。如果是在函数中,跳出函数;如果不在函数中,直接运行到下

23、一个断点处。(4)Go Until Cursor:直接运行到光标所在的位置。2断点操作(1)Set/Clear Breakpoint:设置或清除断点。(2)Set/Modify Conditional Breakpoint:设置或修改条件断点。条件断点可以使程序执行到满足一定条件时停止。(3)Enable/Disable Breakpoint:使断点有效或无效(4)Clear Breakpoints in All Files:清除所有断点。(5)Stop If Errors/Warnings:在程序执行出现错误或警告时,停止程序运行,进入调试状态,不包括trycatch语句中的错误。【例2.1

24、82.18】在如图2.7所示的编辑窗口中,有一个求两个数的最小公倍数的程序commulti.m,试设置断点来控制程序执行。5.9 程序性能分析与优化5.9.1 程序性能分析调试器只负责M文件中语法错误和运行错误的定位,而Profiler性能评估器、tic函数和toc函数能分析程序各环节的耗时情况,分析报告能帮助用户寻找影响程序运行速度的“瓶颈”所在,以便于进行程序优化。通过函数文件性能评估器(Profiler)用户可以很方便地了解程序执行过程中各函数及函数中的每条语句所耗费的时间,从而有针对性地改进程序,提高程序的运行效率。在MATLAB主窗口的“Desktop”菜单中选择“Profiler”命令或在M文件编辑器

温馨提示

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

评论

0/150

提交评论