MATLAB_SWPU第四章 基本编程.ppt

上传人:qwe****56 文档编号:70012649 上传时间:2023-01-14 格式:PPT 页数:78 大小:276.50KB
返回 下载 相关 举报
MATLAB_SWPU第四章 基本编程.ppt_第1页
第1页 / 共78页
MATLAB_SWPU第四章 基本编程.ppt_第2页
第2页 / 共78页
点击查看更多>>
资源描述

《MATLAB_SWPU第四章 基本编程.ppt》由会员分享,可在线阅读,更多相关《MATLAB_SWPU第四章 基本编程.ppt(78页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第四章 MATLAB基本编程4.1 M4.1 M文件入门文件入门4.2 4.2 程序控制程序控制 4.2.1 4.2.1 顺序结构顺序结构 4.2.2 4.2.2 选择结构选择结构 4.2.3 4.2.3 分支结构分支结构 4.2.4 4.2.4 模块模块 4.2.5 for 4.2.5 for循环结构循环结构 4.2.6 while 4.2.6 while循环结构循环结构 4.2.7 4.2.7 人机交互命令人机交互命令m文件简介n用户如想灵活应用matlab去解决实际问题,充分调用matlab的科学技术资源,就需要编辑m文件n包含matlab语言代码的文件称为m文件,其扩展名为m。n编辑m

2、文件可使用各种文本编辑器。n M文本编辑器 nM文件的基本属性 nM文件的组成部分 n脚本式M文件 n函数式M文件 4.1M文件入门文件入门(1)M文本编辑器nM文件的语法类似于一般高级语言,是一种程序化的编程语言,但是,与传统的高级语言相比,M文件又有自己的特点。它只是一个简单的ASC型码文本文件,因此,它的语法比一般的高级语言要简单,程序也容易调试,并且有很好的交互性。M文件的基本属性nM文件有两种,一种为脚本式(Script),一种为函数式(Function)。n函数M文件必须满足一些标准,另外,它们还应该满足一些MATLAB 7的属性。主要有以下几点:n函数式M文件名和出现在文件的第一

3、行的函数名必须相同。实际上,MATLAB 7忽略了第一行的函数名,并且根据存储在硬盘上的文件名来执行函数。nM文件的组成部分n函数式M文件的组成部分。n调出Medit窗口,在里边输入如下内容:nfunction f=fact(n)%函数的定义行n%Compute a factorial value.%H1行n%FACT(N)returns the factorial of N,%帮助文本n%usually denoted by N!n%Put simply,FACT(N)is PROD(1:N).%注释nf=prod(1:n);%函数体M文件的组成部分及其功能 nM文件的组成部分及其功能 组

4、成 部 分描 述函数定义行(仅限于函数式M文件)定义函数名,以及输入和输出变量的数目和顺序H1 行H1行对程序进行概括性的描述,使用help和lookfor命令都可以调出此行帮助文本这是比H1 行更详细的帮助信息,使用help命令时与H1行一起显示函数体函数体是M文件的主要部分,程序的计算和设计都在此实现注释解释程序行的意义(2)脚本式M文件 n用户可以将需要重复输入的所有命令按顺序放到一个扩展名为m的文本文件下,每次运行时只要输入该M文件的文件名即可。n用户自己创建的M文件的文件名要避免与MATLAB 7的内置函数和工具箱中的函数重名,以免发生内置函数被替换的情况。脚本式M文件举例nfor

5、i=1:10na=sin(i);nfprintf(sin(%d)=,i)nfprintf(%12.8fn,a)nend脚本式M文件举例n本脚本式M文件绘制一个正弦曲线:n%此文件用于绘制【2pi,2pi】区间的正弦曲线图nx=-2*pi:0.05:2*pi;ny=sin(x);nplot(x,y,c+)nlegend(正弦曲线图)(3)函数式M文件n函数式M文件一般都要自带参数,并且有返回结果。n函数式M文件的第一行都是以function开始,说明此文件是一个函数。函数式M文件中的变量都不是全局变量,仅在函数运行期间有效,函数运行完毕之后,它所定义的变量将从工作区间中清除。n脚本式没有函数名,

6、函数式有函数名,一般要自带参数,返回结果函数式M文件举例n例11-4 判断某一年是否为闰年。n解:调出Medit窗口,在里边输入如下内容。n%该函数用于判断某一年是否为闰年n%使用格式为isleapea(y),其中y是用户所要计算的年份nfunction isleapyear(year)nsign=0;nif rem(year,4)=0n sign=sign+1;nendnif rem(year,100)=0n sign=sign-1;n endn if rem(year,400)=0n sign=sign+1;n endn if sign=1n fprintf(%4d year is a l

7、eap year.n,year)n else n fprintf(%4d year is not a leap year.n,year)nend函数文件的基本结构函数文件的基本结构 函数文件由function语句引导,其基本结构为:function输出形参表输出形参表=函数名函数名(输入形参输入形参表表)注释说明部分注释说明部分函数体语句函数体语句 说明:说明:(1)关于函数文件名关于函数文件名:函数文件名与函数名也可以函数文件名与函数名也可以不相同。不相同。当两者不同时,当两者不同时,MATLAB将忽略函数将忽略函数名而确认函数文件名,因此调用时使用函数文名而确认函数文件名,因此调用时使用函

8、数文件名件名。(2)关于注释说明部分。关于注释说明部分。注释说明包括三部分内注释说明包括三部分内容:容:紧随函数文件引导行之后以紧随函数文件引导行之后以%开头的第开头的第一注释行。一注释行。第一注释行及之后连续的注释行。第一注释行及之后连续的注释行。与在线帮助文本相隔一空行的注释行。与在线帮助文本相隔一空行的注释行。(3)关于关于return语句。语句。执行到该语句就结束函数的执行到该语句就结束函数的执行,程序流程转至调用该函数的位置。通常,执行,程序流程转至调用该函数的位置。通常,在函数文件中也可不使用在函数文件中也可不使用return语句,这时在语句,这时在被调函数执行完成后自动返回。被调

9、函数执行完成后自动返回。例例 编写函数文件求半径为编写函数文件求半径为r的圆的面积和周长。的圆的面积和周长。function s,p=fcircle(r)%CIRCLE calculate the area and perimeter of a circle of radii r%r圆半径圆半径%s圆面积圆面积%p圆周长圆周长%2001年年7月月30日编日编s=pi*r*r;p=2*pi*r;将以上函数文件以文件名将以上函数文件以文件名fcircle.m存入存入c:matlab6p5work下,下,然后在然后在MATLAB命令窗口调用该函数:命令窗口调用该函数:s,p=fcircle(10)函

10、数调用函数调用 函数调用的一般格式是:函数调用的一般格式是:输出实参表输出实参表=函数名函数名(输入实参表输入实参表)例例利用函数文件,实现直角坐标利用函数文件,实现直角坐标(x,y)与极坐标与极坐标(,)之间的之间的转换。转换。函数文件函数文件tran.mfunction rho,theta=tran(x,y)rho=sqrt(x*x+y*y);theta=atan(y/x);调用调用tran.m的命令文件的命令文件main1.m:x=input(Please input x=:);y=input(Please input y=:);rho,theta=tran(x,y);rho,theta

11、M文件的建立与编辑文件的建立与编辑1.建立新的建立新的M文件文件(1)菜单操作:菜单操作:MATLAB命令窗口的命令窗口的File菜单菜单 New菜单项菜单项M-file命令。命令。(2)命令操作:在命令操作:在MATLAB命令窗口输入命令命令窗口输入命令edit。(3)命令按钮操作:单击命令按钮操作:单击MATLAB命令窗口工命令窗口工具栏上的具栏上的“新建新建”命令按钮。命令按钮。2.编辑已有的编辑已有的M文件文件 数据文件.matn mat文件是matlab以标准二进制格式保存的数据文件,可将工作空间中有用的数据变量保存下来。n mat文件的生成和调用是由函数save和load完成的。例

12、如:load gatlin 例例 建立一个建立一个命令文件命令文件将变量将变量a,b的值互换,然后运的值互换,然后运行该命令文件。行该命令文件。首先建立命令文件并以文件名首先建立命令文件并以文件名exch.m存盘:存盘:clear all;a=1:10;b=11,12,13,14;15,16,17,18;c=a;a=b;b=c;a b然后在然后在MATLAB的命令窗口中输入的命令窗口中输入exch,将会执,将会执行该命令文件。行该命令文件。exch 例 建立一个建立一个函数文件函数文件将变量将变量a,b的值互换,然的值互换,然后在命令窗口调用该函数文件。后在命令窗口调用该函数文件。首先建立首先

13、建立函数文件函数文件fexch.m:function a,b=fexch(a,b)c=a;a=b;b=c;然后在然后在MATLAB的命令窗口调用该函数文件:的命令窗口调用该函数文件:clear all;x=1:10;y=11,12,13,14;15,16,17,18;x,y=fexch(x,y)函数式函数式M文件变量以局部变量的形式文件变量以局部变量的形式存储在文件中,脚本式存储在文件中,脚本式M文件则与之截文件则与之截然不同,它中改变的值要带回到工作区然不同,它中改变的值要带回到工作区间来。间来。见见p181例例10-5数据的输入输出数据的输入输出inputinput函数函数调用格式为:调用

14、格式为:A=input(提示信息,选项提示信息,选项);其中提示信息为一个字符串,用于提示用户输入其中提示信息为一个字符串,用于提示用户输入什么样的数据。什么样的数据。A=input(A=)如果在如果在input函数调用时采用函数调用时采用s选项,则允许用选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,户输入一个字符串。例如,想输入一个人的姓名,可采用命令:可采用命令:xm=input(Whats your name?,s)disp disp函数函数 调用格式为调用格式为:disp(输出项输出项)其中输出项既可以为字符串,也可以为矩阵。其中输出项既可以为字符串,也可以为矩阵。注意:用

15、注意:用disp函数显示矩阵时将不显示矩阵的函数显示矩阵时将不显示矩阵的名字,而且其格式更紧密,且不留任何没有意名字,而且其格式更紧密,且不留任何没有意义的空行。义的空行。b=2 3 4 5 6 7 8 9 0 disp(b)2 3 4 5 6 7 8 9 0disp(Jan Feb Mar)disp(rand(5,3)Jan Feb Mar 0.9501 0.7621 0.6154 0.2311 0.4565 0.7919 0.6068 0.0185 0.9218 0.4860 0.8214 0.7382 0.8913 0.4447 0.1763 程序如下:程序如下:a=input(a=?)

16、;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);例 求一元二次方程ax2+bx+c=0的根。4.2.程序控制n最简单的程序控制就是顺序结构,用户依次输入命令语句即可。nMATLAB 7语言还提供了4种高级的控制结构。它们是:if-else-end结构、switch-case-otherwise-end结构、for循环和while循环。4.2.1顺序结构 n顺序结构是最简单的程序结构,用户在编写好程序之后,系统将按照

17、程序的物理位置顺次执行。na=1;nb=2;nc=3;ns1=a+bns2=s1+cns3=s2/s2 4.2.2 4.2.2 选择结构选择结构ifif语句语句 在在MATLAB中,中,ifif语句有语句有3种格式。种格式。1.单分支单分支ifif语句语句语句格式为:语句格式为:if 条件条件语句组语句组end当条件成立时,则执行语句组,执行完之后继当条件成立时,则执行语句组,执行完之后继续执行续执行ifif语句的后继语句,若条件不成立,则语句的后继语句,若条件不成立,则直接执行直接执行ifif语句的后继语句。语句的后继语句。例 程序如下:function f=ifone(x)if x0 fp

18、rintf(%f is a positive numbern,x)end 2.双分支双分支if语句语句 语句格式为:语句格式为:if 条件条件语句组语句组1else语句组语句组2end当条件成立时,执行语句组当条件成立时,执行语句组1,否则执行语句,否则执行语句组组2,语句组,语句组1或语句组或语句组2执行后,再执行执行后,再执行if语语句的后继语句。句的后继语句。例 程序如下:function iftow(x)if x0 fprintf(%f is a positive numbern,x)else fprintf(%f is not a positive numbern,x)end例 计算

19、分段函数值。程序如下:x=input(请输入请输入x的值的值:);if x=10 y=cos(x+1)+sqrt(x*x+1);else y=x*sqrt(x+sqrt(x);end y例 输入数n,判断其奇偶性 程序如下:n=input(n=),if rem(n,2)=0 A=even else A=odd end 3.多分支多分支if语句语句语句格式为:if条件条件1语句组语句组1elseif条件条件2语句组语句组2elseif条件条件m语句组语句组melse语句组语句组m+1end 例例输入一个字符,若为大写字母,则输出其后继字符,输入一个字符,若为大写字母,则输出其后继字符,若为小写字

20、母,则输出其前导字符,若为数字字符则若为小写字母,则输出其前导字符,若为数字字符则输出其对应的数值,若为其他字符则原样输出。输出其对应的数值,若为其他字符则原样输出。c=input(请输入一个字符请输入一个字符,s);if c=A&c=a&c=0&c100fprintf(%f is a great positive numbern,x)elseif x=10fprintf(%f is a big positive numbern,x)elseif x=0)y=3*x*x+5 (x=0n y=-3*x*x+5;nelsen y=3*x*x+5;nend 4.2.4 模块模块 (错误控制语句)错误

21、控制语句)语句格式为:语句格式为:try语句组语句组1catch语句组语句组2endtry语句先试探性执行语句组语句先试探性执行语句组1,如果语句组,如果语句组1在执行过程中出现错误,则将错误信息赋给保在执行过程中出现错误,则将错误信息赋给保留的留的lasterr变量,并转去执行语句组变量,并转去执行语句组2。这种试这种试探性执行语句是其他高级语言所没有的。探性执行语句是其他高级语言所没有的。例例X=magic(4);Y=ones(4,3);try Z=X*Y;catch Z=nan;disp(X and Y is not conformable)end 例例矩阵乘法运算要求两矩阵的维数相容,

22、否则矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。转去求两矩阵的点乘。A=1,2,3;4,5,6;B=7,8,9;10,11,12;try C=A*Bcatch C=A.*B disp(error)endlasterr%显示出错原因显示出错原因4.2.5 4.2.5 for循环语句循环语句语句格式为:语句格式为:for循环变量循环变量=初值初值:增量增量:终值终值循环体语句循环体语句 end 例例 fori=1:1:10 x(i)=i2endplot(x);i=1forx=-10:1:10;y(i)=-

23、3*x*x*x+6*x+5;i=i+1;endplot(y);例例 已知已知y的表达式,当的表达式,当n=100时,求时,求y的值。的值。y=0;n=100;for i=1:n y=y+1/i2;end y 例例求定积分求定积分。a=0;b=3*pi;n=1000;h=(b-a)/n;x=a:h:b;f=exp(-0.5*x).*sin(x+pi/6);for i=1:n s(i)=(f(i)+f(i+1)*h/2;end s=sum(s)事实上,事实上,MATLAB提供了有关数值积分的标准提供了有关数值积分的标准函数,实际应用中可直接调用这些函数求数值函数,实际应用中可直接调用这些函数求数值

24、积分积分。例例 for i=1:5 for j=1:5 a(i,j)=1/(i+j-1);endenda 例例p192例例10-14sum=0;for i=1:10 pdr=1;for k=1:i pdr=pdr*k;end fprintf(part(%d)=%d.n,i,pdr);sum=sum+pdr;endsumfprintf(The total sum is%d.n,sum);例:利用for循环求1!+2!+3!+5!的值sum=153课堂练习sum=0;for i=1:5 pdr=1;for k=1:i pdr=pdr*k;end sum=sum+pdr;endsum for更一般的

25、表达式更一般的表达式 for循环变量循环变量=矩阵表达式矩阵表达式循环体语句循环体语句end执行过程是执行过程是依次将矩阵的各依次将矩阵的各列列元素赋给循元素赋给循环变量环变量,然后执行循环体语句,直至各列元素,然后执行循环体语句,直至各列元素处理完毕。实际上,处理完毕。实际上,“初值初值:增量增量:终值终值”是一个仅为一行的矩阵是一个仅为一行的矩阵(行向量行向量),因而列向量,因而列向量是单个数据。是单个数据。例例 已知已知5个学生个学生4门功课的成绩,求每名学生的门功课的成绩,求每名学生的总成绩。总成绩。s=0;a=65,76,56,78;98,83,74,85;76,67,78,79;9

26、8,58,42,73;67,89,76,87;for k=a s=s+k;enddisp(s);65 76 56 78 98 83 74 85 76 67 78 79 98 58 42 73 67 89 76 87 4.2.6 while语句语句 while语句的一般格式为:语句的一般格式为:while(条件条件)循环体语句循环体语句end其执行过程为:若条件成立,则执行循环体语其执行过程为:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立句,执行后再判断条件是否成立,如果不成立则跳出循环则跳出循环例:用while循环求1100间整数的和 sum=0;i=1;while i=

27、0)y(x)=3*x*x+5 (x0)答案nt=-10;ni=1;nwhile t=0n y(i)=-3*t2+5;n elsen y(i)=3*t2+5;n endn x(i)=t;n t=t+0.5;n i=i+1;nendnplot(x,y)例例根据矩阵指数的幂级数展开式求矩阵指数。根据矩阵指数的幂级数展开式求矩阵指数。X=input(X=);E=zeros(size(X);%生成零矩阵生成零矩阵 F=eye(size(X);%生成单位对角矩阵生成单位对角矩阵 n=1;while norm(F,1)0%求范数求范数 E=E+F;F=F*X/n;n=n+1;end E expm(X)%调用

28、调用MATLAB矩阵指数函数求矩阵指数矩阵指数函数求矩阵指数 循环的嵌套循环的嵌套n如果一个循环结构的循环体又包括一个循环结构,如果一个循环结构的循环体又包括一个循环结构,就称为就称为循环的嵌套循环的嵌套,或称为,或称为多重循环多重循环结构。可以结构。可以按照嵌套层数,分别叫做二重循环、三重循环等。按照嵌套层数,分别叫做二重循环、三重循环等。处于内部的循环叫作内循环,处于外部的循环叫处于内部的循环叫作内循环,处于外部的循环叫作外循环。作外循环。n在设计多重循环时,要特别注意内、外循环之间在设计多重循环时,要特别注意内、外循环之间的关系,以及各语句放置的位置,不要搞错。的关系,以及各语句放置的位

29、置,不要搞错。课堂练习课堂练习利用函数的递归调用,求利用函数的递归调用,求n!递归调用函数文件递归调用函数文件factor.m:function f=factor(n)if n a=1 2;n b=2 3;n c=3 4;n d=5 6;n testvar(a,b,c,d)全局变量和局部变量全局变量和局部变量 全局变量用命令全局变量用命令globalglobal定义。函数文件的内部变量定义。函数文件的内部变量是局部的,与其他函数文件及是局部的,与其他函数文件及MATLAB工作空间工作空间相互隔离。相互隔离。例例全局变量应用示例。全局变量应用示例。先建立函数文件先建立函数文件weight_add

30、.m,该函数将输入的,该函数将输入的参数加权相加。参数加权相加。function f=weight_add(x,y)global ALPHA BETA f=ALPHA*x+BETA*y;在命令窗口中输入:在命令窗口中输入:global ALPHA BETA ALPHA=1;BETA=2;s=weight_add(1,2)结构结构结构数据结构数据 MATLAB通过使用结构通过使用结构(structure)数数据类型把一组据类型把一组不同类型不同类型的数据同时又是的数据同时又是在在逻辑上相关逻辑上相关的数据组成一个有机的整的数据组成一个有机的整体,以便于管理和引用。体,以便于管理和引用。1.结构矩

31、阵的建立与引用结构矩阵的建立与引用 2.结构成员的修改结构成员的修改1.结构矩阵的建立与引用结构矩阵的建立与引用(1)用赋值语句定义用赋值语句定义 student.name=Leslie;student.num=123456;student.test=79 75 73;180 178 177.5;22 210 205;studentstudent=name:Leslie num:123456 test:3x3 double student(2).name=David;student(2).num=123532;student(2).test=68 70 68;118 118 119;172 1

32、70 169;23 543 433;studentstudent=1x2 struct array with fields:name num test fieldnames(student)ans=name num test(2)用函数用函数struct定义,调用格式:定义,调用格式:结构数组名结构数组名=struct(属性属性1,属性值属性值1,属性属性2,属性值属性值2,)s=struct(type,big,little,color,red,x,3 4)结构成员的修改结构成员的修改 str=student(2).name n=student(2).test(4,2)student(2).test(4,2)=0 for i=1:length(student)disp(student(i).name)end

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com