当前位置:首页 > matlab4
新疆大学重点课程·电子教案 21 页 共 41 页
例 全局变量应用示例。
先建立函数文件 wadd.m,该函数将输入的参数加权相加。 function f=wadd(x,y) global ALPHA BETA f=ALPHA*x+BETA*y; 在命令窗口中输入: global ALPHA BETA ALPHA=1; BETA=2; s=wadd(1,2) 6、子函数:
Matlab 允许一个 M 文件包含多个函数的代码。其中第一个出现的函数称为主函数(Primary function),该文件中的其他函数称为子函数(Subfunction)。保存时所用函数文件名与主函数定义名相同。 外部程序只能对主函数进行调用。 子函数有如下性质:
(1)每个子函数的第一行是其自己的函数声明行;
(2)在 M 函数文件内,主函数的位置不可改变,但子函数的排 列次序可以任意改变;
(3)子函数只能被处于同一个文件的主函数或其他子函数调 用; (4)在 M 函数文件中,任何指令通过“名字”对函数进行调用 时,子函数的优先级仅次于内装函数;
(5)同一个文件的主函数、子函数的工作空间都是彼此独立 的。各函数间的信息,或通过输入输出参数传递,或通过 全局变量传递;
新疆大学重点课程·电子教案 22 页 共 41 页
(6)help, lookfor 等帮助指令都不能提供关于子函数的任何帮助信息。
例:利用子函数的例子 function [avg, med]=newstats(u)
%newstats 利用内部函数计算平均值和中间值 n=length(u); avg=mean(u,n); med=median(u,n); function a=mean(v,n) %计算平均值 a=sum(v)/n; function m=median(v,n) %计算中间值 w=sort(v); if rem(n,2)==1 m=w((n+1)/2); else
m=(w(n/2)+w(n/2+1))/2; end
子函数 mean 和 median 计算输入参数的平均值和中间值,主函数 确定输入列表的长度和调用子函数,将参数传递给子函数。在同一 个 M 文件中的函数不能存储同一个变量,除非变量已声明为全局变 量或通过参数传递它们。
当在 M 文件中调用一个函数时,Matlab 首先查看这个函数是否 是一个子函数,如不是再查看是否是私有函数,如不是再查看是否 是在搜索路径上的 M 文件。因此,子函数可以使用已经存在的函数 名,但在同一个 M 文件内函数名必须是唯一的。 7、文件操作 文件的打开与关闭
新疆大学重点课程·电子教案 23 页 共 41 页
(1) 打开文件
fopen 函数的调用格式为: Fid= fopen(文件名,打开方式) (2) 关闭文件 调用格式为: Sta=fclose(Fid) 二进制文件读写操作 (1) 读二进制文件
fread 函数可以读取二进制文件的数据,并将数据存入矩阵。其调 用格式为:
[A,COUNT]=fread(Fid,size, precision) (2)写二进制文件
fwrite 函数按照指定的数据精度将矩阵中的元素写入到文件中。其 调用格式为:
COUNT=fwrite (Fid, A, precision) 文本文件读写操作 (1)读文本文件
fscanf 函数可以读取文本文件的内容,并按指定格式存入矩阵。 其调用格式为:
[A,COUNT]= fscanf (Fid, format, size) (2)写文本文件
fprintf 函数可以将数据按指定格式写入到文本文件中。其调用格 式为:
COUNT= fprintf(Fid, format, A) 数据文件定位
fseek 函数用于定位文件位置指针,其调用格式为: status=fseek(Fid, offset, origin)
新疆大学重点课程·电子教案 24 页 共 41 页
ftell 函数返回文件指针的当前位置,其调用格式为: position=ftell (Fid)
例 分析下列程序执行后,four、position 和 three 三个变量的值。 a=1:5;
Fid=fopen('fdat.bin', 'w');
%以写方式打开文件 fdat.bin,若没有该文 件则创建一个新文件 fwrite(Fid, a, 'int16' ); %将 a 的元素以双字节整型写入文件 fdat.bin status=fclose(Fid);
Fid=fopen('fdat.bin', 'r'); %以读数据方式打开文件 fdat.bin status=fseek(Fid, 6, 'bof'); %将文件指针从开始位置向尾部移动 6 个字节 four=fread(Fid, 1, 'int16'); %读取第 4 个数据,并移动指针到下一个数据 position=ftell(Fid); %ftell 的返回值为 8 status=fseek(Fid, -4, 'cof');
%将文件指针从当前位置往前移动 4 个字节 three=fread(Fid, 1, 'int16'); %读取第 3 个数据 status=fclose(Fid);
(fseek 函数的参数:'bof' or -1 Beginning of file 'cof' or 0 Current position in file 'eof' or 1 End of file)
[作业] 从键盘输入 5 名学生的姓名和成绩,先建立一个数据文件, 然后读出数据文件的内容,并按成绩从低到高的顺序在屏幕上输出 学生信息。
六. 编程中使用的通用函数
本节通过例子学习 3 个通用函数和函数句柄,它们提供了 Matlab 的宏操作能力。
共分享92篇相关文档