第6讲 MATLAB程序设计基础1.docx
《第6讲 MATLAB程序设计基础1.docx》由会员分享,可在线阅读,更多相关《第6讲 MATLAB程序设计基础1.docx(15页珍藏版)》请在冰豆网上搜索。
第6讲MATLAB程序设计基础1
第六讲MATLAB程序设计
6.1命令文件与函数文件(M文件)
根据调用方式,M文件分为命令文件和函数文件两种。
命令文件:
命令文件没有输入参数和输出参数,只是一系列命令行的堆积或集合。
系统执行命令文件的效果与在命令窗口中一条一条输入这些命令的效果相同,命令文件产生的所有变量都会保留在工作空间里。
命令文件的调用方法:
在MATLAB的命令窗口中直接输入文件名(filename),按Enter键即可。
举例:
x=0:
1/(10*pi):
2*pi;
y1=sin(x);
plot(x,y1,'ro-');
title('sin(x)');
xlabel('x轴');
ylabel('y轴');
legend('y1=sin(x)');
M函数:
M函数是为了计算过程中参数的传递、程序的嵌套调用而编写的M文件。
它用来定义一个函数,定义过程中必须指定函数名和输入输出参数,并由MATLAB语句序列给出一系列的操作和处理,从而生成所需要的数据。
M函数文件包括:
1、函数定义行。
表明该M文件包含一个函数,并且定义函数名、输入和输出参数。
2、函数体。
是所有计算过程和输入输出参数赋值的MATLAB代码。
3、注释。
注释语句以“%”开头,可以出现在M文件的任何地方。
%后的部分为不执行部分。
注:
1)M函数返回参数多于一个变量时,应使用方括号;
2)输入变量多于一个时,用“,”隔开;
3)函数名与M文件名应同名;
4)一个函数文件只能定义一个M函数。
【例6.1-1】建立函数文件ex5_1.m
functiony=ex5_1(t)%函数定义行
y=sin(t).*exp(-t);%函数体
(注意:
文件名一定用ex5_1)
调用(另编一个程序,或在命令窗口输入):
t=0:
pi/50:
pi;
y=ex5_1(t);%函数调用
plot(t,y);
【例6.1-2】建立函数文件ex5_2.m
functiony=ex5_2(a,t)
ifa==1
y=sin(t);
elseifa==2
y=sin(t).*exp(-t);
else
y=cos(t).*sin(t);
end
plot(t,y);
调用:
t=0:
pi/50:
pi;
a=1;
y=ex5_2(a,t);
【例6.1-3】建立函数文件ex5_3.m,该函数在ex5_3m.m中调用
function[y1,y2,y3]=ex5_3(t)
y1=sin(t);
y2=sin(t).*exp(-t);
y3=cos(t).*sin(t);
functionex5_3m(t)
x=sin(t);
[s1,s2,s3]=ex5_3(x);
plot(t,s1,t,s2,t,s3);
调用程序:
clear;
t=0:
pi/50:
2*pi;
ex5_3m(t);
6.2变量与数据类型
1、变量
变量是任何程序设计语言的基本单位。
与一般程序设计语言不同的是,MATLAB语言并不要求事先对所使用的变量进行声明,也不需要指定变量类型,MATLAB语言自动依据变量值或对变量操作来识别变量类型。
在赋值过程中,如果赋值变量已经存在,MATLAB语言将使用新值代替旧值,并以新值类型代替旧值类型。
注:
1)变量名区分大小写;
2)变量名必须以字母开头,不能超过31位;
3)变量存在作用区域。
在未加特殊说明的情况下,变量为局部变量,即仅在其使用的M文件内有效;要将变量定义为全局变量,应当对变量进行说明,即在变量名前加关键字global。
2、数据类型
double双精度浮点型
single单精度浮点型
float单精度或双精度浮点型
int8有符号8位整型-27to27-1
int16有符号16位整型-215to215-1
int32有符号32位整型-231to231-1
int64有符号64位整型-263to263-1
unit8无符号8位整型0to28-1
unit16无符号16位整型0to216-1
unit32无符号32位整型0to232-1
unit64无符号64位整型0to264-1
char字符型
logical逻辑型0or1
cell细胞数组
struct结构数组
6.3细胞数组与结构数组
1、细胞数组
细胞数组是以单元为元素的数组,每个元素成为单元,每个单元可以包含其他类型数组,如:
矩阵、字符串、复数。
细胞数组由{}创建,其数据通过数组下标引用。
【例6.3-1】建立1个2×2的细胞数组。
clear;
a(1,1)={3+2i};
a(1,2)={'time'};
a(2,1)={[123]};
a(2,2)={[1.234;2.456;3.789]};
>>a
运行结果:
a=
[3.0000+2.0000i]'time'
[1x3double][3x1double]
>>a(2,2)
运行结果:
ans=
[3x1double]
>>a{2,2}
运行结果:
ans=
1.2340
2.4560
3.7890
【例6.3-2】建立1个1×3的细胞数组。
>>b={'name'[2;3;4]2+5i};
>>b
运行结果:
b=
'name'[3x1double][2.0000+5.0000i]
2、结构数组
结构数组是根据属性域(field)组织起来的不同类型数据的集合。
结构数组的任何一个属性域可以包括不同数据类型,如字符串、矩阵、标量等。
创建格式:
1)s=struct(‘field1’,{},’field2’,{},……)
表示建立一个空的结构数组,不含数据;
2)s=struct('field1',values1,'field2',values2,'field3',values3,…)
表示建立一个具有属性域和数据的结构数组。
【例6.3-3】结构数组student=struct('name',{'Liu','Wang'},'Age',{'20','21'});
求student
(1)、student
(2)、student.name。
>>student=struct('name',{'Liu','Wang'},'Age',{'20','21'});
>>student
(1)
ans=
name:
'Liu'
Age:
'20'
>>student
(2)
ans=
name:
'Wang'
Age:
'21'
>>student.name
ans=
Liu
ans=
Wang
>>student
(2).name
ans=
Wang
>>student
student=
1x2structarraywithfields:
name
Age
>>student(3).name=’Song’;
>>student(3)
ans=
name:
'Song'
Age:
[]
6.4运算符
1、算数运算符
+、-、*、.*、^、.^、\、.\、/、./;
2、关系运算符
==(等于)、~=(不等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)。
说明:
关系运算符主要用来对矩阵与数、矩阵与矩阵进行比较,返回二者的关系,1表示满足指定关系,0表示不满足指定关系。
例:
矩阵a=[12;23],求a中等于2的元素的个数n。
>>a=[12;23];
>>b=a==2
b=
01
10
>>n=sum(sum(b))
n=
2
3、逻辑运算符
&(逻辑与)、|(逻辑或)、~(逻辑非)、xor(逻辑异或);
MATLAB中,所有非零数值均被认为为真,零为假;在逻辑判断结果中,判断为真时输出“1”,判断为假时输出“0”。
例:
矩阵a=[11;01],b=[01;00],c=0,求c1=a﹠c,c2=a|c,c3=xor(a,b),c4=~a
>>a=[11;01];
>>b=[01;00];
>>c=0;
>>c1=a&c
ans=
00
00
>>c2=a|c
ans=
11
01
>>c3=xor(a,b)
ans=
10
01
>>c4=~a
ans=
00
10
考虑:
如果,a=[32;04],b=[05;00],结果又如何?
6.5程序结构
6.5.1顺序结构
顺序结构是由简单的赋值语句和函数组成的最简单的控制语句。
在程序执行时按照顺序从头至尾地执行程序中的各条语句。
顺序结构一般不包含其他任何子语句或控制语句,也不需要用户输入任何参数。
例:
t=0:
pi/50:
2*pi;
y1=sin(t);
y2=sin(t).*exp(-t);
y3=cos(t).*sin(t);
plot(y1);
holdon;
plot(t,y2);
plot(t,y1,'b:
',t,y2,'gx',t,y3,'ro');
holdoff;
axis([01001]);
axis([010-11]);
6.5.2分支结构
6.5.2.1条件语句(if-else-end)
共有五种调用格式:
1)if<逻辑表达式>%if与后面的逻辑表达式之间必须至少要有一个空格
<语句体>
end
2)if<逻辑表达式>
<语句体1>
else
<语句体2>
end
3)if<逻辑表达式1>
<语句体1>
elseif<逻辑表达式2>
<语句体2>
end
4)if<逻辑表达式1>
<语句体1>
elseif<逻辑表达式2>
<语句体2>
elseif<逻辑表达式3>
<语句体3>
……
else
<语句体n>
end
5)if<逻辑表达式1>
<语句体1>
if<逻辑表达式2>
<语句体2>
else
<语句体3>
end
……
else
<语句体n>
end
例:
设有一分段函数,试编写函数程序和调用程序,求其函数值。
程序文件fun1.m文件:
functiony=fun1(x)
%UNTITLED1Summaryofthisfunctiongoeshere
%Detailedexplanationgoeshere
ifx<0
y=x.^2;
elseifx>=0&x<=2
y=2-3*x;
elseifx>2&x<4
y=sin(2*x);
elseifx>=4
y=exp(2*x);
end
调用文件order1.m:
x=2;
y=fun1
(2)
x=0:
0.1:
2;
y=fun1(x);
plot(x,y,'-r');
【例6.5.2-1】
clear;
fname=input('inputFunctionname=');
t=0:
pi/50:
2*pi;
iffname=='sin'
y=sin(t);
else
y=exp(t);
end
plot(t