您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > matlab电子教案(7)
新疆大学重点课程·电子教案1页共16页第四章MATLAB的程序设计4.1程序设计概述一、程序设计的步骤:1.抽象出问题的数学模型2.根据数学模型写出解决问题的数学理论算法3.选择一门语言编译系统,设计合适的数据结构并写出计算机算法4.根据计算机算法写出程序代码5.程序代码经过调试后,编译成在操作系统支持下的可执行文件,这个可执行文件便是程序设计的最终结果。二、Matlab设计的步骤:1.抽象出问题的数学模型2.根据数学模型写出解决问题的数学理论算法3.选择一门语言编译系统,设计合适的数据结构并写出计算机算法4.根据计算机算法写出Matlab的程序代码5.程序代码经过调试后,成为(编译成)在Matlab支持下的可执行文件,这个可执行文件便是Matlab设计的最终结果.三、Matlab的程序代码Matlab的代码是以文件形式编辑、存储、运行的。这些文件通常是:1.M-脚本文件(M-函数文件,M-文件),它们通常是由M-file编辑器编制的,在命令窗口执行。2.GUI文件(“GUI”是图形用户界面的简称,是一个*.fig图形文件),它是由GUI编辑器编写的,通常与M-脚本文件相关联。GUI文件可视为M-脚本文件的组装器,它在命令窗口打开后,可通过鼠标来点击执行M-脚本文件。3.编写M-脚本文件是Matlab的程序设计的核心。在Matlab的程序设计中以下几个问题是要关注的:程序的结构:顺序结构,选择结构,循环结构新疆大学重点课程·电子教案2页共16页函数的调用及参数值的传递以上问题要通过实践学习总结4.2M文件一、M文件的建立与编辑1.建立新的M文件(1)菜单操作:MATLAB命令窗口的File菜单→New菜单项→M-file命令。(2)命令操作:在MATLAB命令窗口输入命令edit。(3)命令按钮操作:单击MATLAB命令窗口工具栏上的“新建”命令按钮。2.编辑已有的M文件二、M文件的分类分类:命令文件(ScriptFile)和函数文件(FunctionFile)。例4-1建立一个命令文件将变量a,b的值互换,然后运行该命令文件。首先建立命令文件并以文件名exch.m存盘:clear;a=1:10;b=[11,12,13,14;15,16,17,18];c=a;a=b;b=c;ab然后在MATLAB的命令窗口中输入exch,将会执行该命令文件。例4-2建立一个函数文件将变量a,b的值互换,然后在命令窗口调用该函数文件。首先建立函数文件fexch.m:function[a,b]=exch(a,b)c=a;a=b;b=c;然后在MATLAB的命令窗口调用该函数文件:clear;x=1:10;y=[11,12,13,14;15,16,17,18];新疆大学重点课程·电子教案3页共16页[x,y]=fexch(x,y)三、数据的输入输出1、input函数调用格式为:A=input(提示信息,选项);其中提示信息为一个字符串,用于提示用户输入什么样的数据。如果在input函数调用时采用's'选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令:xm=input('What''syourname?','s')2、disp函数调用格式为:disp(输出项)。其中输出项既可以为字符串,也可以为矩阵。注意:用disp函数显示矩阵时将不显示矩阵的名字,而且其格式更紧密,且不留任何没有意义的空行。例4-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))]);3、pause函数:其调用格式为:pause(延迟秒数)。如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。若要强行中止程序的运行可使用Ctrl+C命令。四、程序结构1、选择结构if语句在MATLAB中,if语句有3种格式。(1)单分支if语句语句格式为:if条件语句组end新疆大学重点课程·电子教案4页共16页当条件成立时,则执行语句组,执行完之后继续执行if语句的后继语句,若条件不成立,则直接执行if语句的后继语句。(2)双分支if语句语句格式为:if条件语句组1else语句组2end当条件成立时,执行语句组1,否则执行语句组2,语句组1或语句组2执行后,再执行if语句的后继语句。例4-4计算分段函数值。程序如下:x=input('请输入x的值:');ifx==10y=cos(x+1)+sqrt(x*x+1);elsey=x*sqrt(x+sqrt(x));endy(3)多分支if语句语句格式为:if条件1语句组1elseif条件2语句组2……elseif条件m语句组melse语句组m+1end例4-5输入一个字符,若为大写字母,则输出其后继字符,若为小写字母,则输出其前导字符,若为数字字符则输出其对应的数值,若为其他字符则原样输出。新疆大学重点课程·电子教案5页共16页程序如下:c=input('请输入一个字符','s');ifc='A'&c='Z'disp(setstr(abs(c)+1));elseifc='a'&c='z'disp(setstr(abs(c)-1));elseifc='0'&c='9'disp(abs(c)-abs('0'));elsedisp(c);endswitch语句其语句格式为:switch表达式case表达式1语句组1case表达式2语句组2……case表达式m语句组motherwise语句组m+1end例4-6某商场对顾客所购买的商品实行打折销售,已知打折标准,求所售商品的实际销售价格。程序如下:price=input('请输入商品价格');switchfix(price/100)case{0,1}rate=0;case{2,3,4}rate=3/100;新疆大学重点课程·电子教案6页共16页casenum2cell(5:9)rate=5/100;casenum2cell(10:24)rate=8/100;casenum2cell(25:49)rate=10/100;otherwiserate=14/100;endprice=price*(1-rate)try语句语句格式为:try语句组1catch语句组2endtry语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。这种试探性执行语句是其他高级语言所没有的。例4-7矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。程序如下:A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endClasterr%显示出错原因新疆大学重点课程·电子教案7页共16页2、循环结构for语句语句格式为:for循环变量=表达式1:表达式2:表达式3循环体语句end首先计算三个表达式的值,再将表达式1的值赋给循环变量,如果此时循环变量的值介于表达式1和表达式3的值之间,则执行循环体语句,否则结束循环的执行。执行完一次循环之后,循环变量自增一个表达式2的值,然后再判断循环变量的值是否介于表达式1和表达式3之间,如果满足仍然执行循环体,直至不满足为止。这时将结束for语句的执行,而继续执行for语句后面的语句。例4-8已知求y的表达式;当n=100时,求y的值。程序如下:y=0;n=100;fori=1:ny=y+1/i/i;endy在实际MATLAB编程中,为提高程序的执行速度,常用向量运算来代替循环操作:n=100;i=1:n;f=1./i.^2;y=sum(f)例4-9求定积分。程序如下:a=0;b=3*pi;n=1000;h=(b-a)/n;x=a:h:b;f=exp(-0.5*x).*sin(x+pi/6);fori=1:ns(i)=(f(i)+f(i+1))*h/2;ends=sum(s)新疆大学重点课程·电子教案8页共16页事实上,MATLAB提供了有关数值积分的标准函数,实际应用中可直接调用这些函数求数值积分。for语句更一般的格式:for循环变量=矩阵表达式循环体语句end执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。实际上,“表达式1:表达式2:表达式3”是一个仅为一行的矩阵(行向量),因而列向量是单个数据。例4-10已知5个学生4门功课的成绩,求每名学生的总成绩。程序如下:s=0;a=[65,76,56,78;98,83,74,85;76,67,78,79;98,58,42,73;67,89,76,87];fork=as=s+k;enddisp(s');while语句while语句的一般格式为:while(条件)循环体语句endx=a:h:bf(1)—f(1001)s(1)—s(1000)新疆大学重点课程·电子教案9页共16页其执行过程为:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环。与循环结构相关的还有一个break语句,当在循环体内执行到该语句时,程序将跳出循环。该语句一般与if语句配合使用。例4-11用while语句实现例4-8,。程序如下:y=0;i=1;while1f=1/i/i;y=y+f;ifi==100break;endi=i+1;endy循环的嵌套•如果一个循环结构的循环体又包括一个循环结构,就称为循环的嵌套,或称为多重循环结构。可以按照嵌套层数,分别叫做二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫作外循环。•在设计多重循环时,要特别注意内、外循环之间的关系,以及各语句放置的位置,不要搞错。例4-13用筛选法求某自然数范围内的全部素数。程序如下:m=input('m=');p=2:m;fori=2:sqrt(m)n=find(rem(p,i)==0&p~=i);p(n)=[];end新疆大学重点课程·电子教案10页共16页p五、函数文件1、函数文件的基本结构函数文件由function语句引导,其基本结构为:function输出形参表=函数名(输入形参表)注释说明部分函数体语句说明:(1)关于函数文件名:函数文件名与函数名也可以不相同。当两者不同时,MATLAB将忽略函数名而确认函数文件名,因此调用时使用函数文件名。(2)关于注释说明部分。注释说明包括三部分内容:①紧随函数文件引导行之后以%开头的第一注释行。②第一注释行及之后连续的注释行。③与在线帮助文本相隔一空行的注释行。(3)关于return语句。执行到该语句就结束函数的执行,程序流程转至调用该函数的位置。通常,在函数文件中也可不使用return语句,这时在被调函数执行完成后自动返回。例4-14编写函数文件求半径为r的圆的面积和周长。函数文件如下:function[s,p]=fcircle(r)%CIRCLEcalculatetheareaandperimeterofacircleofradiir%r圆半径%s圆面积%p圆周长%2006年11月20日编s=pi*r*r;p=2*pi*r;将以上函数文件以文件名fcircle.m存入c:\matlab6p5\work下,然后在MATLAB命令窗口调用该函数:[s,p]=fcircle(10)2、函数调用新疆大学重点课程·电子教案11页共16页函数调用的一般格式是:[输出实参表]=函数名(输入实参表)例4-15利用函数文件,实现直角坐标(x,y)与极坐标(ρ,θ)之间的转换。函数文件tran.m:function[rho,theta]=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);调用tran.m的命令文件main1.m:
本文标题:matlab电子教案(7)
链接地址:https://www.777doc.com/doc-2882182 .html