1、数学软件 Matlab 文件操作Matlab数据类型数据类型v Matlab 数据类型的最大特点是每一种类型都是以数据类型的最大特点是每一种类型都是以数组为基础,数组为基础,Matlab事实上把每种类型的数据都作为事实上把每种类型的数据都作为数组来处理。数组来处理。v Matlab 常用的数据类型有:常用的数据类型有:numeric(数值型)(数值型)char(字符型)(字符型)logical(逻辑型)(逻辑型)cell(单元型)(单元型)struct(结构)(结构)Matlab数据类型数据类型数组数组Matlab7.1中的数据类型中的数据类型表表逻辑型逻辑型字符型字符型单元型单元型函函数数句
2、句柄柄函数句柄函数句柄n语法结构语法结构nhandle=functionnamen函数句柄定义函数句柄定义f(x)=x2,可以写为,可以写为f=(x)(x.2);f(100)f1=(x,y)(x.2+y.2);则则f1(2,3)Matlab内置的内置的funm函数其实类似函数句柄格式函数其实类似函数句柄格式 A=1,2;3 4;funm=(A,sin)v 数值(数值(numeric)q 数值型数据包括整数(带符号和无符号)和浮点数数值型数据包括整数(带符号和无符号)和浮点数(单精度和双精度)。(单精度和双精度)。q 在缺省(默认)状态下,在缺省(默认)状态下,Matlab将所有的数都看作将所有
3、的数都看作是双精度的浮点数。是双精度的浮点数。Matlab数据类型数据类型q 使用整型变量和单精度变量可以节约内存空间。使用整型变量和单精度变量可以节约内存空间。q 整数整数Matlab提供四种带符号整型和四种无符号整型数据类型。提供四种带符号整型和四种无符号整型数据类型。Matlab数据类型数据类型数据类型数据类型取值范围取值范围转换函数转换函数Signed 8-bit integer-27 to 27 1int8Signed 16-bit integer-215 to 215 1int16Signed 32-bit integer-231 to 231 1int32Signed 64-bi
4、t integer-263 to 263 1int64Unsigned 8-bit integer0 to 28 1uint8Unsigned 16-bit integer0 to 216 1uint16Unsigned 32-bit integer0 to 232 1uint32Unsigned 64-bit integer0 to 264 1uint64例例:A=input(Please input A:)l 数据的输入:数据的输入:inputA=input(提示信息提示信息)l 其中其中 提示信息提示信息 为字符串,为字符串,l 该命令要求用户输入该命令要求用户输入 A 的值的值(可以是
5、数或字符串可以是数或字符串)inputname=input(Whats your name?)例例:l 输入字符串时必须带单引号输入字符串时必须带单引号l 单引号的输出:两个连续的单引号单引号的输出:两个连续的单引号disp(X)l 输出变量输出变量 X 的值,的值,X 可以是数值矩阵或字符串可以是数值矩阵或字符串l 一次只能输出一个变量一次只能输出一个变量 B=1 2 3;4 5 6;7 8 9;disp(B)displ 数据的输出:数据的输出:disp A=Hello,Tom!;disp(A)例例:fprintffprintf(fid,format,variables)l 数据的格式化输出
6、:数据的格式化输出:fprintfl 按按指定的格式指定的格式将变量的值输出到屏幕或指定的将变量的值输出到屏幕或指定的文件文件l fid 为文件句柄,若缺省,则输出到屏幕上为文件句柄,若缺省,则输出到屏幕上l format 用来指定数据输出时采用的格式,包含:用来指定数据输出时采用的格式,包含:普通字符串、格式字符串、转义字符普通字符串、格式字符串、转义字符%d(整数整数)%e(实数:科学计数法形式实数:科学计数法形式)%f(实数:小数形式实数:小数形式)%g(由系统自动选取上述两种格式之一由系统自动选取上述两种格式之一)%s(输出字符串输出字符串)n(换行换行)t(制表符制表符)b(退格退格
7、)(反斜杆反斜杆)%(百分号百分号)fprintf a=Hello;b=2.4;c=100*pi;fprintf(a=%s,b=%f,c=%en,a,b,c)例例:l format 中的中的格式字符串格式字符串要与输出变量一一对应要与输出变量一一对应l 可以没有输出变量可以没有输出变量 fprintf(Today is Mondayn)例:例:11l 输出格式输出格式Matlab 的输出格式的输出格式l Matlab 以双精度执行所有的运算,运算结果可以以双精度执行所有的运算,运算结果可以在屏幕上在屏幕上输出输出,同时,同时赋给指定变量赋给指定变量;若无指定变量,则系统会自动;若无指定变量,则
8、系统会自动将结果赋给变量将结果赋给变量“ans”l 在屏幕上输出运算结果时,可以在屏幕上输出运算结果时,可以通过通过 format 命令指定命令指定输出格式输出格式format 只改变输出格式,不会改变变量的值!只改变输出格式,不会改变变量的值!1212各种各种 format格式格式解释解释例例format短格式(缺省格式),同短格式(缺省格式),同 short3.1416format short短格式(缺省格式),小数点后短格式(缺省格式),小数点后 4 位位3.1416format long长格式,双精度长格式,双精度 15位,单精度位,单精度 7位位3.14159265358979for
9、mat shortE短短 E 格式(科学计数格式格式(科学计数格式)3.1416e+000format longE长长 E 格式格式3.141592653589793e+000format shortG短短 G 格式格式3.1416format longG长长 G 格式格式3.14159265358979format rat分数形式分数形式355/113format compact紧凑格式紧凑格式format loose宽松格式宽松格式format+,format bank,format hex (详情查看联机帮助详情查看联机帮助)1313变量的存储变量的存储l 将变量保存到将变量保存到 ma
10、t 文件中文件中save将将所有变量所有变量保存到文件保存到文件 matlab.mat 中中save fnamesave fname.mat 将将所有变量所有变量保存到文件保存到文件 fname.mat 中中save fname 变量变量将将指定变量指定变量保存到文件保存到文件 fname.mat 中中l 可同时保存多个变量,各变量之间用可同时保存多个变量,各变量之间用空格空格隔开隔开例例:x=2:5;A=magic(3);a=2.4;save mydata A x;l 从从 mat 文件中读取变量文件中读取变量load fname读取读取 fname.mat 中的中的所有变量所有变量load
11、 fname 变量变量从从 fname.mat 中读取中读取指定的变量指定的变量q 文件操作是一种重要的输入输出方式,文件操作是一种重要的输入输出方式,Matlab 提提供了一系列输入输出函数,专门用于文件操作。供了一系列输入输出函数,专门用于文件操作。q Matlab文件操作主要有三个步骤:首先文件操作主要有三个步骤:首先打开打开文件,文件,然后对文件进行然后对文件进行读写读写操作,最后要操作,最后要关闭关闭文件。文件。q Matlab中的输入输出函数是以中的输入输出函数是以 C语言标准库函数语言标准库函数中的输入输出函数为基础开发的,所以这些函数与中的输入输出函数为基础开发的,所以这些函数
12、与 C语言的输入输出函数相类似。语言的输入输出函数相类似。Matlab 文件操作介绍文件操作介绍l 常见的打开方式有:常见的打开方式有:fid=fopen(文件名,打开方式文件名,打开方式)r只读,文件必须存在(缺省的打开方式)只读,文件必须存在(缺省的打开方式)w写文件,若文件已存在则原内容将被覆盖;若文写文件,若文件已存在则原内容将被覆盖;若文件不存在则新建一个件不存在则新建一个a在文件末尾添加,文件若不存在则新建一个在文件末尾添加,文件若不存在则新建一个r+可读可写,文件必须存在可读可写,文件必须存在w+可读可写,若文件已存在则原内容将被覆盖;若可读可写,若文件已存在则原内容将被覆盖;若
13、文件不存在则新建一个文件不存在则新建一个a+可读可写可添加,文件若不存在则新建一个可读可写可添加,文件若不存在则新建一个文件的打开文件的打开l 其中文件名用字符串形式表示(可以带路径名)其中文件名用字符串形式表示(可以带路径名)l fid 为文件句柄,其它函数可以用它对该文件进行操为文件句柄,其它函数可以用它对该文件进行操作。如果句柄值大于作。如果句柄值大于 0,则表示文件打开成功;若打开,则表示文件打开成功;若打开失败,失败,fid 的返回值为的返回值为-1。l 有两个标准代码文件,不需打开就可以直接使用,分有两个标准代码文件,不需打开就可以直接使用,分别为:别为:fid=1 标准输出文件,
14、标准输出文件,fid=2 标准错误文件。标准错误文件。文件的打开文件的打开fid=fopen(output.txt,wt+);%t文本文本fprintf(fid,Hello world!n);fclose(fid);fprintf(1,Hello world!n);fprintf(2,Hello world!n);l 文件有两种格式:文件有两种格式:二进制二进制文件文件(b)和和文本文本文件文件(t)。在在Windows下,打开文件的默认是二进制格式,如果下,打开文件的默认是二进制格式,如果要以文本方式打开,则必须在打方式中加上字符要以文本方式打开,则必须在打方式中加上字符 t。l 若不指定打
15、开方式,则表示只读。若不指定打开方式,则表示只读。文件的打开文件的打开fid=fopen(output.txt,wt+);l 其中其中 fid 为所要关闭的文件的句柄,为所要关闭的文件的句柄,status 为关为关闭文件的返回代码,若关闭成功则为闭文件的返回代码,若关闭成功则为 0,否则为,否则为-1。status=fclose(fid);文件的关闭文件的关闭l A 用来存放读取的数据用来存放读取的数据l count 返回读取数据的个数,为可选项返回读取数据的个数,为可选项l fid 为文件句柄为文件句柄l size 为可选项,缺省为读取整个文件,为可选项,缺省为读取整个文件,若给出,则取值可
16、以是:若给出,则取值可以是:A,count=fscanf(fid,format,size)文本文件的读取文本文件的读取N读取读取 N 个数据到一个列向量个数据到一个列向量Inf读取整个文件读取整个文件m,n读取读取 m n 个数据到一个个数据到一个 m n 矩阵中,按列矩阵中,按列存放存放c字符型字符型g浮点数(自动)浮点数(自动)d十进制整数十进制整数o八进制八进制e浮点数(科学计数法)浮点数(科学计数法)s字符串字符串f浮点数(小数形式)浮点数(小数形式)x十六进制十六进制文本文件的读取文本文件的读取l format 用来控制读取的数据格式,由用来控制读取的数据格式,由%加上加上格式符组成
17、,下表中是常见的格式符,在格式符组成,下表中是常见的格式符,在%之后之后可以加上数据宽度,如可以加上数据宽度,如%12du 将将输出变量输出变量按指定的格式写入文件中按指定的格式写入文件中u 若省略若省略 fid,则表示在屏幕上输出,则表示在屏幕上输出u count 返回所写入的数据元素个数(可省)返回所写入的数据元素个数(可省)u format 以以%开头,通常由以下几个部分组成:开头,通常由以下几个部分组成:count=fprintf(fid,format,输出变量列表输出变量列表)n flags(optional)n Width and precision fields(optional
18、)n Conversion character(required)文本文件的写入文本文件的写入fprintf 举例举例fprintf(a=%-12.5f n,123.456)format以以%开头开头flagfield widthprecision格式说明符格式说明符-:左对齐左对齐+:输出符号输出符号0 :空白处添空白处添 0空格空格:前面加一空格前面加一空格字段宽度字段宽度小数点后小数点后输出位数输出位数文本文件的写入文本文件的写入l fprintf 命令的格式说明符命令的格式说明符c字符型字符型g浮点数(自动)浮点数(自动)d十进制整数十进制整数o八进制八进制e浮点数(科学计数法)浮点数
19、(科学计数法)s字符串字符串f浮点数(小数形式)浮点数(小数形式)x/X十六进制十六进制l format 中还可以使用的特殊字符中还可以使用的特殊字符b退后一格退后一格t水平制表符水平制表符f换页换页反斜杠反斜杠n换行换行单引号单引号r回车回车%百分号百分号x=0:0.1:1;y=x;exp(x);fid=fopen(output.dat,wt);fprintf(fid,x exp(x)n);fprintf(fid,%6.2f%12.8fn,y);status=fclose(fid);例:例:文本文件的写入举例文本文件的写入举例A,count=fread(fid,size,precision)
20、Inf读取整个文件(缺省)读取整个文件(缺省)读取读取 N 个数据到一个列向量个数据到一个列向量m,n读取读取 m n 个数据到一个个数据到一个 m n 矩阵中,按列矩阵中,按列存放存放二进制文件的读写二进制文件的读写l A 用来存放读取的数据用来存放读取的数据l count 返回读取数据的个数,可选项返回读取数据的个数,可选项l fid 为文件句柄为文件句柄l size 为可选项,缺省为读取整个文件,为可选项,缺省为读取整个文件,若给出,则取值可以是:若给出,则取值可以是:Nu precision 代表代表读取读取的数据的类型,的数据的类型,缺省为缺省为 ucharuchar 无符号字符无符
21、号字符uint1616位无符号整数位无符号整数schar 带符号字符带符号字符uint3232位无符号整数位无符号整数int88位带符号整数位带符号整数uint6464位无符号整数位无符号整数int16 16位带符号整数位带符号整数float3232位浮点数位浮点数int32 32位带符号整数位带符号整数float6464位浮点数位浮点数int64 64位带符号整数位带符号整数double64位双精度数位双精度数uint8 8位无符号整数位无符号整数二进制文件的读取二进制文件的读取char带符号字符带符号字符short16位带符号整数位带符号整数int32位带符号整数位带符号整数long32或
22、或64位带符号整数位带符号整数ushort 16位无符号整数位无符号整数uint32位无符号整数位无符号整数ulong32或或64位无符号整数位无符号整数float32位浮点数位浮点数u 以下数据类型与使用的平台有关:以下数据类型与使用的平台有关:二进制文件的读取二进制文件的读取fid=fopen(output.dat,r);A=fread(fid,100,double);status=fclose(fid);fid=fopen(output.dat,r);A,count=fread(fid,100,100,double);status=fclose(fid);例:例:二进制文件读写举例二进制
23、文件读写举例u 按指定的数据类型将矩阵按指定的数据类型将矩阵 A 中的元素写入到文件中。中的元素写入到文件中。其中其中 count 返回所写入的数据元素个数(可省)。返回所写入的数据元素个数(可省)。count=fwrite(fid,A,precision)A=magic(5);fid=fopen(magic5.dat,w);fwrite(fid,A,int8);fclose(fid);fid=fopen(magic5.dat,r);B,count=fread(fid,4,inf,int8);fclose(fid);二进制文件的写入二进制文件的写入例:例:30上机作业上机作业1、文件里、文件里
24、二进制二进制数据文件数据文件 mydata.dat,从文件中读取,从文件中读取100个元个元素(双精度),构成一个素(双精度),构成一个 50 X 2 的矩阵。然后将其写入到一个的矩阵。然后将其写入到一个文本文件文本文件(data06.txt)中,按两列排放。(程序命名为)中,按两列排放。(程序命名为 Matlab71.m)2、哥德巴赫猜想:任何一个大于、哥德巴赫猜想:任何一个大于 2 的偶数都能表示成两个素的偶数都能表示成两个素数之和。试编程验证数之和。试编程验证 101,200 中的偶数是否满足哥德巴赫猜中的偶数是否满足哥德巴赫猜想的论断。并给出这些偶数分解成两个素数之和的表示形式(想的论断。并给出这些偶数分解成两个素数之和的表示形式(只需给出一个即可),将结果写入文本文件只需给出一个即可),将结果写入文本文件 Matlab62.txt 中(中(程序命名为程序命名为 Matlab62.m)31上机要求上机要求l将上机作业用将上机作业用word格式(题目及格式(题目及matlab程序),命程序),命名为名为学号学号-姓名姓名-Matlab7,发送给发送给 jzlai145163l邮件主题为:邮件主题为:学号学号-姓名姓名-Matlab7l用本人用本人Email,不要一人发多份,代他人交作业。,不要一人发多份,代他人交作业。q 上机要求上机要求