当前位置首页 > 办公文档 > 工作计划
搜柄,搜必应! 快速导航 | 使用教程  [会员中心]

MATLAB程序设计

文档格式:PPT| 62 页|大小 290KB|积分 10|2022-08-09 发布|文档ID:133278470
第1页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 62
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • 第二节第二节 MATLAB程序设计程序设计1 M文件文件2 程序控制结构程序控制结构3 函数文件函数文件4 程序举例程序举例5 程序调试程序调试1 M文件文件1.1 M文件概述文件概述 用用MATLAB语言编写的程序,称为语言编写的程序,称为M文件M文件可文件可以根据调用方式的不同分为两类:以根据调用方式的不同分为两类:1、命令文件、命令文件(也称为脚本文件也称为脚本文件)(Script File)2、函数文件、函数文件(Function File)命令文件命令文件(Script File):命令简单罗列,使用主窗口中变量,命令简单罗列,使用主窗口中变量,输出也存放在主窗口对应的内存中输出也存放在主窗口对应的内存中函数文件函数文件(Function File):除命令罗列外,还有参数的输入和除命令罗列外,还有参数的输入和 输出操作,并且具有固定的格式输出操作,并且具有固定的格式1、首先建立命令文件并以文件名、首先建立命令文件并以文件名f2c.m存盘clear;%清除工作空间中的变量清除工作空间中的变量 f=input(输入华氏温度输入华氏温度f=);c=5*(f-32)/92、然后在然后在MATLAB的命令窗口中输入的命令窗口中输入f2c,将会执行该命,将会执行该命 令文件,执行情况为:令文件,执行情况为:l f2cl 输入华氏温度输入华氏温度f=73l c=l 22.7778例例1 建立命令文件将华氏温度建立命令文件将华氏温度 f 转换为摄氏温度转换为摄氏温度 c。

    1.2 M文件的建立与打开文件的建立与打开1.2.1建立新的建立新的M文件文件 为建立新的为建立新的M文件,启动文件,启动MATLAB文本编辑器有文本编辑器有3种方法:种方法:(1)菜单操作:从菜单操作:从File菜单中选择菜单中选择New菜单项,再选择菜单项,再选择M-file 命令,则出现命令,则出现MATLAB 文本编辑器窗口文本编辑器窗口2)命令操作:在命令操作:在MATLAB命令窗口输入命令命令窗口输入命令edit,则启动,则启动 MATLAB文本编辑器文本编辑器M文件是一个文本文件,它可以用任何编辑程序来建立文件是一个文本文件,它可以用任何编辑程序来建立和编辑3)命令按钮操作:单击命令按钮操作:单击MATLAB主窗口工具栏上的主窗口工具栏上的New M-File命令按钮命令按钮1.2.2 打开已有的打开已有的M文件文件打开已有的打开已有的M文件,也有文件,也有3种方法:种方法:(1)菜单操作:从菜单操作:从File菜单中选择菜单中选择Open命令,则出现命令,则出现Open 对话框,在对话框中选中所需打开的对话框,在对话框中选中所需打开的M文件2)命令操作在命令操作在MATLAB命令窗口输入命令:命令窗口输入命令:edit 文件名文件名 则打开指定的则打开指定的M文件。

    文件3)命令按钮操作单击主窗口工具栏上的命令按钮操作单击主窗口工具栏上的Open File命令按命令按 钮,则在弹出对话框中选择所需打开的钮,则在弹出对话框中选择所需打开的M文件2 程序控制结构程序控制结构2.1 顺序结构顺序结构普通结构普通结构2.1.1数据的输入数据的输入 从键盘输入数据,则可以使用从键盘输入数据,则可以使用input函数来进行,该函数的函数来进行,该函数的调用格式为:调用格式为:变量变量=input(提示信息,选项提示信息,选项);其中提示信息为一个字符串,用于提示用户输入什么样的数据其中提示信息为一个字符串,用于提示用户输入什么样的数据如果在如果在input函数调用时采用函数调用时采用s选项,则允许用户输入选项,则允许用户输入一个字符串一个字符串;如果省略则不识别字符串如果省略则不识别字符串例如,想输入一个人的姓名,可采用命令:例如,想输入一个人的姓名,可采用命令:xm=input(Whats your name?,s);2.1.2数据的输出数据的输出MATLAB提供的命令窗口输出函数主要有提供的命令窗口输出函数主要有disp函数,其调用函数,其调用格式为格式为 disp(输出项输出项1,输出项输出项2,)其中输出项既可以为字符串,也可以为矩阵。

    其中输出项既可以为字符串,也可以为矩阵例例2 输入输入x,y的值,并将它们的值互换后输出的值,并将它们的值互换后输出程序如下:程序如下:x=input(Input x please.);y=input(Input y please.);z=x;x=y;y=z;disp(x);disp(y);例例3 求一元二次方程求一元二次方程ax2+bx+c=0的根程序如下:程序如下:a=input(a=?);b=input(b=?);c=input(c=?);d=b*b-4*a*c;x=(-b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a);disp(x1=,num2str(x(1),x2=,num2str(x(2);la=?3lb=?6lc=?9lx1=-1+1.4142i,x2=-1-1.4142i函数函数num2str(),把数值转化为字符串把数值转化为字符串2.1.3程序的暂停程序的暂停 1、暂停执行可以使用、暂停执行可以使用pause指令,其调用格式为:指令,其调用格式为:pause(延迟秒数延迟秒数)如:如:pause(3)则延时则延时3秒秒 如果省略延迟时间,则将暂停程序,直到用户按如果省略延迟时间,则将暂停程序,直到用户按 任一键后程序继续执行。

    任一键后程序继续执行2、keyboard 指令没有调用参数,每次该指令出现,指令没有调用参数,每次该指令出现,则用户获得操作权,程序暂停,同时命令提示符则用户获得操作权,程序暂停,同时命令提示符 变化为变化为K,用户可以输入其他指令运行,如果想用户可以输入其他指令运行,如果想 继续程序的执行,只需输入继续程序的执行,只需输入return并按下回车并按下回车3、要强行中止程序的运行可使用、要强行中止程序的运行可使用Ctrl+break操作2.2 选择结构选择结构1if语句语句 在在MATLAB中,中,if语句有语句有3种格式1)单分支单分支if语句:语句:实例:实例:if 条件条件 if a,小于小于 ,=,=,小于等小于等于于 =,30 语句组语句组1 b=a-3;else else 语句组语句组2 b=a+3;end end 当条件成立时,执行语句组当条件成立时,执行语句组1,否则执行语,否则执行语句组句组2,语句组,语句组1或语句组或语句组2执行后,再执行执行后,再执行if语语句的后继语句句的后继语句程序如下:程序如下:x=input(请输入请输入x的值的值:);if x=1 y=10;elseif(x-1)&(x1)y=0;else y=-10;end 例例5:分段函数:分段函数 switch语句根据表达式的取值不同,分别执行不同语句根据表达式的取值不同,分别执行不同的语句,其语句格式为:的语句,其语句格式为:(其中(其中break可加可不加)可加可不加)switch 表达式表达式 case 表达式表达式1 语句组语句组1 case 表达式表达式2 语句组语句组2 case 表达式表达式m 语句组语句组m otherwise 语句组语句组n end2switch语句语句 price 200 没有折扣没有折扣 200 price500 3%折扣折扣 500 price1000 5%折扣折扣 1000price2500 8%折扣折扣 2500price fix(-0.9-0.1 1.1 1.5)lans=l 0 0 1 1l同类函数有:l四舍五入取整round()l向证无穷方向取整ceil()l向负无穷方向取整floor()元胞数组(cell array):允许存放,操作各种不同类型,不同大小的数据。

    l A=rand(2,2);l B=rand(3,3);l C=good;l D=0;l X(1,1)=A;l X(1,2)=B;l X(2,1)=C;l X(2,2)=Dl celldisp(X(1,1)lans1=l 0.9501 0.6068l 0.2311 0.48602.3 循环结构循环结构1for语句语句for语句的格式为:语句的格式为:for 循环变量循环变量=表达式表达式1:表达式表达式2:表达式表达式3 循环体语句循环体语句 end 其中表达式其中表达式1的值为循环变量的初值,的值为循环变量的初值,表达式表达式2的值为步长,的值为步长,表达式表达式3的值为循环变量的终值的值为循环变量的终值步长为步长为1时,表达式时,表达式2可以省略可以省略for m=100:999 m1=fix(m/100);%求求m的百位数字的百位数字 m2=rem(fix(m/10),10);%求求m的十位数字的十位数字 m3=rem(m,10);%求求m的个位数字的个位数字 if m=m1*m1*m1+m2*m2*m2+m3*m3*m3 disp(m)endend其中:其中:rem为求余数为求余数例例8 一个三位整数各位数字的立方和等于该数本身则称该一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。

    输出全部水仙花数数为水仙花数输出全部水仙花数程序如下:程序如下:rem(4,3)ans=1 rem(5,3)ans=2 rem(6,3)ans=0程序如下:程序如下:y=0;n=100;for i=1:n y=y+1/(2*i-1);end例例3-9 已知已知 ,当,当n=100时,求时,求y的值在实际在实际MATLAB编程中,采用循环语句会降低其执行速度,编程中,采用循环语句会降低其执行速度,所以前面的程序通常由下面的程序来代替:所以前面的程序通常由下面的程序来代替:n=100;i=1:2:2*n-1;y=sum(1./i);1*2151311nyfor语句更一般的格式为:语句更一般的格式为:for 循环变量循环变量=矩阵表达式矩阵表达式 循环体语句循环体语句end执行过程是依次将矩阵的各列元素赋给循环变量,然后执执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕行循环体语句,直至各列元素处理完毕例例10 写出下列程序的执行结果写出下列程序的执行结果s=0;a=12,13,14;15,16,17;18,19,20;21,22,23;for k=a s=s+k;end disp(s);2while语句语句while语句的一般格式为:语句的一般格式为:while(条件条件)循环体语句循环体语句 end 其执行过程为:若条件成立,则执行循环体语句,其执行过程为:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循执行后再判断条件是否成立,如果不成立则跳出循环。

    环程序如下:程序如下:sum=0;和和cnt=0;输入数值的个数输入数值的个数val=input(Enter a number(end in 0):);while(val=0)sum=sum+val;cnt=cnt+1;val=input(Enter a number(end in 0):);endif(cnt 0)sum mean=sum/cntend 例例11 从键盘输入若干个数,当输入从键盘输入若干个数,当输入0时结束输入,求这些时结束输入,求这些数的平均值和它们之和数的平均值和它们之和3break语句和语句和continue语句语句 与循环结构相关的语句还有与循环结构相关的语句还有break语句和语句和continue语句它们一般与语句它们一般与if语句配合使用语句配合使用break语句用于终止循环的执行当在循环体内执行语句用于终止循环的执行当在循环体内执行到该语句时,程序将跳出循环,继续执行循环语句的下一到该语句时,程序将跳出循环,继续执行循环语句的下一语句continue语句控制跳过循环体中的某些语句当在循语句控制跳过循环体中的某些语句当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。

    语句,继续下一次循环程序如下:程序如下:for n=100:200 if rem(n,21)=0 continue end breakendn例例12 求求100,200之间第一个能被之间第一个能被21整除的整数整除的整数for m=1:500 s=0;for k=1:m/2 if rem(m,k)=0 s=s+k;end end if m=s disp(m);endend4循环的嵌套循环的嵌套 如果一个循环结构的循环体又包括一个循环结构,如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构就称为循环的嵌套,或称为多重循环结构例例13 若一个数等于它的各个真因子之和,则称该数为完数,若一个数等于它的各个真因子之和,则称该数为完数,如如6=1+2+3,所以,所以6是完数求是完数求1,500之间的全部完数之间的全部完数3 函数文件(用户自定义函数)函数文件(用户自定义函数)3.1 函数文件的基本结构函数文件的基本结构函数文件由函数文件由function语句引导,其基本结构为:语句引导,其基本结构为:function 输出形参表输出形参表=函数名函数名(输入形参表输入形参表)注释说明部分注释说明部分 函数体语句函数体语句1、以、以function开头的一行为引导行,表示该开头的一行为引导行,表示该M文件是文件是一个函数文件。

    并且保存的文件名和函数名相同一个函数文件并且保存的文件名和函数名相同2、函数名的命名规则与变量名相同函数名的命名规则与变量名相同3、输入形参为函数的输入参数,输出形参为函数的输、输入形参为函数的输入参数,输出形参为函数的输出参数当输出形参多于一个时,则用方括号括起来当输出形参多于一个时,则用方括号括起来例例14 编写函数文件求半径为编写函数文件求半径为r的圆的面积和周长的圆的面积和周长子函数子函数1、在某个函数文件中定义的其他函数,成为当前函数文件在某个函数文件中定义的其他函数,成为当前函数文件 的子函数,一般只能被当前函数文件调用的子函数,一般只能被当前函数文件调用2、基本结构:在函数文件、基本结构:在函数文件fun1.m中中 function y=fun1(x1,x2)y=fun2(x1,x2);function y=fun2(a,b)y=fun3(a,b);function y=fun4(e,f)各个子函数可以互相调用各个子函数可以互相调用 y=e+f ;function y=fun3(c,d)y=fun4(c,d);例15:绘制草帽函数3.2 函数调用函数调用函数调用的一般格式是:函数调用的一般格式是:输出实参表输出实参表=函数名函数名(输入实参表输入实参表)注意注意:1、输入参数用、输入参数用()输入输入 输出参数用输出参数用 输入输入 2、函数调用时各实参出现的顺序、个数,应与函函数调用时各实参出现的顺序、个数,应与函 数定义时形参的顺序、个数一致,否则会出错。

    数定义时形参的顺序、个数一致,否则会出错3、函数调用时,先将实参传递给相应的形参,从、函数调用时,先将实参传递给相应的形参,从 而实现参数传递,然后再执行函数的功能而实现参数传递,然后再执行函数的功能l s,p=fcircle(5)ls=l 78.5398lp=l 31.4159lme 例例16 利用函数的递归调用,求利用函数的递归调用,求n!n!本身就是以递归的形式定义的:本身就是以递归的形式定义的:显然,求显然,求n!需要求需要求(n-1)!,这时可采用递归调用递归,这时可采用递归调用递归调用函数文件调用函数文件factor.m如下:如下:function f=factor(n)if n factor(5)lans=l 120l y=factor(6);l yly=l 7203.3 函数参数的可调性函数参数的可调性 在调用函数时,在调用函数时,MATLAB用两个永久变量用两个永久变量 nargin nargout分别记录调用该函数时的输入实参和输出实参的个数分别记录调用该函数时的输入实参和输出实参的个数只要在函数文件中包含这两个变量,就可以准确地知道只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。

    数如何进行处理function fout=charray(a,b,c)if nargin=1 fout=a;elseif nargin=2 fout=a+b;elseif nargin=3 fout=(a*b*c)/2;end 例例17 nargin用法示例用法示例函数文件函数文件charray.m:l y=charray(2)ly=l 2l y=charray(2,3)ly=l 5l y=charray(2,3,4)ly=l 12例例18 全局变量应用示例定义两个函数全局变量应用示例定义两个函数l function y=g1(m,n)lglobal M NlM=m;lN=n;ly=g2(1,1);3.4 全局变量与局部变量全局变量与局部变量 全局变量用全局变量用global命令定义,格式为:命令定义,格式为:global 变量名变量名lfunction y=g2(a,b)lglobal M Nly=a*M+b*N;调用:l g1(2,5)lans=l 73.4 程序举例程序举例例例19 猜数首先由计算机产生猜数首先由计算机产生1,100之间的均匀分布之间的均匀分布的一个随机整数,然后由用户猜测所产生的随机数。

    的一个随机整数,然后由用户猜测所产生的随机数根据用户猜测的情况给出不同提示:根据用户猜测的情况给出不同提示:如猜测的数大于产生的数,则显示如猜测的数大于产生的数,则显示“High”,小于则显示小于则显示“Low”,等于则显示等于则显示“You win”,同时退出同时退出用户最多可以猜用户最多可以猜7次提示:随机数生成指令提示:随机数生成指令 rand答案:答案:lfunction y=play n =0;m=ceil(100*rand);if m=0 m=1;end while(nm)disp(High);elseif(x fun=2*a+b2+3*a*b;y=myfun(fun,4,5)y=934 程序调试程序调试4.1 程序调试概述程序调试概述 一般来说,应用程序的错误有两类,一类一般来说,应用程序的错误有两类,一类是语法错误,另一类是运行时的错误语法错是语法错误,另一类是运行时的错误语法错误包括词法或文法的错误,例如函数名的拼写误包括词法或文法的错误,例如函数名的拼写错、表达式书写错等错、表达式书写错等程序运行时的错误是指程序的运行结果有错误,程序运行时的错误是指程序的运行结果有错误,这类错误也称为程序逻辑错误。

    这类错误也称为程序逻辑错误4.2 调试器调试器1Debug 该菜单项用于程序调试,需要与该菜单项用于程序调试,需要与Breakpoints菜菜单项配合使用单项配合使用2Breakpoints 共有共有6个菜单命令,前两个是用于在程序中设置个菜单命令,前两个是用于在程序中设置和清除断点的,后和清除断点的,后4个是设置停止条件的,用于临时个是设置停止条件的,用于临时停止停止M文件的执行,并给用户一个检查局部变量的机文件的执行,并给用户一个检查局部变量的机会,相当于在会,相当于在M文件指定的行号前加入了一个文件指定的行号前加入了一个keyboard命令例:求素数矩阵参数操作矩阵参数操作ln=rank(A)n 是矩阵是矩阵 A的秩的秩lx=det(A)x 是矩阵是矩阵 A的行列式的行列式lx=size(A)x 是由是由2个元素组成的行向个元素组成的行向 量,分别为行和列数量,分别为行和列数lx=length(v)x 是向量是向量v的长度的长度lx=trace(A)x是矩阵是矩阵A的迹的迹(对角元素之和对角元素之和)lx=norm(A)x 是向量或矩阵是向量或矩阵A的范数的范数矩阵操作矩阵操作lA=magic(n)A为为 n n 的魔方矩阵的魔方矩阵lA=diag(v)生成以向量生成以向量v各元素为对角线的矩各元素为对角线的矩阵阵 v=diag(A)生成以矩阵生成以矩阵A各对角元素组成的各对角元素组成的向量向量lX=tril(A)X 是矩阵是矩阵A的下三角阵的下三角阵(包含对角包含对角线线)lX=triu(A)X 是矩阵是矩阵A的上三角阵的上三角阵(包含对角包含对角线线)矩阵操作矩阵操作lv=max(A)v 是矩阵是矩阵A各列最大值组成的向量,各列最大值组成的向量,如果如果A为向量,则为向量,则v为最大值。

    为最大值lv=min(A)v对应最小值,用法同对应最小值,用法同max lv=sum(A)v为求和操作,用法同为求和操作,用法同maxlv=mean(A)v为均值操作,用法同为均值操作,用法同max lA=sort(A,s)升序排序操作,升序排序操作,s=1,逐列逐列 s=2,逐行逐行 lV=median(A,s)求中间值操作求中间值操作,s的值同的值同sortlv=find(表达式表达式)返回满足表达式条件的所有元素的序号返回满足表达式条件的所有元素的序号 常用函数常用函数lchar 将数值转换为对应字符将数值转换为对应字符 如如:char(76)=Llsetstr 同同char ,在,在matlab7.0中被中被char代替代替 lint2str 将整数转换为字符串将整数转换为字符串 如如:int2str(76)=76 lnum2str 可以转换小数,且可以设置有效数位数可以转换小数,且可以设置有效数位数l num2str(1/11,4)=0.09091lstr2num 将字符串转换为数字将字符串转换为数字 如如:a=str2num(23.2)lupper lower 将大小写互相转换将大小写互相转换 如:如:lower(A)=al a=1 2 2;l norm(a)lans=l 3l A=magic(3)lA=l 8 1 6l 3 5 7l 4 9 2l max(A)lans=l 8 9 7l a=3 2 1 5 4;l b=find(a=3)lb=l 1 4 5l char(76)lans=lLl num2str(1/11,4)lans=l0.09091练习练习1:l1、求、求21到到37,所有能被,所有能被3或或5整除的数组成的向量。

    整除的数组成的向量l2、A=1 3 5 求矩阵的秩、矩阵的迹求矩阵的秩、矩阵的迹 2 3 4 判断矩阵是否奇异判断矩阵是否奇异 1 3 4 判断矩阵是否正定判断矩阵是否正定l3、求矩阵最大元素判断算法,并由输入的矩阵验证,、求矩阵最大元素判断算法,并由输入的矩阵验证,要求矩阵的大小任意要求矩阵的大小任意l4、求、求100以内的所有质数以内的所有质数l5、对、对1 2 3 6 11 20 37,分析其后续值求法程,分析其后续值求法程l 序,并写出序,并写出100以内的所有数以内的所有数l6、求题目、求题目2中矩阵中矩阵A的所有元素之和的所有元素之和练习练习2:l1、编制、编制function文件文件round.m,输入参数为半径,输入参数为半径r,输出,输出 参数为圆的周长参数为圆的周长L和面积和面积Sl2、设原定有、设原定有10人参加比赛,但是实际参加比赛的人数难人参加比赛,但是实际参加比赛的人数难 以事先确定,试编制一个函数文件以事先确定,试编制一个函数文件bisai.m,自己规定,自己规定 输入和输出参数,无论参加人数如何都可以按照从高输入和输出参数,无论参加人数如何都可以按照从高 到低的顺序输出分数序列。

    到低的顺序输出分数序列l3、编制程序、编制程序qiujie.m,输入方程组,输入方程组Ax=b的系数矩阵的系数矩阵A和和 向量向量b,则返回当前方程组的解的状况则返回当前方程组的解的状况(唯一解、多解、唯一解、多解、无解无解),且如果有唯一解,则解出唯一解并输出且如果有唯一解,则解出唯一解并输出练习练习3:l1、编制一个计算器程序、编制一个计算器程序jisuanqi.m,以子程序的方式实现以子程序的方式实现 加、减、乘、除、开方、平方等等操作加、减、乘、除、开方、平方等等操作具体的操作类型和需要的数据以输入参数的形式由主具体的操作类型和需要的数据以输入参数的形式由主 函数输入并传递给子函数函数输入并传递给子函数提示:考虑提示:考虑global 和和 nargin 的使用。

    点击阅读更多内容
    卖家[上传人]:沈阳哈登
    资质:实名认证