MATLAB-02-程序设计.ppt

上传人:牧羊曲112 文档编号:6511660 上传时间:2023-11-08 格式:PPT 页数:46 大小:223.50KB
返回 下载 相关 举报
MATLAB-02-程序设计.ppt_第1页
第1页 / 共46页
MATLAB-02-程序设计.ppt_第2页
第2页 / 共46页
MATLAB-02-程序设计.ppt_第3页
第3页 / 共46页
MATLAB-02-程序设计.ppt_第4页
第4页 / 共46页
MATLAB-02-程序设计.ppt_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《MATLAB-02-程序设计.ppt》由会员分享,可在线阅读,更多相关《MATLAB-02-程序设计.ppt(46页珍藏版)》请在三一办公上搜索。

1、程序设计,程序设计,输入/输出函数语句级的控制结构,数据输入,v=input(message)输入数值 v=input(message,s)输入字符串指令执行时,“控制权”交给键盘,输入结束,按下回车,“控制权”交还matlab。message是提示用的字符串。,数据输出,X=1:10;X在屏幕上显示X的名称和值disp(X)在屏幕上显示X的值,不显示名称,数据格式化输出 fprintf,format 中还可以使用一些特殊格式,如:,n(换行)t(制表符)b(退格)(反斜杆)%(百分号),数据输出 fprintf,a=Hello;b=2.4;c=100*pi;fprintf(a=%s,b=%f

2、,c=%en,a,b,c),例:,输出格式要与输出变量一一对应使用fprintf函数时若变量是数组,则matlab对数组中的所有数重复使用fprintf中的格式可以没有输出变量,fprintf(Today is Mondayn),例:,M脚本文件,是一串按用户意图排列而成(包括控制流向指令在内的)matlab指令集合脚本文件运行后,所产生的所有变量都驻留在matlab基本工作空间(base workspace)中。,M函数,M函数文件的第一行总是以“function”引导的“函数声明行”。函数文件运行时,matlab会专门开辟一个临时工作区间,称为函数工作区间。函数空间随具体M函数文件的被调用

3、而产生,随调用结束而删除。如果在M函数中,调用某个M脚本文件,那么该脚本文件运行时产生的所有变量都存放于该函数空间中,而不是存放在基本空间,变量,在M函数中使用的变量称为局部变量,函数和工作区通信的惟一方式是通过输入参数和返回的输出参数。在函数内部定义的任何变量只能被函数使用。在函数中不能访问工作区中定义的变量。在Command窗口或M脚本文件都不能访问M函数中定义的变量。,编写和使用M函数的规则,M函数的文件名必须和定义函数的第一行中指定的函数名相同。函数名要遵守变量名的命名规则。函数的起始行必须以function开头,后面跟随输出参数、一个等号以及函数的名称、函数的输入参数跟在函数名之后,

4、用一对小括号括起来。从函数返回的惟一信息包含在输出参数中,要确保函数中包含一条给输出参数赋值的语句。一个具有多个输入参数的函数必须将这些参数列在function语句中准备返回多个值的函数应该在function语句中将所有值表示为一个向量,所有的输出值需要在函数内部进行计算。,例题:编写函数求下面方阵的行列式的值,-2(n-2)!(n1),function y=dt(n)c=diag(1:n)c(c=0)=2y=det(c),例题:编写函数A,B=mtrxn(n,k)1、生成下面的方阵A2、B=Ak,MATLAB的搜索过程,matlab在一个文件中碰到指令cow时:(1)检查cow是否变量(2)

5、检查cow是否内建函数(3)检查cow是否子函数(4)检查cow是否私用函数(5)检查cow是否当前目录上的文件(6)检查搜索路径上是否有cow,语句级的控制结构,关系运算逻辑运算选择结构if-else-end结构Switch-case结构try-catch模块 循环for循环while循环逻辑数组find命令,Matlab中使用的程序结构,关系运算和逻辑运算,在所有关系表达式和逻辑表达式中,作为输入的任何非0数都被看作是“逻辑真”,而只有0才被认为是“逻辑假”。所有关系表达式和逻辑表达式的计算结果,即输出,是一个由0和1组成的“逻辑数组”。在此数组中的1表示“真”,0表示“假”。逻辑数组有自

6、身的特殊用途,如数组寻访等。,关系运算,逻辑运算,关系、逻辑函数,特殊数据判断函数,选择结构:if-else-end(1),在很多情况下,我们需要根据某一条件来执行相应的命令。Matlab提供了几种if-else-end结构来完成这一操作最简单的一种if-else-end结构if expression(commands)endexpression为条件表达式,(commands)为要执行的命令。只用当expression结果中所有元素都为True时,(commands)才被执行。,例题,if G50count=count+1;disp(G);end 如果G是一个标量,以上的语句很容易解释。但是

7、如果G不是标量,则只有当其中的每一个元素全部为true时,if语句才认为比较结果为true。通常情况下,用if语句判断标量效果最好。,选择结构:if-else-end(3),希望在expression为True和False两种条件下执行不同的操作,可以使用如下格式的if-else-end结构:if expression(commands evaluated if True)else(commands evaluated if False)end,选择结构:if-else-end(3),当需要根据多个条件执行多个不同的操作时,可以采用下面的if-else-end结构:if expression1

8、(commands evaluated if expression1 is True)elseif expression2(commands evaluated if expression2 is True)elseif expression3(commands evaluated if expression3 is True)else(commands evalusated if no other expressions is True)end在上面的结构中,matlab将从上到下检测各个表达式,执行与所遇到的第一个为True的表达式相对应的命令集,并且将该表达式后面的所有语句跳过,直接退出

9、if-else-end结构。,选择结构:switch-case结构,Switch-case结构也是一种条件分支结构,只不过该结构根据一个公共参数的不同取值来执行不同的命令组。Switch-case结构的一般格式如下:switch expressioncase test_expression1(commands1)case test_expression2,test_expression3,test_expression4(commands2)otherwise(commands3)end,选择结构:try-catch结构(matla),Try-catch模块使得用户能够捕获程序执行过程中mat

10、lab发现的错误,以便决定如何对错误进行响应。Try-catch模块的一般格式为:try(commands1)catch(commands2)end在(commands1)中的所有matlab命令都被执行。如果没有matlab错误出现,程序控制就直接跳到end语句。如果出现了错误,程序控制就立即转移到catch语句,执行表达式(commands2)。在(commands2)中,通常会利用lasterr和lasterror函数获取错误信息,然后采取相应的措施。,例:引用魔方阵的行,当“行下标”超出魔方阵的最大行数时,将改向对最后一行的援引,并显示“出错”警告。clear,N=4;A=magic(

11、3);try A_N=A(N,:)catch A_end=A(end,:)endlasterr,例题:分配等级,编写一个M函数,用于根据成绩确定其等级,循环结构:for,for循环根据用户设定的条件,对结构中的命令反复执行固定次数的操作。for循环的一般格式如下:for x=array(commands)endx称为循环变量,array称为条件数组,(commands)为要执行的循环代码。For循环是根据数组array中的列数决定其循环执行的次数的,Fibonacci序列,1202年,Fibonacci(斐波纳契)在一本书中提出了一个问题:如果一对兔子出生一个月后开始繁殖,每个月产生一对后代,

12、现在有一对新生的兔子,如果兔子没有死亡,那么第20个月月初会有多少兔子。这就是著名的Fibonacci序列。1,1,2,3,5,8,13,21,34,55,89Fibonacci规则:,斐波纳契数列的通项公式,很有趣的是,这样一个完全是自然数的数列,通项公式居然是用无理数来表达的。,斐波纳契数列,斐波纳契数列还暗含着许多有趣的数字规律,如从第3个数开始每隔两个必是2的倍数,从第4个数开始每隔3个必是3的倍数,从第5个数开始每隔4个必是5的倍数另外,这个数列最具有和谐之美的地方是,越往后,相邻两项的比值会无限趋向于黄金比1.61803斐波纳契数列在现代物理、准晶体结构、化学等领域都有直接的应用,

13、为此,美国数学会从1960年代起出版了斐波纳契数列季刊,专门刊载这方面的研究成果。,例题:用for循环指令来寻求Fibonacc数组中第一个大于10000的元素。,n=100;a=ones(1,n);for i=3:n a(i)=a(i-1)+a(i-2);if a(i)=10000 a(i)break;end;endi,例题:水仙花数,1.找出所有的“水仙花数”及水仙花数总的个数。所谓“水仙花数”是一个3位数,其各位数字的立方和等于该数本身。例如:,。,2.找出所有这样的4位正整数,其各位数字的4次方的和等于该数本身,例如:,并请给出满足这样条件的4位正整数一个有多少个。,例题:求排列的逆序

14、数,求排列32514的逆序数用M函数实现:输入:一个排列,如 k=3 2 1 4 5输出:排列的逆序数 t=5,用蒙特卡罗(Monte Carlo)投点法计算 的值,n=100000;a=2;m=0;for i=1:n x=rand(1)*a/2;y=rand(1)*a/2;if(x2+y2=(a/2)2)m=m+1;endendfprintf(计算出来的 pi 为:%fn,4*m/n);,例题:蒙特卡罗投点法,循环结构:while,while expression(commands)endexpression称为条件表达式,(commands)为要执行的循环代码,一般情况下,expressi

15、on的计算结果为一个标量,但也可以是一个数组表达式。当expression的结果为一个标量,且该标量为true时,(commands)就会被一直执行下去;当expression的结果为一个数组时,只有当数组中的所有元素均为True时,(commands)才会被一直执行下去。,例题:用while循环求Fibonacci数组中第一个大于10000的元素。,a(1)=1;a(2)=1;i=2;while a(i)=10000 a(i+1)=a(i-1)+a(i);i=i+1;end;i,a(i),例题:用while循环计算特殊变量eps,n0;EPS=1;while(1+EPS)1EPSEPS2;n

16、nl;endn,EPSEPS*2,逻辑数组,A=zeros(2,5);A(:)=-4:5L=abs(A)3X=A(L),找出数组,中所有绝对值大于3的元素,L与A数组同样大小,L的元素是0或1,它是“逻辑数组”。,通过逻辑数组L中“逻辑值1”所在的位置,找出A中满足条件的元素。,逻辑数组常用来代替if和loop结构,Find命令,find是matlab特有的命令,也常用来代替if和loop结构,find(A):找出矩阵非零元素所在的下标,find(条件):找出符合条件的元素所在的位置,a=4,5,78,121,3,65,24,2;b=find(a10),A=0,4,0,-1,0,0;b=fin

17、d(A),控制程序流的其他常用指令,问题:下面的加法等式中:两个真分数之和等于第三个真分数;其中每个方框表示一个非零数字,且任意两个数字互不相同,比如:,试找出所有这样的解。,本题可用计算机找到解答,共 10 个解。,如果用 matlab数值 计算,却只能找到 6 个解;用Turbo C 可能找到 7 个、9 个或 11 个解。Why?具体原因留给大家思考!,a,b,c,d,e,f,g,h,i,数字填图问题,问题:两个假分数之和等于第三个假分数,其中每个方框表示一个非零数字,且任意两个数字互不相同,试找出所有的解。,自己动手编写 Matlab 程序,数字填图问题,本题可用计算机找到解答,共 4

18、1 个解。,Matlab 的计时函数共有三类,Matlab 计时函数的调用,cputime:显示 Matlab 启动后所占用的 CPU 时间;tic,toc:秒表计时,tic 开始,toc 结束;clock,etime:clock 显示系统时间,etime计算两次调用 clock 之间的时间差。,t0=cputime;你的 Matlab 程序;time=cputime-t0;%Matlab 程序的运行时间,Matlab 计时函数介绍,tic;你的 Matlab 程序;time=toc;%Matlab 程序的运行时间,t0=clock;你的 Matlab 程序;time=etime(clock,t0);%Matlab 程序的运行时间,Matlab 计时函数介绍,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号