matlab数学建模程序语法.ppt_第1页
matlab数学建模程序语法.ppt_第2页
matlab数学建模程序语法.ppt_第3页
matlab数学建模程序语法.ppt_第4页
matlab数学建模程序语法.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1,第3章 MATLAB程序设计,2, Matlab语言称为第四代编程语言,程序简洁、可读性很强而且调试十分容易,是Matlab的重要组成部分。,3,一、matlab的工作模式,命令行 模式(指令驱动模式) 命令行操作时,matlab窗口只允许一次执行一行上的一个或几个语句。 在matlab窗口输入数据和命令进行计算时,当处理复杂问题和大量数据时是不方便的。 命令行方式程序可读性差,而且不能存储,对于复杂的问题,应编写成能存储的程序文件。,4,m文件模式 将matlab语句构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。 程序文件不能在指令窗口下建立,因为指令窗口只允许一次执行一行上的一个或几个语句。,5,二、m文件的创建,m文件的类型是普通的文本文件,我们可以使用系统认可的文本文件编辑器来建立m文件。 具体的创建方法: 在matlab命令窗 口点击file 菜单 new m-file,6,7,2. m文件 m文件的语法类似于c语言,但又有其自身特点。 m文件有两类独立的m文件 称命令文件 可调用m文件 称函数文件 (1). 命令文件 独立的m文件 命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。没有输入输出参数。,8,命令文件包括两部分:注释文件和程序文件 %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);,程序部分,9,(2) matlab内置函数文件 matlab自定义的函数文件称内置函数文件 调用内置函数的方法:使用函数名并给出相应的入口、出口参数即可。 例如:sin.m函数。 调用格式:y=sin(2*x) 实际应用中: x=0:2*pi/180:2*pi; y=sin(2*x) plot(x,y),10,又如 sqrt(x) 求x的平方根 abs(x) 求x的绝对值 det(a) 求行列式的值 等等。 matlab拥有大量的内置数学函数,供我们在数值运算和符号运算中调用。,11,(3) 函数m文件 需要输入变量,返回输出变量,matlab用户可以根据需要编辑自己的m文件,它们可以像库函数一样方便的调用,从而极大地扩展了matlab 的能力。,12,函数m文件的格式: function 返回变量=函数名(输入变量) 注释说明语句段 程序语句段 特定规则: 函数m文件第一行必须以单词function作为引导词,必须遵循如下形式: function =() m文件的文件名必须是 .m。 程序中的变量均为局部变量,不保存在工作空间中。 其变量只在函数运行期间有效。,13,14,15,MATLAB程序结构,按照程序设计的观点, 任何算法功能都可以通过由程序模块组成的三种基本程序结构的组合来实现: 顺序结构:程序按程序语句或模块在执行流中的顺序逐个执行。 选择结构:程序按设定的条件实现程序执行流的多路分支。 循环结构:程序按给定的条件重复地执行指定的程序段或模块。,16,1顺序结构,程序模块1,程序模块2,MATLAB中实现顺序结构的方法非常简单: 只需将程序语句顺序排列即可,17,2 选择结构,在MATLAB中,选择结构由两种语句结构实现: if语句 switch语句,条件,程序模块1,成立,不成立,程序模块2,18,if语句,if表达式 程序模块1 else 程序模块2 end,19,if语句的两种变形,(1) 单分支if语句:只有一个分支的选择结构 if表达式 程序模块 end (2) 多分支if语句:超过2个的选择 if表达式1 程序模块1 elseif 表达式2 程序模块2 elseif 表达式n 程序模块n else 程序模块n+1 end,20,例:将百分制的学生成绩转换为五级制的成绩输出,clear n=input(输入n= ); if n=90 r=A elseif n=80 r=B elseif n=70 r=C elseif n=60 r=D else r=E end,运行结果: 输入n= 87 r = B,21,在条件表达式中,通常都是由 关系操作符 , =, = =, = 等 逻辑操作符 &,| , 等 逻辑函数:isequal 若是相等则为真 isempty 若是空矩阵则为真 isstr 若是字符串则为真 例:编写m函数,计算函数值 x (x=10),22,2. switch语句,switch 表达式 case 数值1 程序模块1; case 数值2 程序模块2; otherwise 程序模块n end,23,例:将百分制的学生成绩转换为五级制的成绩输出使用switch语句,clear n=input(输入n= ); switch fix(n/10) case 10,9 r=A case 8 r=B case 7 r=C case 6 r=D otherwise r=E end,运行结果: 输入n= 65 r = D,24,3.2.3 循环结构,在MATLAB中,循环结构可以由两种语句结构实现: for语句循环结构 while语句循环结构,程序模块,不成立,成立,条件,25,1for语句循环结构,for循环变量起始值:步长:终止值 循环体 end,26,例:使用for结构计算1+2+3+100,clear sum=0; for i=1:100 sum=sum+i; end sum,运行结果: sum = 5050,27,有一周期为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),28,2while语句循环结构,while表达式 循环体 end,29,例:使用while结构计算1+2+3+100,clear sum=0; i=0; while i100 i=i+1; sum=sum+i; end sum,运行结果: sum = 5050,30,牛刀小试,编制一个解数论问题的函数文件:取任意整数,若是偶数,则用2除,否则乘3加1,重复此过程,直到整数变为1。,31,echo 指令 用来控制m文件在执行过程中是否显示 echo on 打开所有命令文件的显示方式 echo off 关闭所有命令文件的显示方式 echo 在以上两者间切换,32,input 提示用户从键盘输入数值、字符串、表达式。 例:n=input(How many apples= ) How many apples= 5 n = 5 pause 暂停,等待用户响应 可令m文件执行暂停,并在继续执行前按任一个键 。,33,keyboard 与input类似,功能更强 keyboard 调用键盘与调用m文件一样,当keyboard在m文件中出现时,它停止文件的执行并控制键盘,用于修改程序。 break 中断 break 中断for, while循环语句的执行,在嵌套循环结构中, break进从最里层循环推出。,34,代码运行的计时方法,整段代码的计时 tic toc 表示计算tic到toc之间的时间。 例如: tic a=rand(300); % 随机生成300x300的矩阵 inv(a); %求逆矩阵 toc,35,etime(t1,t2)来计算t1,t2之间的时间差来完成计时,其中时差t1-t2 。 例如: t0=clock a=rand(300); inv(a); elapsed_time=etime(clock,t0) %elapsed_time指流逝过的时间 同理可以使用cputime来计时 t=cputime; your_operation; cputime-t,36,七、程序代码优化,1.尽量不要使用循环,而使用矩阵结构来进行运算。 例:t0=cputime n=100000; sum=0; for i=1:n sum=sum+1/i end sum t1=cputime-t0,37,而如果使用向量、矩阵和系统内部函数 tic n=100000; a=1:n; total=cumsum(1./a) toc %cumsum函数实现累计求和,38,八、文件操作,matlab文件输入、输出(I/O)函数允许把其它格式的数据文件直接读进matlab,它是以c语言文件I/O函数为基础的。 文件数据格式有两种形式,一是二进制文件,二是文本文件。在打开文件时需要进一步指定文件格式类型,即指定是二进制文件还是文本文件。,39,1. 打开和关闭文件(fopen, fclose) 格式:fid=fopen(数据文件名,打开方式) r表示对打开的文件读数据 w表示对打开的文件写数据 a表示在打开的文件末尾添加数据 fid用于存储文件句柄值,句柄值用来标识该数据文件,其他函数可以利用它对该数据文件进行操作。,40,文件一旦打开,即可进行读写操作,操作完后应及时关闭,使用fclose函数。 sta=fclose(fid) 关闭上述打开文件 该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回1。 sta=fclose(all) 关闭所有打开的文件,41,2. 读写二进制数据文件 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 );,42,(1) N表示读取 N个元素到一个列向量。 (2) Inf表示读取整个文件。 (3) M,N表示读数据到MN的矩阵中,数据按列存放。 precision代表读写数据的类型 2写二进制文件 fwrite 函数按照指定的数据类型将矩阵中的元素写入到文件中。其调用格式为: COUNT=fwrite (fid, A, precision) 其中COUNT返回所写的数据元素个数,fid为文件句柄,A用来存放写入文件的数据,precision用于控制所写数据的类型,其形式与fread函数相同。,43,例: 建立一数据文件magic5.dat,用于存放5阶魔方阵。 程序如下: fid=fopen(magic5.dat,w); cnt=fwrite(fid,magic(5),int32); fclose(fid);,44,也可以直接导入数据txt文件 file/import data/next/finish 例如:work目录下建立一个hello.txt,复制如下数据: 你好 欢迎来到 太原理工大学 请访问如下网址: 1 11 111 1111 2 22 222 2222 3 33 333 3333 4 44 444 4444 5 55 555 5555,45,应用举例,求1!+2!+3!+ +5!的值 clear sum=0; for i=1:5 pdr=1; for k=1:i pdr=pdr*k; end sum=sum+pdr; end sum,运行结果: sum = 153,46,应

温馨提示

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

评论

0/150

提交评论