收藏 分享(赏)

电-Matlab基础及应用5.ppt

上传人:dreamzhangning 文档编号:3345098 上传时间:2018-10-16 格式:PPT 页数:46 大小:280KB
下载 相关 举报
电-Matlab基础及应用5.ppt_第1页
第1页 / 共46页
电-Matlab基础及应用5.ppt_第2页
第2页 / 共46页
电-Matlab基础及应用5.ppt_第3页
第3页 / 共46页
电-Matlab基础及应用5.ppt_第4页
第4页 / 共46页
电-Matlab基础及应用5.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

1、第6章 Matlab程序设计*,M文件。程序控制结构。数据的输入输出。文件操作。程序优化(自学),掌握Matlab变量命名规则; 掌握Matlab程序的编写原则,程序结构的设计,程序名的规范,脚本程序的使用和主要结构控制语句。,本章学习要求,学习重点和难点,重点:M文件类型。 难点:M文件的程序结构。,局部变量:只能在某一函数体内使用,而不能从其他函数和 Matlab工作空间访问的变量。 全局变量:在几个函数及Matlab函数中都能使用的变量。(全局变量名应尽可能大写,并由globe声明),局部变量和全局变量,6.1 M文件,M文件有两种形式:脚本文件(Script File)和函数文件(Fu

2、nction File),如果在命令窗口执行命令与函数,效率很低,程序调试不方便,输入内容不易保存。,Matlab的M文本编辑器集成了编辑和调试的功能。,M文件的编辑与运行,例6-1 分别建立命令文件和函数文件,将华氏温度f转换为摄氏温度c。,脚本文件:,1.首先建立命令文件并以文件名f2c.m存盘。,2.在MATLAB的命令窗口中输入f2c,将会执行该命令文件,3.执行情况为:,例6-1 分别建立命令文件和函数文件,将华氏温度f转换为摄氏温度c。,函数文件:,1.首先建立函数文件f2c.m。,2.在MATLAB的命令窗口调用该函数文件。,3.执行情况为:,M文件颜色属性,默认的编辑器颜色,改

3、变编辑器颜色File - Preferences - color,建立新的M文件,建立新的M文件,启动文本编辑器有3种方法:,菜单操作主窗口菜单 - File - New - M-file,工具栏操作主窗口工具栏 - New - M-File,命令操作命令窗口 - edit,打开已有的M文件,打开已有的M文件,也有3种方法:,菜单操作 主窗口菜单 - File - Open - 打开对话框,工具栏操作 主窗口工具栏 - Open File - 打开对话框,命令操作 命令窗口 - edit 文件名,函数文件,function 输出形参表=函数名(输入形参表)注释说明部分函数体语句,以functi

4、on开头的一行为引导行,表示该M文件是一个函数文件,函数名的命名规则与变量名相同,输入形参为函数的输入参数,输出形参为函数的输出参数。当输出形参多于一个时,则应该用方括号括起来,文件名应与函数名一致,函数调用,函数调用的一般格式是:输出实参表=函数名(输入实参表),注意事项:,函数调用时各实参出现的顺序、个数,应与函数定义时形参的顺序、个数一致,否则会出错。,函数调用时,先将实参传递给相应的形参,从而实现参数传递,然后再执行函数的功能。,适当使用函数的递归调用可以提高程序的运行效率,函数参数的可调性,在调用函数时,MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入

5、实参和输出实参的个数。,只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。,6.2 程序控制结构,循环结构,1. for语句,for 循环变量=表达式1:表达式2:表达式3循环体语句组 end,表达式1的值为循环变量的初值,,表达式2的值为步长,步长为1时,表达式2可省略。,表达式3的值为循环变量的终值。,C语言中的for循环语句:,for(循环变量初值;循环条件;循环变量增值),程序如下:y=0;n=100;for i=1:ny=y+1/(2*i-1);enddisp(y);,例已知 ,当n=100时,求y的值。,在实际Matla

6、b编程中,采用循环语句会降低其执行速度。,for语句更一般的格式为:for 循环变量=矩阵表达式循环体语句end,执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。,写出下列程序的执行结果。s=0;a=12,13,14;15,16,17;18,19,20;21,22,23;for k=as=s+k;enddisp(s);,执行结果: 39 48 57 66,2、while语句,while 条件循环体语句 end,若条件成立,则执行循环体语句,执行后再判断条件是否成立, 如果不成立则跳出循环。,例3-11 从键盘输入若干个数,当输入0时结束输入,求这些数的平均

7、值和它们之和。,sum=0; cnt=0; %个数 val=input(Enter a number (end in 0):); while (val=0)sum=sum+val;cnt=cnt+1;val=input(Enter a number (end in 0):); end if (cnt 0)summean=sum/cnt end,3break语句和continue语句与循环结构相关,它们一般与if语句配合使用。,break:终止循环的执行。 当在循环体内执行到该语句时,程序将跳出循环结构,而继续执行循环语句end后面的语句。,continue:跳出本次循环。 当在循环体内执行到该

8、语句时,程序将跳过本次循环体中所有剩下的语句,继续下一次循环。,4循环的嵌套如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。,循环嵌套的基本形式:,for for循环语句end end,例 若一个数等于它的各个真因子之和,则称该数为完数,如6=1+2+3,所以6是完数。求1,500之间的全部完数。,for m=1:500s=0;for k=1:m/2if rem(m,k)=0 %rem():求余函数s=s+k;endendif m=sdisp(m);end end,选择(条件)结构:if,switch,单分支if语句:,当条件成立时,则执行语句组,执行完之后继

9、续执行end语句的后继语句; 若条件不成立,则直接执行end语句的后继语句。,if 条件语句组end,双分支if语句:,if 条件语句组1else语句组2end,当条件成立时,执行语句组1,执行完后跳出结构 否则执行语句组2,执行完后跳出结构 语句组1或语句组2执行后,再执行end语句的后继语句。,例: 计算分段函数的值。,程序如下: x=input(请输入x的值:); if x=0y= (x+sqrt(pi)/exp(2); elsey=log(x+sqrt(1+x*x)/2; end disp(y),多分支if语句:语句用于实现多分支选择结构。,if 条件1语句组1elseif 条件2语句

10、组2elseif 条件m语句组melse语句组nend,计算函数y=|x|+|x-2|的值。,程序如下: x=input(请输入x的值:); if x=2y= 2*x-2; elseif x=0y=2; elsey=-2*x+2; end disp(y),switch语句,switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式为:,switch 表达式case 表达式1语句组1case 表达式2语句组2case 表达式m语句组motherwise语句组nend,switch后面的表达式:一个标量或者一个字符串,case后面的表达式可以是一个标量或者一个字符串,也可以是一个单元矩阵

11、(cell array),单元矩阵: a=-1, hello, magic(3),switch语句,注意:Matlab和C语言中的switch语句在用法上的区别,C语言中,case只是一个入口标号,并不在该处进行条件判断,会执行入口后面所有的语句;Matlab语言中,一旦执行完任意一个case后的语句,程序会跳出switch,继续执行end后面的语句。,C语言中,跳出switch需要加入break语句;Matlab语言中,跳出switch不需要加入break语句。,try语句:试探性执行语句,try语句组1catch语句组2end,try语句先试探性执行语句组1,如果没有错误,执行完成后跳出t

12、ry结构; 如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。,矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。,程序如下: A=1,2,3;4,5,6; B=7,8,9;10,11,12; tryC=A*B; catchC=A.*B; end disp(C); disp(lasterr); %显示出错原因,6.3 数据的输入输出,1、数据的输入函数:input,A=input(提示信息,选项);,提示信息:一个字符串,用于提示用户输入什么样的数据。 选项:设置输入的数据类型,s选项: 采用时则允许

13、用户输入一个字符串。,例如,想输入一个人的姓名,可采用命令:,xm=input(Whats your name?,s);,2、数据的输出函数:disp,disp(输出项),其中输出项既可以为字符串,也可以为矩阵。,采用disp函数输出,其结果不显示矩阵的名字,数据的输出函数:display,display(输出项),采用display函数输出,其结果显示矩阵的名字,举 例,求一元二次方程ax2 +bx+c=0的根。 程序如下: a=input(a=?); b=input(b=?); c=input(c=?); d=b*b-4*a*c; x=(-b+sqrt(d)/(2*a),(-b-sqrt(

14、d)/(2*a); disp(x); disp(x1=,num2str(x(1),x2=,num2str(x(2);,3、程序的暂停函数:pause,pause(延迟秒数),如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。,若要强行中止程序的运行可使用Ctrl+C命令。,4、M数据文件的存储/加载(save/load)save: savesave filenamesave filename X Y Zload: loadload filenameload filename X Y Z,a). 读文本文件函数:fscanf,5、文本文件的读写操作,A,COUN

15、T= fscanf (fid, format, size),A是存放读取数据的矩阵;,COUNT返回所读取的数据元素个数;,fid为文件句柄;,format用以控制读取的数据格式,由%加上格式符组成,常见的格式符有d,f,c,s。,size为可选项,决定矩阵A中数据的排列形式。,b).写文本文件函数:fprintf,COUNT= fprintf(fid, format, A),COUNT返回所写的数据元素个数;,fid为文件句柄;,A用来存放写入文件的数据;,precision用于控制所写数据的类型,其形式与fscanf函数相同。,6、二进制文件的读写操作,a).读取二进制文件函数:fread

16、,A,COUNT=fread(fid,size, precision),A用于存放读取的数据的矩阵;,COUNT返回所读取的数据元素个数;,fid为文件句柄;,size为可选项N表示读取 N个元素到一个列向量。Inf表示读取整个文件。M,N 读数据到MN的矩阵中,数据按列存放。,precision代表读写数据的类型:int8,uchar,b).写二进制文件函数fwrite,COUNT返回所写的数据元素个数;,COUNT=fwrite (fid, A, precision),fid为文件句柄;,A用来存放写入文件的数据;,precision用于控制所写数据的类型,其形式与fread函数相同。,7

17、、数据文件行存储/读取(fgetl/fgets) tline=fgetl(fid) tline=fgets(fid) tline=fgets(fid,nchar),6.4 文件操作,fopen: 打开文件 fclose: 关闭文件 fread: 读二进制文件 fwrite: 写二进制文件 fscanf: 读有格式文件 fprintf: 写有格式文件 fseek: 设置文件指针位置 ftell: 获取文件指针当前位置 frewind:把文件指针移到文件的开头 feof: 检查fid指向的文件是否设置文件尾指示符,1. 文件的打开与关闭,文件的打开函数: fopen,fid= fopen(文件名,

18、打开方式),文件名:用字符串形式,表示待打开的数据文件,常见的打开方式有:r表示对打开的文件读数据;w表示对打开的文件写数据;a表示在打开的文件末尾添加数据;,fid用于存储文件句柄值,句柄值用来标识该数据文件,其他函数可以利用它对该数据文件进行操作。 fid非负整数,文件打开成功;fid=-1,文件打开失败。,文件数据格式有两种形式,一是文本文件,二是二进制文件。,要打开文本格式的文件,在打开方式(permission)的字符之后添加t;在文本格式下,行的分隔符在文件读出时自动删除,在写文件时自动添加。 要打开二进制代码格式的文件,在打开方式(permission)的字符之后添加b;行的分隔符不删除或添加。,fopen的其他调用格式,fid,message=fopen(filename,permission,format) 使用指定的模式打开指定文件 返回文件的句柄和信息,fids=fopen(all) 返回一个包含所有打开文件的标识符的行向量,filename,permission,format=fopen(fid) 返回指定文件的全文件名、模式和格式,文件的关闭函数:fclose,文件在进行完读、写等操作后,应及时关闭,,state=fclose(fid);,该函数关闭fid所表示的文件。 state表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回1。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报