资源预览内容
第1页 / 共47页
第2页 / 共47页
第3页 / 共47页
第4页 / 共47页
第5页 / 共47页
第6页 / 共47页
第7页 / 共47页
第8页 / 共47页
第9页 / 共47页
第10页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
L/O/G/O第3章 MATLAB程序设计1 Matlab语言称为第四代编程语言,程序简洁 、可读性很强而且调试 十分容易,是Matlab的重要组成部分。2一、matlab的工作模式 命令行 模式(指令驱动模式) 命令行操作时,matlab窗口只允许一次执行一行 上的一个或几个语句。 在matlab窗口输入数据和命令进行计算时,当处理复 杂问题和大量数据时是不方便的。 命令行方式程序可读性差,而且不能存储,对于复杂 的问题,应编写成能存储的程序文件。3 m文件模式 将matlab语句构成的程序存储成以m为 扩展名的文件,然后再执行该程序文件 ,这种工作模式称为程序文件模式。 程序文件不能在指令窗口下建立,因为 指令窗口只允许一次执行一行上的一个 或几个语句。4二、m文件的创建 m文件的类型是普通的文本文件,我们可以 使用系统认可的文本文件编辑器来建立m文件 。 具体的创建方法: v在matlab命令窗口点击file 菜单new m-file562. m文件m文件的语法类似于c语言,但又有其自身特 点。m文件有两类独立的m文件 称命令文件可调用m文件 称函数文 件 (1). 命令文件 独立的m文件命令文件实际上是一串指令的集合,与在命 令窗口逐行执行文件中的所有指令,其结果 是一样的。没有输入输出参数。7 命令文件包括两部分:注释文件和程序文 件 %RANK Number of linearly independent rows or columns. % K = RANK(X) is the number of singular values of X % that are larger than MAX(SIZE(X) * NORM(X) * EPS. % K = RANK(X,tol) is the number of singular values of X that are larger than tol. % Copyright (c) 1984-94 by The MathWorks, Inc.s = svd(x); if (nargin = 1)tol = max(size(x) * max(s) * eps; end r = sum(s tol);程序部分8(2) matlab内置函数文件matlab自定义的函数文件称内置函数文件调用内置函数的方法:使用函数名并给出相应的入 口、出口参数即可。例如:sin.m函数。调用格式:y=sin(2*x)实际应用中:x=0:2*pi/180:2*pi;y=sin(2*x)plot(x,y)9又如 sqrt(x) 求x的平方根abs(x) 求x的绝对值det(a) 求行列式的值等等。matlab拥有大量的内置数学函数,供我们在数值运算和符号运算中调用。10(3) 函数m文件 需要输入变量 ,返回输出变量matlab用户可以根据需要编辑自己的m文件,它们可以像库函数一样方便的调用,从而极大地扩展了matlab 的能力。11函数m文件的格式:function 返回变量=函数名(输入变量)注释说明语句段程序语句段 特定规则: v函数m文件第一行必须以单词function作为引导词, 必须遵循如下形式:function =() vm文件的文件名必须是 .m。 v程序中的变量均为局部变量,不保存在工作空间中。其变量只在函数运行期间有效。121314MATLAB程序结构 按照程序设计的观点, 任何算法功能都可 以通过由程序模块组成的三种基本程序结 构的组合来实现: 顺序结构:程序按程序语句或模块在执行流中 的顺序逐个执行。 选择结构:程序按设定的条件实现程序执行流 的多路分支。 循环结构:程序按给定的条件重复地执行指定 的程序段或模块。151顺序结构程序模块1程序模块2 MATLAB中实现顺序结构的方法非常简 单: 只需将程序语句顺序排列即可 162 选择结构 在MATLAB中,选择结 构由两种语句结构实现 : if语句 switch语句条件程序模块1成立不成立程序模块217if语句if表达式程序模块1else程序模块2 end18if语句的两种变形 (1) 单分支if语句:只有一个分支的选择结构 if表达式程序模块 end (2) 多分支if语句:超过2个的选择 if表达式1程序模块1elseif 表达式2程序模块2 elseif 表达式n程序模块nelse程序模块n+1 end19例:将百分制的学生成绩转换为五级制的成 绩输出clear n=input(输入n= ); if n=90r=A elseif n=80r=B elseif n=70r=C elseif n=60r=D elser=E end运行结果: 输入n= 87 r = B20 在条件表达式中,通常都是由关系操作符 , =, = =, = 等 逻辑操作符 switch fix(n/10) case 10,9r=Acase 8r=Bcase 7r=Ccase 6r=Dotherwiser=E end运行结果: 输入n= 65 r = D233.2.3 循环结构 在MATLAB中,循环结 构可以由两种语句结构 实现: for语句循环结构 while语句循环结构程序模块不成立成立条件241for语句循环结构for循环变量起始值:步长:终止值 循环体 end25例:使用for结构计算 1+2+3+100clear sum=0; for i=1:100sum=sum+i; end sum运行结果: sum =505026 有一周期为4的正弦波上叠加了方差为 0.1的正态分布的随机噪声的信号,用循环 结构编制一个三点线性滑动平均的程序。 (提示:用0.1*randn(1,n)产生方差为 0.1的正态分布的随机噪声;三点线性滑 动平均就是依次取每三个相邻数的平均值 作为新的数据,如 x1(2)=(x(1)+x(2)+x(3)/3,x1(3)=( x(2)+x(3)+x(4)/3)272while语句循环结构while表达式循环体 end28例:使用while结构计算 1+2+3+100clear sum=0; i=0; while i100 i=i+1; sum=sum+i; end sum运行结果: sum =505029牛刀小试 编制一个解数论问题的函数文件:取任意 整数,若是偶数,则用2除,否则乘3加1 ,重复此过程,直到整数变为1。30 echo 指令 用来控制m文件在执行过程中是 否显示echo on 打开所有命令文件的显示方式echo off 关闭所有命令文件的显示方式echo 在以上两者间切换 31 input 提示用户从键盘输入数值 、字符串、表达式。例:n=input(How many apples= )How many apples= 5n =5 pause 暂停,等待用户响应可令m文件执行暂停,并在继续执行 前按任一个键 。32 keyboard 与input类似,功能更强keyboard 调用键盘与调用m文件 一样,当keyboard在m文件中出现时, 它停止文件的执行并控制键盘,用于修改 程序。 break 中断break 中断for, while循环语句的执行, 在嵌套循环结构中, break进从最里层循 环推出。33代码码运行的计时计时 方法 整段代码的计时tictoc 表示计算tic到toc之间的时间 。 例如:tica=rand(300); % 随机生成300x300的矩阵inv(a); %求逆矩阵toc34 etime(t1,t2)来计算t1,t2之间的时间差来完成计 时,其中时差t1-t2 。 例如:t0=clocka=rand(300); inv(a);elapsed_time=etime(clock,t0)%elapsed_time指流逝过的时间 同理可以使用cputime来计时t=cputime; your_operation; cputime-t 35七、程序代码优码优 化1.尽量不要使用循环,而使用矩阵结构来进行运算。 例:t0=cputime n=100000; sum=0; for i=1:nsum=sum+1/i end sum t1=cputime-t036 而如果使用向量、矩阵和系统内部函数 tic n=100000; a=1:n; total=cumsum(1./a) toc %cumsum函数实现 累计求和37八、文件操作matlab文件输输入、输输出(I/O)函数允许许把其 它格式的数据文件直接读进读进 matlab,它是以 c语语言文件I/O函数为为基础础的。文件数据格式有两种形式,一是二进进制文件, 二是文本文件。在打开文件时时需要进进一步指 定文件格式类类型,即指定是二进进制文件还还是 文本文件。381. 打开和关闭文件(fopen, fclose)格式:fid=fopen(数据文件名,打开方式)r表示对打开的文件读数据w表示对打开的文件写数据a表示在打开的文件末尾添加数据fid用于存储储文件句柄值值,句柄值值用来标识标识 该该数据文件,其他函数可以利用它对该对该 数 据文件进进行操作。39 文件一旦打开,即可进行读写操作,操作完 后应应及时时关闭闭,使用fclose函数。sta=fclose(fid) 关闭上述打开文件该该函数关闭闭fid所表示的文件。sta表示关 闭闭文件操作的返回代码码,若关闭闭成功,返回 0,否则则返回1。sta=fclose(all) 关闭所有打开的文 件 402. 读写二进制数据文件fread, fwrite 可读写数据文件,文本文件。 例:fid=fopen(user.dat,r)a=fread(fid,50)sta=fclose(fid) 其中fread的调用格式为:A,COUNT=fread(fid, size, precision) 其中A用于存放读取的数据,COUNT返回所读取的 数据元素个数,fid为文件句柄,size为可选项, 若不选用则读取整个文件内容,若选用则它的值 可以是下列值:fread( list, sizeof( char ), 25, file ); 41(1) N表示读取 N个元素到一个列向量。 (2) Inf表示读取整个文件。 (3) M,N表示读数据到MN的矩阵中,数据按列 存放。 precision代表读写数据的类型 2写二进制文件 fwrite 函数按照指定的数据类型将矩阵中的元素写 入到文件中。其调用格式为: COUNT=fwrite (fid, A, precision) 其中COUNT返回所写的数据元素个数,fid为文件 句柄,A用来存放写入文件的数据,precision用于 控制所写数据的类型,其形式与fread函数相同。42 例: 建立一数据文件magic5.dat,用于存 放5阶阶魔方阵阵。 程序如下: fid=fopen(magic5.dat,w); cnt=fwrite(fid,magic(5),int32); fclose(fid);43 也可以直接导入数据txt文件file/import data./next/finish 例如:work目录下建立一个hello.txt,复制如下数据 : 你好 欢迎来到 太原理工大学 请访问 如下网址: www.tyut.edu.cn 1 11 111 1111 2 22 222 2222 3 33 333 3333 4 44 444 4444
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号