《Matlab编程入门-下.ppt》由会员分享,可在线阅读,更多相关《Matlab编程入门-下.ppt(46页珍藏版)》请在三一办公上搜索。
1、2023/11/8,1,专题三 Matlab编程入门(2),2023/11/8,2,Matlab 编程入门,Matlab 编程简介,Matlab 作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算、符号计算、矩阵运算能力和丰富的绘图功能,同时也具有和 C、FORTRAN 等高级语言一样进行程序设计。,在 Matlab 程序设计中,要充分利用 Matlab 数据结构的特点,提高编程效率。,利用 Matlab 的程序控制功能,可以将有关 Matlab 命令编成程序存储在一个文件中(M 文件),然后在命令窗口中运行该文件,Matlab 就会自动依次执行文件中的命令,直到全部命令执行完毕。,
2、2023/11/8,3,M 文件是由若干 Matlab 命令组合在一起构成的,它可以完成某些操作,也可以实现某种算法。,M 文件,M 文件以.m 为扩展名。,2023/11/8,4,M 文件的建立与打开,2023/11/8,5,在命令窗口中输入 f2cs,即可执行该 M 文件。,例:编写一个脚本文件将华氏温度转化为摄氏温度,脚本文件举例,脚本文件运行后,文件中所产生的所有变量都驻留在 Matlab 当前工作空间,可以用 whos 查看。,2023/11/8,6,一个完整的函数 M 文件的结构为:function f=fact(n)函数定义语句%Compute a factorial value
3、.H1 行%FACT(N)returns the factorial of N,帮助文本%usually denoted by N!%Put simply,FACT(N)is PROD(1:N).注释语句f=prod(1:n);函数体 函数定义语句只在函数文件中存在,定义函数名称、输入输出参数的数量和顺序。函数定义语句的格式为:function y=fact(x)。,M文本文件介绍,2023/11/8,7,M文本文件介绍,一个一般的脚本 M 文件,%script m-file example:calculate the volume and surface area of a columer=
4、1;%the radius of the columeh=1;%the hight of the columes=2*r*pi*h+2*pi*r2;%calculate the surface areav=pi*r2*h;%calculate the volumedisp(The surface area of the colume is:),disp(s);disp(The volume of the colume is:),disp(v);,2023/11/8,8,关系运算,比较大小,如果结论是 真 则返回 1,否则返回 0,注意=与=的区别,关系操作符能用来比较两个同样大小的数组,或用来
5、比较一个数组和一个标量,在后一种情况,标量和数组中的每一个元素相比较,比较结果与数组大小一样。,关系运算符,2023/11/8,9,例:,关系运算举例,2+2=4,23,A=1 3 5;2 0 6;B=3 1 0;2 4 6;A=B,x=5 0;4 2;x4,2023/11/8,10,逻辑运算,逻辑运算符,A&B 等价于 and(A,B)A|B 等价于 or(A,B)A 等价于 not(A),2023/11/8,11,运算优先级,高,低,2023/11/8,12,程序控制结构有三种:顺序结构、选择结构和循环结构。任何复杂的程序都由这三种基本结构组成。,顺序结构,M文件控制流,2023/11/8
6、,13,数据的输入:input,数据输入 input,2023/11/8,14,disp(X),输出变量 X 的值,可以是数值矩阵或字符串,B=1 2 3;4 5 6;7 8 9;disp(B),数据输出 disp,数据的输出:disp,2023/11/8,15,数据输出 fprintf,format 中还可以使用一些特殊格式,如:,n(换行)t(制表符)b(退格)(反斜杆)%(百分号),2023/11/8,16,数据输出 fprintf,a=Hello;b=2.4;c=100*pi;fprintf(a=%s,b=%f,c=%en,a,b,c),例:,format 中的输出格式要与输出变量一一
7、对应,可以没有输出变量,2023/11/8,17,pause,程序的暂停:pause,pause 或 pause(n),若想强行终止程序的运行,可以使用 Ctrl+c,其中 n 是延迟时间,以秒为单位;若缺省,则将暂停程序,直到用户按任意键后继续,pause off 屏蔽程序中所有 pause 的作用 pause on 打开 pause 的作用,2023/11/8,18,定义函数m文件,MATLAB的内部函数是有限的,有时为了研究某一个函数的各种性态,需要为MATLAB定义新函数,为此必须编写函数文件.,定义函数的m文件有特殊的格式要求:第一行必须是一特殊字符function开始,格式为:fu
8、nction 因变量名=函数名(自变量名)(函数体),2023/11/8,19,例:定义函数 z=100(y-x2)2+(1-x)2,function z=fun(x,y),1.建立M文件:fun.m,2.可以直接使用函数fun.m,例如:计算 fun(1,2),只需在Matlab命令窗口键入命令:x=1,y=2fun(x),z=100*(y-x2)2+(1-x)2;,2023/11/8,20,选择结构 是根据给定的条件成立或不成立,分别执行不同的语句。Matlab 用于实现选择结构的语句有 if 语句和 switch 语句。,选择结构,2023/11/8,21,单分支结构,if expres
9、sion(条件)statements(语句组)end,if 条件语句,2023/11/8,22,if expression1(条件1)statements1(语句组1)elseif expression2(条件2)statements2(语句组2).elseif expressionm(条件m)statementsm(语句组m)else statements(语句组)end,多分支结构,if 条件语句,P141 Eg.07-06,2023/11/8,23,根据表达式的不同取值,分别执行不同的语句。,switch expression(表达式)case value1(表达式1)statement
10、1(语句组1)case value2(表达式2)statement2(语句组2).case valuem(表达式m)statementm(语句组m)otherwise statement(语句组)end,switch 语句,2023/11/8,24,Matlab 首先计算 expression 的值,然后将它依次与各个 case 指令后的检测值进行比较,当比较结果为真时,就执行相应的语句组,然后跳出 switch 结构。,switch 后面的表达式 expression 的值可以是一个标量或字符串。,switch 语句,otherwise 指令可以不出现。,如果所有的比较结果都为假,则执行 o
11、therwise 后面的语句组,然后跳出 switch 结构。,2023/11/8,25,例:利用分支语句编写条件判断程序,实现任意底对数的计算。,switch 举例,分析:Matlab中只提供了有限底的对数函数。,P143 Eg.07-07,2023/11/8,26,循环结构 for 语句和 while 语句,循环结构,2023/11/8,27,for variable=expression statement(循环体)end,循环变量,表达式 expression 可以是行向量,也可以是矩阵,for 循环,clear;y=0;n=100;for k=1:n y=y+1/(2*k-1);en
12、d,!不能在 for 循环体内改变循环变量的值!,2023/11/8,28,循环语句可以嵌套使用,while 循环,while expression(条件)statement(循环体)end,如果预先就知道循环的次数,则可以采用 for 循环;否则,如果预先无法确定循环的次数,则可以使用 while 循环。,2023/11/8,29,这个例子给出了计算 eps 的一种方法。这里我们用大写 EPS,因此系统中 eps 的值不会被覆盖。当 EPS=eps 时,条件仍成立;而当 EPS=eps/2 时,条件为假,退出循环,所以最后应有 EPS=eps/2。num 用来记录循环次数。,计算 Matla
13、b 中 eps 值,while 循环举例,num=0;EPS=1;while(1+EPS)1 EPS=EPS/2;num=num+1;end,2023/11/8,30,break 和 continue,break 语句用于终止循环的执行,即跳出最内层循环 continue 语句用于结束本次循环,进行下一次循环 break 和 continue 一般与 if 语句配合使用,其它流控制语句,2023/11/8,31,首先由计算机随机产生一个 1,100 之间的一个整数,然后由用户猜测所产生的这个数。根据用户猜测的情况给出不同的提示,如果猜测的数大于产生的数,则显示 High,小于则显示 Low,等
14、于则显示 You won!,同时退出游戏。用户最多有 7 次机会。,程序示例,猜数游戏,2023/11/8,32,程序示例,数论中的一个有趣问题:任取一个正整数,如果是偶数,用 2 除,如果是奇数,用 3 乘再加 1,反复这个过程,直到所得到的数为 1。问:是否存在使该过程永不中止的整数?,2023/11/8,33,while 1 n=input(Please enter n(nonpositive quit):);if n1 if rem(n,2)=0 n=n/2;else n=3*n+1;end fprintf(n n=%d,n);end fprintf(n n=%d is not we
15、need!continue.n,nt);end,程序示例,2023/11/8,34,函数变量,局部变量全局变量永久变量,2023/11/8,35,局部变量,每个函数都有自己的局部变量,这些变量存储在该函数独立的工作区中,与其他函数的变量及主工作区中的变量分开存储。当函数调用结束时,这些变量随之删除,不保存在内存中。,在函数中,变量默认为局部变量。,2023/11/8,36,全局变量,与局部变量不同,全局变量可以在定义该变量的全部工作区中有效。当在一个工作区内改变该变量的值时,该变量在其他工作区中的变量同时改变。,任何函数如果需要使用全局变量,则必须首先声明,声明格式为:global 变量名1
16、变量名2,2023/11/8,37,永久变量,除局部变量和全局变量外,MATLAB 中还有一种变量类型为永久变量。永久变量的特点为:只能在 M 文件内部定义;只有该变量从属的函数能够访问该变量;当函数运行结束时,该变量的值保留在内存中,因此当该函数再次被调用时,可以再次利用这些变量。永久变量的定义方法为:persistent 变量名1 变量名2。,2023/11/8,38,程序示例,%ex4global.mclear;global a ba=1;b=3;y=mysquaresum(a,b);fprintf(a=%g,b=%g n,a,b);z=myproduct(a,b);fprintf(a=
17、%g,b=%gn,a,b);,%mysquaresum.mfunction square_sum=mysquaresum(x,y)square_sum=x2+y2;a=x+y;,%myproduct.mfunction product=myproduct(x,y)global aproduct=x*y;a=x+y;,2023/11/8,39,2023/11/8,40,补充1 函数类型,1 匿名函数2 主函数3 子函数4 嵌套函数5 私有函数6 重载函数,2023/11/8,41,匿名函数,匿名函数提供了一种创建简单程序的方法,使用它用户可以不必每次都编写 M 文件。用户可以在 MATLAB 的
18、命令窗口或是其他任意 M 文件和脚本文件中使用匿名函数。,匿名函数的格式为:fhandle=(arglist)expr 其中 fhandle 是为该函数创建的函数句柄;符号用于创建函数句柄;arglist 为用逗号分隔的参数列表;expr 为函数主体,为 MATLAB 表达式。,P149 Eg.07-13,2023/11/8,42,function printyh(n)%打印杨辉三角形,本函数没有输出参数yh=1;disp(yh);if n=1,return;endyh=1,1;disp(yh);for k=3:n yh_old=yh;k2=ceil(k/2);for l=2:k2 yh(l)
19、=yh_old(l-1)+yh_old(l);end yh(k2+1:k)=yh(k-k2:-1:1);disp(yh);end,函数文件举例,printyh.m,2023/11/8,43,调试程序,直接调试法 利用调试工具采用命令行调试程序 采用调试界面调试程序,2023/11/8,44,直接调试法,MATLAB 语言具有强大的运算能力,指令系统简单,因此程序通常非常简洁。对于简单的程序可以采用直接调试的方法。,在程序调试时,程序运行中变量的值为一个重要的线索。由于在函数调用时只返回最后的输出参数,而不返回中间变量,因此,可以选择下面的方法查看程序运行中的变量值。(1)通过分析后,将可能出错
20、的语句后面的分号(;)删除,将结果显示在命令窗口中,与预期值进行比较;(2)利用函数 disp 显示中间变量的值;(3)在程序中的适当位置添加 keyboard 指令。当 MATLAB 执行至此处时将暂停,等待用户反应。当程序运行至此时将暂停,在命令窗口中显示 k提示符,用户可以查看工作区中的变量,可以改变变量的值。输入 return 指定返回程序,继续运行。,2023/11/8,45,Set/Clear Breakpoint,设置或清除断点。可以选择该选项对当前行进行操作,或者通过快捷键 F12,或者直接点击该行左侧的“-”,如图所示。设置断点时该处显示为红点。再次进行相同的操作则删除该断点。,2023/11/8,46,Set/Modify Conditional Breakpoint,该选项用于设置或修改条件断点。,