第3章MATLAB程序设计000001-资料课件_第1页
第3章MATLAB程序设计000001-资料课件_第2页
第3章MATLAB程序设计000001-资料课件_第3页
第3章MATLAB程序设计000001-资料课件_第4页
第3章MATLAB程序设计000001-资料课件_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章MATLAB程序设计

3.1M文件

3.2数据的输入输出

3.3选择结构

3.4循环结构

3.5函数文件

3.6全局变量和局部变量目录第3章MATLAB程序设计3.1M文件目录13.1M文件编程M文件的功能和特点MATLAB是解释性语言语法简单调试容易人机交互性强开放性、可扩展性强3.1M文件编程M文件的功能和特点23.1.1M文件的建立与编辑1.建立新的M文件(1)菜单操作:MATLAB命令窗口的File菜单→New菜单项→

M-file命令。(2)命令操作:在MATLAB命令窗口输入命令edit。(3)命令按钮操作:单击MATLAB命令窗口工具栏上的“新建”命令按钮。

2.编辑已有的M文件3.1.1M文件的建立与编辑3

3.1.2M文件的分类分类:命令文件(ScriptFile/脚本文件)和函数文件(FunctionFile)。

1。命令文件有效指令的集合,以文件名直接调用运行。若要一次执行大量的MATLAB命令,可将这些命令存放於一个后缀为m的文件,并在MATLAB提示号下键入此文件名即可。

3.1.2M文件的分类4命令文件对于一些比较简单的问题,在指令窗中直接输入指令计算.对于复杂计算,采用命令文件最为合适.MATLAB只是按文件所写的指令执行.M命令文件的特点是:命令文件的构成比较简单,只是一串按用户意图排列而成的(包括控制流向指令在内的)MATLAB指令集合M文件中定义的变量为全局变量.命令文件运行后,所产生的所有变量都驻留在MATLAB基本工作空间(Baseworkspace)中。只要用户不使用清除指令(clear),MATLAB指令窗不关闭,这些变量将一直保存在基本工作空间中命令文件对于一些比较简单的问题,在指令窗中直接输入指令计算5

例3.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,将会执行该命令文件。目录例3.1建立一个命令文件将变量a,b的值互换,然后运行该6函数文件与命令文件不同,函数文件犹如一个“黑箱”,把一些数据送进并经加工处理,再把结果送出来.MATLAB提供的函数指令大部分都是由函数文件定义的.用M文件自定义函数,开头为:functionyname=fname(xname)yname:因变量名,fname:函数名,xname:自变量名.文件名为fname,即与函数名相同.函数文件与命令文件不同,函数文件犹如一个“黑箱”,把一些数7

例3.2

建立一个函数文件将变量a,b的值互换,然后在命令窗口调用该函数文件。首先建立函数文件fexch.m:

function[a,b]=fexch(a,b)%exchc=a;a=b;b=c;

然后在MATLAB的命令窗口调用该函数文件:

clear;x=1:10;y=[11,12,13,14;15,16,17,18];[x,y]=fexch(x,y)目录例3.2建立一个函数文件将变量a,b的值互换,然后在命令8由上例可以看出函数文件的一般格式为:function[输出表]=函数名(输入表)函数体函数文件的第一行必须是以关键字function开始,表明该文件是函数文件.输入表是以逗号相分隔的形参.输出表是函数的返回值.如果返回值只有一个方括号可以省略;如果返回值不止一个,输出表中的各个变量要以逗号隔开.由上例可以看出函数文件的一般格式为:function[输9标准的函数文件基本结构。(1)函数定义行(关键字function)function[out1,out2,..]=filename(in1,in2,..)输入和输出(返回)的参数个数分别由nargin和nargout两个MATLAB保留的变量来给出。(2)第一行帮助行,即H1行以(%)开头,作为lookfor指令搜索的行,可以使程式易於了解与管理。特别要说明的是,第一注解行通常用来简短说明此M档案的功能,以便lookfor能以关键字比对的方式来找出此M档案。

举例来说,fexch.m的第一注解行包含exch这个字,因此如果键入lookforexch,MATLAB即可列出所有在第一注解行包含exch的M档案,因而fexch.m也会被列名在内。

标准的函数文件基本结构。10(3)函数体说明及有关注解,以(%)开头,用以说明函数的作用及有关内容(4)函数体语句函数体内使用的除返回和输入变量这些在function语句中直接引用的变量以外的所有变量都是局部变量,即在该函数返回之后,这些变量会自动在MATLAB的工作空间中清除掉。如果希望这些中间变量成为在整个程序中都起作用的变量,则可以将它们设置为全局变量(3)函数体说明及有关注解,以(%)开头,用以说明函数的作用11例3.3建立一个自变量为m,n的函数,用其构造mn矩阵,其元素随机取均匀分布在0~9中的整数:

functiona=randint(m,n)a=floor(10*rand(m,n));以上两句存为M文件randint.m.

用法:

A=randint(2,3)%z则A为23矩阵,其元素为随机取自0~9中的整数.

函数M文件中的变量为局部变量,要想在CommandWindow或其他M文件中可调用,必须在这些地方把此变量说明为global:例如,globala;

注意,M文件必须存放在MATLAB的搜索路径中才可被调用.例3.3建立一个自变量为m,n的函数,用其构造mn矩123.2数据的输入输出3.2.1input函数调用格式为:

A=input(提示信息,选项);其中,提示信息为一个字符串,用于提示用户输入什么样的数据。如果在input函数调用时采用‘s’选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令:

>>xm=input('What''syourname?','s')What'syourname?xiaoweixm=xiaowei目录3.2数据的输入输出3.2.1input函数目录13

3.2.2disp函数调用格式为

disp(输出项)

其中输出项既可以为字符串,也可以为矩阵。注意:用disp函数显示矩阵时将不显示矩阵的名字,而且其格式更紧密,且不留任何没有意义的空行。目录3.2.2disp函数目录14

例3.4

求一元二次方程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))])目录disp(x)显示x的内容,与x的区别是:前者仅显示x的内容,后者多个"x=".a=?3b=?4c=?9x1=-0.66667+1.5986i,x2=-0.66667-1.5986i例3.4求一元二次方程ax2+bx+c=0的15

3.2.3pause函数其调用格式为:

pause(延迟秒数)

如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。若要强行中止程序的运行可使用Ctrl+C命令。目录3.2.3pause函数目录16MATLAB流程控制循环语句for,while条件转移ifend,ifelseifelseend开关语句switchcase注释语句%中断语句break暂停语句pause回显语句echoon/offMATLAB流程控制17

3.3选择结构

3.3.1if语句

在MATLAB中,if语句有3种格式。

1.单分支if语句语句格式为:

if条件语句组

end

当条件成立时,则执行语句组,执行完之后继续执行if语句的后继语句,若条件不成立,则直接执行if语句的后继语句。目录3.3选择结构3.3.1if语句目录18

2.双分支if语句语句格式为:

if条件语句组1else

语句组2end

当条件成立时,执行语句组1,否则执行语句组2,语句组1或语句组2执行后,再执行if语句的后继语句。目录2.双分支if语句目录19

例3.4计算分段函数值目录程序如下:>>x=input('请输入x的值:');

ifx==10y=cos(x+1)+sqrt(x*x+1);

elsey=x*sqrt(x+sqrt(x));

endy请输入x的值:y=47.189312例3.4计算分段函数值目录程序如下:>>x=in20

3.多分支if语句语句格式为:if条件1

语句组1elseif条件2

语句组2……elseif条件m

语句组melse

语句组m+1end目录3.多分支if语句目录21第3章MATLAB程序设计000001-资料课件22

例3.5

输入一个字符,若为大写字母,则输出其后继字符,若为小写字母,则输出其前导字符,若为数字字符则输出其对应的数值,若为其他字符则原样输出。目录

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);end程序如下:例3.5输入一个字符,若为大写字母,则输出其后继字符,23

3.3.2开关结构:switch语句其语句格式为:目录switch表达式

case表达式1

语句组1case表达式2

语句组2……case表达式m

语句组motherwise

语句组m+1end3.3.2开关结构:switch语句目录switc24第3章MATLAB程序设计000001-资料课件25

例3.6某商场对顾客所购买的商品实行打折销售,已知打折标准为:商品价格小于200元时,折扣率为0;商品价格大于或等于200元且小于500时,折扣率为0.03;商品价格大于或等于500且小于1000元时,折扣率为0.05;商品价格大于或等于1000且小于2500元时,折扣率为0.08;商品价格大于或等于2500且小于5000元时,折扣率为0.1;商品价格大于或等于5000元时,折扣率为0.14;求所售商品的实际销售价格。目录程序如下例3.6某商场对顾客所购买的商品实行打折销售,目录程序如26>>price=input('请输入商品价格');switchfix(price/100)case{0,1}rate=0;case{2,3,4}rate=3/100;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)请输入商品价格890price=845.5000>>price=input('请输入商品价格');请输入商品27

3.3.3try语句语句格式为:try

语句组1catch

语句组2endtry语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。这种试探性执行语句是其他高级语言所没有的。目录3.3.3try语句目录28

例3.7

矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。程序如下:A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endClasterr%显示出错原因目录C=71627405572ans=Errorusing==>*Innermatrixdimensionsmustagree.例3.7矩阵乘法运算要求两矩阵的维数相容,否则会出错。先29

3.4循环结构

3.4.1for语句

基本格式for循环变量=起始值:步长:终止值循环体

end步长缺省值为1,可以在正实数或负实数范围内任意指定。对于正数,循环变量的值大于终止值时,循环结束;对于负数,循环变量的值小于终止值时,循环结束。循环结构可以嵌套使用。目录3.4循环结构3.4.1for语句30

fori=1:5forj=1:5a(i,j)=1/(i+j-1);endenda=1.00000.50000.33330.25000.2000

0.50000.33330.25000.20000.16670.33330.25000.20000.16670.14290.25000.20000.16670.14290.12500.20000.16670.14290.12500.1111fori=1:531

例3.8

已知求y的表达式,

当n=100时,求y的值。目录在实际MATLAB编程中,为提高程序的执行速度,常用向量运算来代替循环操作:

n=100;i=1:n;f=1./i.^2;y=sum(f)程序如下:

y=0;n=100;fori=1:ny=y+1/i/i;endyy=2047/1252例3.8已知求y的表达式,目录在实际MATLAB32

例3.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)

目录事实上,MATLAB提供了有关数值积分的标准函数,实际应用中可直接调用这些函数求数值积分。s=754/837例3.9求定积分33for语句更一般的格式:for循环变量=矩阵表达式循环体语句

end

执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。实际上,“表达式1:表达式2:表达式3”是一个仅为一行的矩阵(行向量),因而列向量是单个数据。目录for语句更一般的格式:for循环变量=矩阵表达式目录34

例3.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');目录a=6576567898837485766778799858427367897687275340300271319例3.10已知5个学生4门功课的成绩,求每名学生的总成绩35

3.4.2while语句

while语句一般用于不能事先确定循环次数的情况.while语句的一般格式为:

while(条件)

循环体语句

end

其执行过程为:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环(如图3.5所示)。目录3.4.2while语句目录36While循环和for循环的区别在于,while循环结构的循环体被执行的次数不是确定的,而for结构中循环体的执行次数是确定的。While循环和for循环的区别在于,while循环结构的循37例用循环求解例用循环求解最小的m例用循环求解例用循环求解38用while循环语句编写一个计算1000以内的Fibonacci数:

f=[11];i=1;whilef(i)+f(i+1)<1000f(i+2)=f(i)+f(i+1);i=i+1;endf=1123581321345589144233377610987用while循环语句编写一个计算1000以内的Fibonac39

例3.11

产生一个长度为6的调和数列。程序如下:

X=zeros(1,6);i=1;whilei<=6X(i)=1/i;i=i+1;endformatrat%使用分数表示数值

disp(X)目录Columns1through511/21/31/41/5Column61/6例3.11产生一个长度为6的调和数列。目录Col40

与循环结构相关的还有一个break语句,当在循环体内执行到该语句时,程序将跳出循环。该语句一般与if语句配合使用。

例3.12

用while语句实现例3.8。

程序如下:

y=0;i=1;while1f=1/i/i;y=y+f;ifi==100break;endi=i+1;endy目录与循环结构相关的还有一个break语句,当在循环体41

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

例3.13

用筛选法求某自然数范围内的全部素数。程序如下:

m=input('m=');p=2:m;fori=2:sqrt(m)n=find(rem(p,i)==0&p~=i);p(n)=[];endp目录m=100p=Columns1through5235711Columns6through101317192329Columns11through153137414347Columns16through205359616771Columns21through257379838997例3.13用筛选法求某自然数范围内的全部素数。目录m=43

3.5函数文件

3.5.1函数文件的基本结构函数文件由function语句引导,其基本结构为:

function输出形参表=函数名(输入形参表)

注释说明部分函数体语句目录3.5函数文件3.5.1函数文件的基44

说明:(1)关于函数文件名:函数文件名与函数名也可以不相同。当两者不同时,MATLAB将忽略函数名而确认函数文件名,因此调用时使用函数文件名。(2)关于注释说明部分。注释说明包括三部分内容:①紧随函数文件引导行之后以%开头的第一注释行。②第一注释行及之后连续的注释行。③与在线帮助文本相隔一空行的注释行。(3)关于return语句。执行到该语句就结束函数的执行,程序流程转至调用该函数的位置。通常,在函数文件中也可不使用return语句,这时在被调函数执行完成后自动返回。目录说明:目录45

例3.14

编写函数文件求半径为r的圆的面积和周长。函数文件如下:

function[s,p]=fcircle(r)%CIRCLEcalculatetheareaandperimeterofacircleofradiir%r圆半径

%s圆面积

%p圆周长

%2019年7月30日编

s=pi*r*r;p=2*pi*r;

将以上函数文件以文件名fcircle.m存入c:\matlabr11\work下,然后在MATLAB命令窗口调用该函数:

[s,p]=fcircle(10)目录s=13823/44p=7100/113例3.14编写函数文件求半径为r的圆的面积和周46

3.5.2函数调用函数调用的一般格式是:

[输出实参表]=函数名(输入实参表)例3.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:

x=input('Pleaseinputx=:');y=input('Pleaseinputy=:');[rho,the]=tran(x,y);rhothe目录3.5.2函数调用目录47

例3.16

利用函数的递归调用,求n!。递归调用函数文件factor.m:

functionf=factor(n)ifn<=1f=1;elsef=factor(n-1)*n;end

在命令文件main2.m中调用函数文件factor.m求s=1!+2!+3!+4!+5!。目录n=input('Pleaseinputn=:');s=0;fori=1:n[nfa]=factor(i);s=s+nfa;ends>>main2Pleaseinputn=:5s=153例3.16利用函数的递归调用,求n!。目录n=i48

3.5.3函数所传递参数的可调性在调用函数时,MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。目录3.5.3函数所传递参数的可调性目录49

例3.17nargin用法示例。函数文件examp.m:

functionfout=examp(a,b,c)ifnargin==1fout=a;elseifnargin==2fout=a+b;elseifnargin==3fout=(a*b*c)/2;end

命令文件mydemo.m:

x=[1:3];y=[1;2;3];examp(x)examp(x,y')examp(x,y,3)目录>>mydemoans=123ans=246ans=21例3.17nargin用法示例。目录>>myd50

3.6全局变量和局部变量全局变量用命令global定义。函数文件的内部变量是局部的,与其他函数文件及MATLAB工作空间相互隔离。

例3.18

全局变量应用示例。先建立函数文件wadd.m,该函数将输入的参数加权相加。

functionf=wadd(x,y)globalALPHABETAf=ALPHA*x+BETA*y;

在命令窗口中输入:

globalALPHABETAALPHA=1;BETA=2;s=wadd(1,2)目录s=53.6全局变量和局部变量全局变量用命令g51第3章MATLAB程序设计

3.1M文件

3.2数据的输入输出

3.3选择结构

3.4循环结构

3.5函数文件

3.6全局变量和局部变量目录第3章MATLAB程序设计3.1M文件目录523.1M文件编程M文件的功能和特点MATLAB是解释性语言语法简单调试容易人机交互性强开放性、可扩展性强3.1M文件编程M文件的功能和特点533.1.1M文件的建立与编辑1.建立新的M文件(1)菜单操作:MATLAB命令窗口的File菜单→New菜单项→

M-file命令。(2)命令操作:在MATLAB命令窗口输入命令edit。(3)命令按钮操作:单击MATLAB命令窗口工具栏上的“新建”命令按钮。

2.编辑已有的M文件3.1.1M文件的建立与编辑54

3.1.2M文件的分类分类:命令文件(ScriptFile/脚本文件)和函数文件(FunctionFile)。

1。命令文件有效指令的集合,以文件名直接调用运行。若要一次执行大量的MATLAB命令,可将这些命令存放於一个后缀为m的文件,并在MATLAB提示号下键入此文件名即可。

3.1.2M文件的分类55命令文件对于一些比较简单的问题,在指令窗中直接输入指令计算.对于复杂计算,采用命令文件最为合适.MATLAB只是按文件所写的指令执行.M命令文件的特点是:命令文件的构成比较简单,只是一串按用户意图排列而成的(包括控制流向指令在内的)MATLAB指令集合M文件中定义的变量为全局变量.命令文件运行后,所产生的所有变量都驻留在MATLAB基本工作空间(Baseworkspace)中。只要用户不使用清除指令(clear),MATLAB指令窗不关闭,这些变量将一直保存在基本工作空间中命令文件对于一些比较简单的问题,在指令窗中直接输入指令计算56

例3.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,将会执行该命令文件。目录例3.1建立一个命令文件将变量a,b的值互换,然后运行该57函数文件与命令文件不同,函数文件犹如一个“黑箱”,把一些数据送进并经加工处理,再把结果送出来.MATLAB提供的函数指令大部分都是由函数文件定义的.用M文件自定义函数,开头为:functionyname=fname(xname)yname:因变量名,fname:函数名,xname:自变量名.文件名为fname,即与函数名相同.函数文件与命令文件不同,函数文件犹如一个“黑箱”,把一些数58

例3.2

建立一个函数文件将变量a,b的值互换,然后在命令窗口调用该函数文件。首先建立函数文件fexch.m:

function[a,b]=fexch(a,b)%exchc=a;a=b;b=c;

然后在MATLAB的命令窗口调用该函数文件:

clear;x=1:10;y=[11,12,13,14;15,16,17,18];[x,y]=fexch(x,y)目录例3.2建立一个函数文件将变量a,b的值互换,然后在命令59由上例可以看出函数文件的一般格式为:function[输出表]=函数名(输入表)函数体函数文件的第一行必须是以关键字function开始,表明该文件是函数文件.输入表是以逗号相分隔的形参.输出表是函数的返回值.如果返回值只有一个方括号可以省略;如果返回值不止一个,输出表中的各个变量要以逗号隔开.由上例可以看出函数文件的一般格式为:function[输60标准的函数文件基本结构。(1)函数定义行(关键字function)function[out1,out2,..]=filename(in1,in2,..)输入和输出(返回)的参数个数分别由nargin和nargout两个MATLAB保留的变量来给出。(2)第一行帮助行,即H1行以(%)开头,作为lookfor指令搜索的行,可以使程式易於了解与管理。特别要说明的是,第一注解行通常用来简短说明此M档案的功能,以便lookfor能以关键字比对的方式来找出此M档案。

举例来说,fexch.m的第一注解行包含exch这个字,因此如果键入lookforexch,MATLAB即可列出所有在第一注解行包含exch的M档案,因而fexch.m也会被列名在内。

标准的函数文件基本结构。61(3)函数体说明及有关注解,以(%)开头,用以说明函数的作用及有关内容(4)函数体语句函数体内使用的除返回和输入变量这些在function语句中直接引用的变量以外的所有变量都是局部变量,即在该函数返回之后,这些变量会自动在MATLAB的工作空间中清除掉。如果希望这些中间变量成为在整个程序中都起作用的变量,则可以将它们设置为全局变量(3)函数体说明及有关注解,以(%)开头,用以说明函数的作用62例3.3建立一个自变量为m,n的函数,用其构造mn矩阵,其元素随机取均匀分布在0~9中的整数:

functiona=randint(m,n)a=floor(10*rand(m,n));以上两句存为M文件randint.m.

用法:

A=randint(2,3)%z则A为23矩阵,其元素为随机取自0~9中的整数.

函数M文件中的变量为局部变量,要想在CommandWindow或其他M文件中可调用,必须在这些地方把此变量说明为global:例如,globala;

注意,M文件必须存放在MATLAB的搜索路径中才可被调用.例3.3建立一个自变量为m,n的函数,用其构造mn矩633.2数据的输入输出3.2.1input函数调用格式为:

A=input(提示信息,选项);其中,提示信息为一个字符串,用于提示用户输入什么样的数据。如果在input函数调用时采用‘s’选项,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令:

>>xm=input('What''syourname?','s')What'syourname?xiaoweixm=xiaowei目录3.2数据的输入输出3.2.1input函数目录64

3.2.2disp函数调用格式为

disp(输出项)

其中输出项既可以为字符串,也可以为矩阵。注意:用disp函数显示矩阵时将不显示矩阵的名字,而且其格式更紧密,且不留任何没有意义的空行。目录3.2.2disp函数目录65

例3.4

求一元二次方程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))])目录disp(x)显示x的内容,与x的区别是:前者仅显示x的内容,后者多个"x=".a=?3b=?4c=?9x1=-0.66667+1.5986i,x2=-0.66667-1.5986i例3.4求一元二次方程ax2+bx+c=0的66

3.2.3pause函数其调用格式为:

pause(延迟秒数)

如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。若要强行中止程序的运行可使用Ctrl+C命令。目录3.2.3pause函数目录67MATLAB流程控制循环语句for,while条件转移ifend,ifelseifelseend开关语句switchcase注释语句%中断语句break暂停语句pause回显语句echoon/offMATLAB流程控制68

3.3选择结构

3.3.1if语句

在MATLAB中,if语句有3种格式。

1.单分支if语句语句格式为:

if条件语句组

end

当条件成立时,则执行语句组,执行完之后继续执行if语句的后继语句,若条件不成立,则直接执行if语句的后继语句。目录3.3选择结构3.3.1if语句目录69

2.双分支if语句语句格式为:

if条件语句组1else

语句组2end

当条件成立时,执行语句组1,否则执行语句组2,语句组1或语句组2执行后,再执行if语句的后继语句。目录2.双分支if语句目录70

例3.4计算分段函数值目录程序如下:>>x=input('请输入x的值:');

ifx==10y=cos(x+1)+sqrt(x*x+1);

elsey=x*sqrt(x+sqrt(x));

endy请输入x的值:y=47.189312例3.4计算分段函数值目录程序如下:>>x=in71

3.多分支if语句语句格式为:if条件1

语句组1elseif条件2

语句组2……elseif条件m

语句组melse

语句组m+1end目录3.多分支if语句目录72第3章MATLAB程序设计000001-资料课件73

例3.5

输入一个字符,若为大写字母,则输出其后继字符,若为小写字母,则输出其前导字符,若为数字字符则输出其对应的数值,若为其他字符则原样输出。目录

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);end程序如下:例3.5输入一个字符,若为大写字母,则输出其后继字符,74

3.3.2开关结构:switch语句其语句格式为:目录switch表达式

case表达式1

语句组1case表达式2

语句组2……case表达式m

语句组motherwise

语句组m+1end3.3.2开关结构:switch语句目录switc75第3章MATLAB程序设计000001-资料课件76

例3.6某商场对顾客所购买的商品实行打折销售,已知打折标准为:商品价格小于200元时,折扣率为0;商品价格大于或等于200元且小于500时,折扣率为0.03;商品价格大于或等于500且小于1000元时,折扣率为0.05;商品价格大于或等于1000且小于2500元时,折扣率为0.08;商品价格大于或等于2500且小于5000元时,折扣率为0.1;商品价格大于或等于5000元时,折扣率为0.14;求所售商品的实际销售价格。目录程序如下例3.6某商场对顾客所购买的商品实行打折销售,目录程序如77>>price=input('请输入商品价格');switchfix(price/100)case{0,1}rate=0;case{2,3,4}rate=3/100;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)请输入商品价格890price=845.5000>>price=input('请输入商品价格');请输入商品78

3.3.3try语句语句格式为:try

语句组1catch

语句组2endtry语句先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息赋给保留的lasterr变量,并转去执行语句组2。这种试探性执行语句是其他高级语言所没有的。目录3.3.3try语句目录79

例3.7

矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。程序如下:A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endClasterr%显示出错原因目录C=71627405572ans=Errorusing==>*Innermatrixdimensionsmustagree.例3.7矩阵乘法运算要求两矩阵的维数相容,否则会出错。先80

3.4循环结构

3.4.1for语句

基本格式for循环变量=起始值:步长:终止值循环体

end步长缺省值为1,可以在正实数或负实数范围内任意指定。对于正数,循环变量的值大于终止值时,循环结束;对于负数,循环变量的值小于终止值时,循环结束。循环结构可以嵌套使用。目录3.4循环结构3.4.1for语句81

fori=1:5forj=1:5a(i,j)=1/(i+j-1);endenda=1.00000.50000.33330.25000.2000

0.50000.33330.25000.20000.16670.33330.25000.20000.16670.14290.25000.20000.16670.14290.12500.20000.16670.14290.12500.1111fori=1:582

例3.8

已知求y的表达式,

当n=100时,求y的值。目录在实际MATLAB编程中,为提高程序的执行速度,常用向量运算来代替循环操作:

n=100;i=1:n;f=1./i.^2;y=sum(f)程序如下:

y=0;n=100;fori=1:ny=y+1/i/i;endyy=2047/1252例3.8已知求y的表达式,目录在实际MATLAB83

例3.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)

目录事实上,MATLAB提供了有关数值积分的标准函数,实际应用中可直接调用这些函数求数值积分。s=754/837例3.9求定积分84for语句更一般的格式:for循环变量=矩阵表达式循环体语句

end

执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。实际上,“表达式1:表达式2:表达式3”是一个仅为一行的矩阵(行向量),因而列向量是单个数据。目录for语句更一般的格式:for循环变量=矩阵表达式目录85

例3.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');目录a=6576567898837485766778799858427367897687275340300271319例3.10已知5个学生4门功课的成绩,求每名学生的总成绩86

3.4.2while语句

while语句一般用于不能事先确定循环次数的情况.while语句的一般格式为:

while(条件)

循环体语句

end

其执行过程为:若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环(如图3.5所示)。目录3.4.2while语句目录87While循环和for循环的区别在于,while循环结构的循环体被执行的次数不是确定的,而for结构中循环体的执行次数是确定的。While循环和for循环的区别在于,while循环结构的循88例用循环求解例用循环求解最小的m例用循环求解例用循环求解89用while循环语句编写一个计算1000以内的Fibonacci数:

f=[11];i=1;whilef(i)+f(i+1)<1000f(i+2)=f(i)+f(i+1);i=i+1;endf=1123581321345589144233377610987用while循环语句编写一个计算1000以内的Fibonac90

例3.11

产生一个长度为6的调和数列。程序如下:

X=zeros(1,6);i=1;whilei<=6X(i)=1/i;i=i+1;endformatrat%使用分数表示数值

disp(X)目录Columns1through511/21/31/41/5Column61/6例3.11产生一个长度为6的调和数列。目录Col91

与循环结构相关的还有一个break语句,当在循环体内执行到该语句时,程序将跳出循环。该语句一般与if语句配合使用。

例3.12

用while语句实现例3.8。

程序如下:

y=0;i=1;while1f=1/i/i;y=y+f;ifi==100break;endi=i+1;endy目录与循环结构相关的还有一个break语句,当在循环体92

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

例3.13

用筛选法求某自然数范围内的全部素数。程序如下:

m=input('m=');p=2:m;fori=2:sqrt(m)n=find(rem(p,i)==0&p~=i);p(n)=[];endp目录m=100p=Columns1through5235711Columns6through101317192329Columns11through153137414347Columns16through205359616771Columns21through25737983

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论