MATLAB编程入门.pdf
1数学实验Matlab 编程入门2Matlab 编程入门编程入门l Matlab 作为一种广泛应用于科学计算的工具软件,不仅作为一种广泛应用于科学计算的工具软件,不仅具有强大的数值计算能力和丰富的绘图功能,同时也可以具有强大的数值计算能力和丰富的绘图功能,同时也可以与与 C、FORTRAN 等高级语言一样进行等高级语言一样进行程序设计程序设计l 利用利用 Matlab 的程序控制功能,将相关的程序控制功能,将相关 Matlab 命令编成命令编成程序存储在一个文件中(程序存储在一个文件中(M 文件文件),然后在命令窗口中运),然后在命令窗口中运行该文件,行该文件,Matlab 就会自动依次执行文件中的命令,直到就会自动依次执行文件中的命令,直到全部命令执行完毕全部命令执行完毕l 在在 Matlab 程序设计中,要充分利用程序设计中,要充分利用 Matlab 数据结构的数据结构的特特点点,提提高编程高编程效率效率q Matlab 编程编程简介简介3q M 文件文件介绍介绍主要内容主要内容q Matlab 编程编程基础基础l 算算术术运算、关运算、关系系运算、运算、逻辑逻辑运算运算l 控制结构控制结构:顺:顺序结构、序结构、选择选择结构、结构、循环循环结构结构4l 用用 Matlab 语言编语言编写写的程序的程序称称为为 M 文件文件l M 文件以文件以.m 为为扩展名扩展名l M 文件文件是由若干是由若干 Matlab 命令命令组合组合在一在一起起构成的,构成的,它它可可以完成以完成某些操某些操作,也可以作,也可以实现某实现某种算种算法法q M 文件分文件分类类(根根据据调调用用方式方式的不同)的不同)lScript:脚本:脚本文件文件/命令文件命令文件lFunction:函:函数文件数文件M 文件文件q M 文件文件介绍介绍可以直可以直接接运行的运行的M文件文件5q M 文件的文件的创建创建的与编的与编辑辑M 文件文件是是文文本本文件,可以用文件,可以用任何任何文文本本编编辑器来建立辑器来建立和编和编辑辑,通常使通常使用用 Matlab 自自带带的的 M 文件编文件编辑器辑器M 文件文件l 新建新建一个一个 M 文件文件l 菜单操菜单操作作(File New M-File)l 命令命令操操作作(edit M 文件文件名名)l 命令命令按钮按钮(快捷键快捷键)l 打开已打开已有的有的 M 文件文件l 菜单操菜单操作作(File Open)l 命令命令操操作作(edit M 文件文件名名)l 命令命令按钮按钮(快捷键快捷键)l 双击双击 M 文件文件6编程示例编程示例u=0:pi/60:2*pi;v=0:pi/60:pi;U,V=meshgrid(u,v);R=3;X=R*sin(V).*cos(U);Y=R*sin(V).*sin(U);Z=R*cos(V);mesh(X,Y,Z);axis equal;l 编程编程方式:新建方式:新建一个一个 M 文文件件 myprg.m,内容如下:内容如下:例:例:用用 mesh 绘制绘制半径半径为为 4 的的球球l 命令行命令行方式:方式:u=0:pi/60:2*pi;v=0:pi/60:pi;U,V=meshgrid(u,v);R=3;X=R*sin(V).*cos(U);Y=R*sin(V).*sin(U);Z=R*cos(V);mesh(X,Y,Z);axis equal;在命令窗口在命令窗口输入输入 myprg,即即可执行该可执行该 M 文件文件7l 在命令窗口中在命令窗口中输入输入 f2cs,即即可执行该可执行该 M 文件文件5(32)9cf=例:例:编编写写M文件,将文件,将华氏温度转化华氏温度转化为为摄氏温度:摄氏温度:编程示例编程示例clear;%清除当前清除当前工作工作空间空间中的中的所所有有变量变量f=input(Input Fahrenheit temperature:);c=5*(f-32)/9;fprintf(The centigrade temperature is%gn,c);l 新建新建一个一个 M 文件文件f2c.m,内容如下:内容如下:l M文件运行文件运行所所产生产生的的变量都驻留变量都驻留在在 Matlab 当前当前工作工作空间空间l 百百分分号号是是注释符注释符l M文件文件必须必须在在当前当前工作工作目录目录下下才才能运行能运行8q M 文件文件介绍介绍主要内容主要内容q Matlab 编程编程基础基础l 算算术术运算、关运算、关系系运算、运算、逻辑逻辑运算运算l 控制结构控制结构:顺:顺序结构、序结构、选择选择结构、结构、循环循环结构结构9关系运算关系运算小于等于小于等于=小于小于=大于大于不等于不等于=等于等于=l 比较比较大大小小,如如果果结结论论是是 真真 则返回则返回 1,否则返回否则返回 0l 注意注意=与与=的的区别区别l 关关系操系操作作符符可以可以比较两比较两个个同样大同样大小小的数的数组组,或或用用来来比较比较一个数一个数组组和一个和一个标量标量,在后一种,在后一种情况情况,标量标量和数和数组组中的中的每每一个一个元素元素相相比较比较,比较比较结结果果与数与数组组大大小小一样一样q 关关系系运算运算符符例:例:2+2=4 x=5 0;4 2;x B=1 2 3;4 5 6;7 8 9;disp(B)displ 数据的数据的输输出出:disp A=Hello,Tom!;disp(A)例:例:16fprintffprintf(fid,format,variables)l 数据的数据的格格式化输式化输出出:fprintfl 按按指定指定的的格格式式将将变量变量的值的值输输出出到到屏幕或指定屏幕或指定的的文件文件l fid 为文件为文件句柄句柄,若若缺省缺省,则则输输出出到到屏幕上屏幕上l format 用用来来指定指定数据数据输输出出时时采采用的用的格格式式,包含包含:普通字符串、格式字符串、转义字符普通字符串、格式字符串、转义字符%d(整整数数)%e(实实数数:科学计数科学计数法法形形式式)%f(实实数数:小小数数形形式式)%g(由系由系统统自动自动选选取取上上述述两两种种格格式式之之一一)%s(输输出字符串出字符串)n(换行换行)t(制表符制表符)b(退格退格)(反斜杆反斜杆)%(百分号百分号)17fprintf a=Hello;b=2.4;c=100*pi;fprintf(a=%s,b=%f,c=%en,a,b,c)例:例:l format 中的中的格式字符串格式字符串要与要与输输出变量出变量一一一一对对应应l 可以可以没没有有输输出变量出变量 fprintf(Today is Mondayn)例:例:18pausel 暂停暂停:pausepause 或或 pause(n)若若想想强行强行终止终止正正常常运行的程序,可以运行的程序,可以使使用用 Ctrl+cl 其其中中 n 是是暂停暂停的时的时间间,以,以秒秒为为单单位位l 若若缺省缺省,则则将将暂停暂停程序,直到用程序,直到用户户按任按任意意键键后后继续继续l pause off 屏屏蔽蔽程序中程序中所所有有 pause 的作用的作用l pause on打开打开 pause 的作用的作用19选择选择结构结构 是根是根据据给给定定的的条条件成件成立立或或不成不成立立,分,分别别执执行不同的语行不同的语句句。Matlab 用于用于实现选择实现选择结构的语结构的语句句有有if 语语句句和和 switch 语语句句。选择结构选择结构20l 单单分分支支结构结构if expr(条条件件)语语句句组组endif 条件语句条件语句if expr(条条件件)语语句句组组1else语语句句组组2endl 双双分分支支结构结构21if expr1(条条件件1)语语句句组组1elseif expr2(条条件件2)语语句句组组2.elseif exprm(条条件件m)语语句句组组melse语语句句组组endl 多多分分支支结构结构if 条件语句条件语句22l 根根据据表表达达式式的不同的不同取取值,分值,分别别执行不同的语执行不同的语句句switch expr(表表达达式式)case value1(表表达达式式1)语语句句组组1case value2(表表达达式式2)语语句句组组2.case valuem(表表达达式式m)语语句句组组motherwise语语句句组组endswitch 语句语句23l Matlab 首先首先计算计算 expression 的值,然后将的值,然后将它它依次与依次与各各个个 case 指指令后的令后的检测检测值进行值进行比较比较,当当比较比较结结果果为为真真时,时,就执行相应的语就执行相应的语句句组组,然后,然后跳跳出出 switch 结构结构l switch 后后面面的的表表达达式式 expression 的值可以的值可以是是一个一个标量或字符串标量或字符串switch 语句语句l otherwise 指指令可以不令可以不出出现现l 如如果果所所有的有的比较比较结结果都果都为为假假,则则执行执行 otherwise 后后面面的语的语句句组组,然后,然后跳跳出出 switch 结构结构l 关于关于 switch 语语句句的的几几点点注注解解:24循环循环结构结构 是按是按照给照给定定的的条条件,件,重重复复执行执行指定指定的语的语句句。Matlab 用于用于实现循环实现循环结构的语结构的语句句有有 for 语语句句和和 while 语语句句循环结构循环结构25for var=expr循环循环体体end循环循环变量变量l 表表达达式式 expr 可以可以是是行行向向量量,也可以,也可以是是矩阵矩阵for 循环循环clear;y=0;n=100;for k=1:ny=y+1/(2*k-1);end例:例:已已知知,当当 n=100 时,时,求求 y 的值的值11113521yn=+L26l 循环循环语语句句可以可以嵌套嵌套使使用用while 循环循环while expr(条条件件)循环循环体体endl 不能在不能在 for 循环循环体体内内改改变变循环循环变量变量的值的值l 为为了了提提高高代码代码的运行的运行效率效率,应,应尽尽可能可能提提高高代码代码的的向向量量化化程程度度,避免避免 for 循环循环的的使使用用l 如如果果预先预先就就知道知道循环循环的次数,的次数,则则可以可以采采用用 for 循环循环;否则否则,如如果果预先无预先无法法确确定定循环循环的次数,的次数,则则可以可以使使用用while 循环循环。27编程示例编程示例数数论论中的一个有中的一个有趣问题趣问题:3n+1 问题问题:任任取取一个一个正整正整数,数,如如果果是是偶偶数,用数,用 2 除除,如如果果是是奇奇数,数,用用 3 乘乘再再加加 1,反反复这复这个个过过程,直到程,直到所所得得到的数为到的数为 1。问问:是:是否否存在存在使使该该过过程程永永不中不中止止的的整整数数?(exp01.m)例:例:28n=input(Please enter n:);nt=n;while n1if rem(n,2)=0n=n/2;elsen=3*n+1;endfprintf(n n=%d,n);endfprintf(n n=%d is not we need!n,nt);编程示例编程示例29l 这这个个例例子给子给出出了了计算计算 eps 的一种的一种方法方法。l 这这里我们里我们用大用大写写 EPS,因此因此系系统统中中 eps 的值不会的值不会被覆盖。被覆盖。当当 EPS=eps 时,时,条条件件仍仍成成立立;而;而当当 EPS=eps/2 时,时,条条件件为为假假,退退出出循环循环,所所以以最最后应有后应有 EPS=eps/2。k 用用来来记记录录循环循环次数次数。计算计算 Matlab 中中 eps 值值(exp02.m)while编程示例编程示例k=0;EPS=1;while(1+EPS)1EPS=EPS/2;k=k+1;end例:例:30lbreak和和continuel break 语语句句用于用于终止终止循环循环的执行,的执行,即即跳跳出最出最内内层层循环循环l continue 语语句句用于结用于结束束本本次次循环循环,进行,进行下下一次一次循环循环l break 和和 continue 一一般般与与 if 语语句句配配合使合使用用其它流控制语句其它流控制语句lreturnl return 语语句句用于用于退退出出正正在运行的在运行的脚本脚本或或函函数,数,通常通常用用在在函函数文件中数文件中31首先首先由由计算计算机随机机随机产生产生一个一个 1,100 之之间间的一个的一个整整数,数,然后然后由由用用户户猜测猜测所所产生产生的的这这个数个数。根根据用据用户户猜测猜测的的情况情况给给出出不同的不同的提提示示,如如果果猜测猜测的数大于的数大于产生产生的数,的数,则则显显示示Higher,小小于于则则显显示示 Lower,等于,等于则则显显示示 You won!,同时同时退退出出游戏。游戏。用用户最户最多多有有 7 次次机机会会。(exp03.m)编程示例编程示例猜猜数数游戏游戏例:例:32上机作业上机作业1、试说明试说明下下面面两两段段程序的功能,程序的功能,最最后后两两个个 x 值为值为多少?多少?2、已已知知 sin(x)的的幂幂级数级数展开展开公公式式为为x=1;while x+xx,x=x/2;end x=1;while x+xx,x=2*x;end 357sin()3!5!7!xxxxx=+L试试利用利用这这个个公公式式和和第第 1 题题中的中的技巧技巧,计算,计算 sin(/2)和和sin(31/2)的值,的值,并并与与 Matlab 自自带带的的 sin 函函数数比较比较,误差误差分分别别多多大大?为为什么?什么?