MATLAB培训教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB实训
第一部分MATLAB简介
1. 窗口
包括:(1)命令窗口(Command History):用于输入命令,">>"为命令输入提示符.
(2)命令历史窗口(Command History):记录输入的命令.
(3)工作间管理窗口(Workspace):显示当前计算机内存中Matlab变量的名称.
(4)当前路径窗口(Current Diretory):显示当前用户所在的路径.
2.常用的操作命令
clc:清除工作窗
clear:清除内存变量
quit:退出
save:保存内存变量到指定文件。
cd:显示MA TLAB工作所在目录。
Installpath:显示安装路径。
3.常用函数
三角函数:sin cos tan cot asin acos atan acot
exp :指数函数log:自然对数
imag:复矩阵虚部real:复矩阵实部
round:四舍五入mod:有符号求余rem:无符号求余
sign :符号函数sqrt:平方根abs:模
4.简单的数学运算
(5)路径搜索
在“命令”窗口中输入cd 命令,并按Enter 键确认,即显示当前MATLAB7工作所在目录。
>> cd
d:\MATLAB6p5\work 查看安装路径
>> installpath=matlabroot installpath = D:\MATLAB6p5 启动目录的设置
当前路径窗口(Current Diretory)在MATLAB 启动时的默认值。
(6)了解Matlab 帮助系统。
help lookfor
练习:
1.认识和理解MA TLABA7的各个窗口,使用dssktop 菜单栏设置窗口布局。
2.练习使用常用指令。
3.设3,1==v u ,计算 u
v v u -+2
))cos((
4.通过下拉菜单File:Preferences 改变设置指令窗中的字体、颜色等。
如: 数据显示格式的设置:在指令窗中键入y1=2*sin(0.3*pi)/(1+sqrt(5)) y1 =
0.5000
5在指令窗中输入下面一段程序,功能是:画出衰减振荡曲线y=(e-t/3)sin3t 及其他的包络线y0=(e-t/3)。
T 的取值范围是。
t=0:pi/50:4*pi; y0=exp(-t/3);
y=exp(-t/3).*sin(3*t);
plot(t,y,'-r',t,y0,':b',t,-y0,':b')观察输出结果 6查看MATLAB 的安装路径
7启动目录的设置c:\MATLAB6p5\work
第二部分 数值计算功能
数值的计算,主要包括向量、矩阵、数组的生成与计算。
2.1 向量及其运算
1.向量的生成:在命令窗口中直接输入向量.如:
>>a=[1,2,3,4] a=
1 2 3 4
2.等差元素向量的生成:如生成一个向量b=[1,3,5,7,9]. >>b=1:2:9 b=
1 3 5 7 9
其中,1为起始值,2为公差,9为终止值.
2.2 向量的基本运算
1.加(减),向量中每个元素的加(减)例如: >>a=[1,2]; >>b=[3,5]; >>a+b ans=
4 7
2.点积(dot)、叉积(cross)和混合积
例1:求b a
⋅
>>dot(a,b) ans= 13
叉积,要求变量维数至少三维
例2:]6,5,4[],3,2,1[==b a ,求b a
⨯
>>cross(a,b) ans=
-3 6 -3
例3:]2,1,5[=c ,求)(c b a
⨯⋅
>>c=[5,1,2];
>>dot(a,cross(b,c)) ans= -15
2.3.矩阵及其运算 2.
3.1 矩阵的生成
(1)直接法:例3:如生成一个三阶矩阵:⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡=987654321A >>A=[1,2,3;4,5,6;7,8,9] %: ','表示一行中元素的分隔,';'表示分行.
A=
1 2 3 4 5 6 7 8 9
(2)向量法:矩阵可以看成由多个向量的组合。
如果向量内各数据之间成等差数列,则可利用冒号表达式建立一个向量,如例3。
冒号表达式可以产生一个行向量,一般格式是: e1:e2:e3 其中e1为初始值,e2为步长,e3为终止值。
如生成向量[1,2,3]则可表示为1:1:3 矩阵 A 可表示为: >>A=[1:1:3;4:1:6;7:1:9]
2.3.2 矩阵的运算
(1)矩阵与矩阵的加(减)法:指矩阵各元素之间的加(减)法.矩阵必须具有相同的阶.加法用"+",减法用"-",数乘用"*".
例4:⎥
⎦
⎤
⎢⎣⎡=⎥⎦⎤⎢
⎣⎡=3142,4321B A ,求B A +,A 3 >>A=[1,2;3,4];
>>B=[2,4;1,3]; >>A+B ans=
3 6
4 7 >>3*A ans=
3 6 9 12
(2)矩阵与矩阵的乘法:运算符号"*",如果A 是一个s m ⨯阶矩阵,D 是一个n s ⨯阶矩阵,则B A *为n m ⨯阶矩阵.
例5:⎥
⎦
⎤
⎢⎣⎡=⎥⎦⎤⎢
⎣⎡=654321,4321D A ,求D A * >>A=[1,2;3,4];
>>D=[1,2,3;4,5,6]; >>A*D ans=
9 12 15 19 26 33
(3)矩阵与矩阵的除法:一般情况下,A\B :表示A*X=B 的解;而B/A :表示x*A=B 的解.
例6:]33,26,19;15,12,9[],6,5,4;3,2,1[],4,3;2,1[===D B A ,求D X A =*及
D B Y =*的解.
>>A=[1,2;3,4]; >>B=[1,2,3;4,5,6];
>>D=[9,12,15;19,26,33]; >>X=A\D X=
1.0000
2.0000
3.0000 4,0000 5.0000 6.0000 >>Y=D/B Y=
1.0000
2.0000
3.0000
4.0000
例7:⎥
⎦
⎤⎢
⎣⎡=4321A ,求1
-A >> A=[1,2;3,4]; >>inv(A) ans=
-2.0000 1.0000 1.5000 -0.5000
例8:求矩阵A 的特征值和特征向量
用法一:E=eig(A) 生成有矩阵A 的特征值所组成的一个列向量; 用法二:[V,D ]=eig(A) 生成两个矩阵,V:表示以矩阵A 的特征向量作为列向量组成的矩阵,D :表示由矩阵A 的特征值作为主对角线元素构成的对角矩阵.
>>E=eig(A) E=
-0.3723 5.3723
>>[V ,D]=eig(A)
V=
-0.8246 -0.4160 0.5658 -0.9094 D=
-0.3723 0
0 5.3723
>>zeros(3,5) ans=
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
例13 生成向量]5,3,1[=v 的范德蒙德矩阵.
用法:A=vander(v).其中,j n i v j i A -=)(),(
>>A=[1,3,5]; >>A=vander(v) A=
1 1 1 9 3 1 25 5 1
例14 生成一个取值在5~10之间的3行3列随机矩阵.
分析: rand(3),可生成0~1之间的矩阵,而5~10,之间的差为5,因此5*rand(3)可0~5之间的随机矩阵,需要生成5~10之间的随机矩阵,需要将矩阵5*rand(3)向右平移5个单位,即 5+5*rand(3)
>> 5+5*rand(3)
2.4 数组及其运算
2.4.1.数组的生成:可通过自定义或利用matlab 函数生成. 例如:建立数组A=[1,2,3,4,5],可直接在matlab 命令行中定义 >>A=[1,2,3,4,5]
对于一些特殊的矩阵(如随机数据构成的矩阵)可利用相应的函数生成。
例15 随机生成一个1*10数组.
>>A=rand(1,10)
2.4.2 数组的运算
数组的运算主要包括数组的排序、数值运算、关系运算和逻辑运算等 1.数组的排序:函数:sort ;默认情况下对按升序排序。
用法: sort(X):对数组X 中的元素按升序排列.dsort():降序 例16 ]2,5,7,3,1[=X ,对X 进行排列
>>x=[1,3,7,5,2] >>sort(x) ans=
1 2 3 5 7 2.数值运算
数组运算符有矩阵运算符前面加一点"."来表示,数值运算包括:加(.+),减
(.-) 乘(.*) 除(.\),乘方(.^)。
数组的加法(减法)与矩阵相同,因此运算符(+,-)既可以被矩阵接受也可以被数组接受。
例17 ]4,3,2[],3,2,1[==B A ,求数组A 于B 的乘积.
>>A=[1,2,3]; >>B=[2,3,4]; >>A.*B ans=
2 6 12 3.关系运算
关系运算包括:小于(<)、小于等于(<=)、大于(>)、大于等于(>=)、等于(==)、不等于(~=)。
比较两个元素大小时,结果为1表示关系式为真;结果为0表示关系式为假。
如,A=[1,2],B=[1,3] >>A==B >>0
4.逻辑运算
逻辑运算有三种:与(&)、或(|)、非(~)。
与(&)、或(|)可以比较两个数组的,非(~)为一元操作符。
逻辑运算针对数组或矩阵中的每一个元素。
如:A=[1,0] ~A 则为[0,1]
练习:
1.已知]4,1,3[],3,2,1[==b a ,求b a b a ⨯∙,
2.设⎥⎦
⎤
⎢⎣⎡---=2212A ,)2(eye B =,求B A ∙
3.设 ⎥⎥⎥⎦
⎤⎢⎢⎢⎣⎡=967852341A ,求其特征值和特征向量 4.对第3题中的A 进行lu 分解和qr 分解
5.设数组⎥⎦⎤⎢⎣⎡=654321A ,⎥⎦
⎤
⎢⎣⎡=362214B ,求A 与B 的乘积.
第三部分Matlab程序设计
3.1 M文件的组成
3.2 程序控制
1。
顺序结构
例1:
2。
选择语句:包含三种形式
第1种形式为只有一种选择:结构如下
第2种形式为只有两种选择:结构如下
第2种形式为只有3种或3种以上选择:结构如下
例:
3.分支语句
4。
for 循环语句
例:求1-10的平方
for 循环语句可嵌套使用,如求
∑=10
1
!i i
5。
while循环语句
6。
人机交互命令
break:中断命令:一般用在循环控制中。
return:返回调用函数或键盘。
continue:与break不同,系统只是不再执行相关的执行语句,而不会跳出当前循环。
pause:暂停等待。
input:提示用户从键盘输入数据、字符串或表达式。
3.3 函数
1。
主函数:M 文件中的第1个函数为主函数。
如果同一个M 文件中有多个函数,则通常对第1个函数进行定义,定义方式如下:
function f()
其中,function :为函数定义。
f 为函数名 2。
子函数:子函数的定义与主函数相同。
例10,编制一个函数,要求任意输入两个数值后,用两个子函数分别求出它们的和与它们的绝对值的和,再将这两个和相乘。
练习:
1 for 循环语句可嵌套使用,如求∑=10
1
!i i
2用for…end循环,编程求出1+3+5+…100的值。
3用while循环计算习题2
4建立阶跃函数。
5求和:s=1+2+…+n<1000
6求1-10的平方
7验证例10
第四部分字符串
一个字符串是由单引号括起来的简单文本,在字符串里的每一个字符是数组中的一个元素,字符串的存储给每一个字符分配8个字节,与其他的数据类型保持一致。
内容包括:字符串的设置、字符串的操作两部分。
4.1字符串设定:只需用单引号(')将设定的字符串引注即可.
例18设定字符串str为'this is a string’
>>str=’this is a string’
另外,字符串内的单引号由两个连续的单引号来表示,
例19如要表示:It’s a string
>>str=’It’’s a string’
str=
It’s a string
4.2字符串操作
包括字符串元素的读取、连接、比较、查找、替换、转换等。
1.字符串元素的读取:因为字符串是数组,可用数组操作工具进行读取.
例19 读取字符串str的第6个元素
>>str(6)
ans=
a
例20 读取字符串str的第5-13字符
>>str(5:13)
ans=
a string
2.字符串连接等操作
例21连接字符串str1=’This is’和字符串str2=’a sting’
str1=’This is’
str2=’ a string’
strcat(str1, str2)
ans=
This is a string
由于Matlab是采用C语言开发的,因此它的字符串操作与C语言基本相同.
3.字符串比较
字符串的比较主要由两个函数strcmp,实现。
其中,strcmp:比较两个字符串是否相等,当相等时,返回值为1,否则返回0。
Strncmp:比较两个字符串前n个字符是否相等,当相等时,返回值为1,否则返回0。
例22 >>words1=’situate’;
>>words2=’situp ’;
>>N=strcmp(word1,word2) N= 0
4.字符串的查找、替换
Matlab 提供finstr 、strfind 等函数来实现查找和替换功能。
findstr :会根据所给字符串中的字符来查找,返回字符的位置。
如
例23 在s=’How much wood would a woodchuck chuck?’,中查找字符’a ’; >> s=’How much wood would a woodchuck chuck?’ >>a1=findstr(s,’a ’) a1= 21
strfind(text,pattern):只能在text 中查找pattern ,并返回第一个相同字符的位置。
例24 在‘a ’中查找字符串s=’How much wood would a woodchuck chuck?’ >>b1=strfind(’a ’ , s) >>b1= []
返回结果为空,表示在’a ’中不存在与s 相同的字符串。
5.转换
在matlab 中,可利用num2str 、int2str 、str2num 、str2double 等函数实现字符串和数值之间的转换。
例25 将数值2转换成字符‘2’ >>a=num2str(2) a= 2
输出结果中,a 为字符型变量。
练习:
1. 将字符串s1=’this is a string ’, 中的字符’a ’替换成‘A ’。
2. 将数值矩阵⎥⎦
⎤
⎢
⎣⎡=4321B 转换成字符矩阵。
第五部分 多项式
包含多项式的表示,多项式的运算两部分。
5.1 多项式的表示方法:在Matlab 中多项式可通过向量来表示,对于多项式
n n n n a x a x a x a P ++++=--1110...可以利用向量],...,[10n a a a P =来表示。
例26:利用Matlab 表示多项式:12532
4
5
+++=x x x P 。
>>P=[3,5,0,1,0,12]
然后利用poly2sym 函数将该向量转换为多项式 >>y=poly2sym(P) y=
3*x^5+5*x^4+x^2+12
5.2 多项式的运算
包括多项式求根、多项式的四则运算、多项式求导及积分等 5.2.1 求根
利用roots 函数求根。
例27 求多项式71232
4
-++x x x 的根
>>p=[1,0,3,12,-7] p=
1 0 3 1
2 -7 >>roots(p) ans=
0.7876+2.4351i 0.7876-2.4351i -2.0872 0.5121
5.2.2 多项式的四则运算 1.加法(减法):如果两个多项式的阶相同,可直接进行加减运算,否则,需要将低阶多项式前加0,变为同阶多项式.
例28 两多项式a=[14 3 8 9]与多项式b=[2 4 5]相加. >>a+[0,[d]] ans=
14 5 12 14
2.乘法:使用函数conv 对多相式进行相乘. 例29 将多项式a=[1,2,3,4]与b=[5,6,7,8]相乘 >>a=[1,2,3,4] >>b=[5,6,7,8] >>c=conv(a,b) c=
5 1
6 34 60 61 52 32 3.除法:由decon 函数来完成. 5.2.3 求导与积分
求导函数:polyder ;积分函数:polyint . 例30 对多项式p=[3,1,8,8]分别求导 >>p=[3,1,8,8] >>q=polyder(p) q=
9 2 8 对q 积分
>>p1=polyint(q) >>p1=
3 1 8 0
第六部分 图形处理
此外,可利用title()对图形加题标;利用xlabel (),xlabel ()给图形加坐标轴标注,text()函数进行文本标注,legend()进行图形的图例标注。
练习:(1)plot指令的使用
在commmand窗口键入以下指令:
X=1:10
Y=[1 2 3 4 5 6 7 8]
Z=1:-1:-10
Plot(x)
Plot(y)
Plot(x,z)
观察指令窗及图形窗中的结果。
(2)subplot指令的使用;采样点数对绘图的影响的理解;title、axis指令的使用
键入所以下指令:
t1=(0:11)/11*pi;
y1=sin(t1).*sin(9*t1);
t2=(0:100)/100*pi;
y2=sin(t2).*sin(9*t2);
subplot(2,2,1),plot(t1,y1,'r.'),axis([0,pi,-1,1]),title('子图(1)')
subplot(2,2,2),plot(t2,y2,'r.'),axis([0,pi,-1,1]),title('子图(2)')
subplot(2,2,3),plot(t1,y1,t1,y1,'r.')
axis([0,pi,-1,1]),title('子图(3)')
subplot(2,2,4),plot(t2,y2)
axis([0,pi,-1,1]),title('子图(4)')
观察指令窗及图形窗中的结果。
(3)图形交互指令的使用
①、在(2)的四个子图上用ginput指令分别获取其峰值;
②、在(2)的四个子图中的子图1上用gtext指令将“不太完整的离散图
形”字符串放置到图形上。
在子图2上用gtext指令将“完整的离散图形”字符串放置到图形上。
在子图3上用gtext指令将“失真的连续图形”字符串放置到图形上。
在子图4上用gtext指令将“正确的连续图形”字符串放置到图形上。
t1=(0:11)/11*pi;
y1=sin(t1).*sin(9*t1);
t2=(0:100)/100*pi;
y2=sin(t2).*sin(9*t2);
subplot(2,2,1),plot(t1,y1,'r.'),axis([0,pi,-1,1]),title('子图(1)'),gtext('不太完整的离散图')
subplot(2,2,2),plot(t2,y2,'r.'),axis([0,pi,-1,1]),title('子图(2)'),gtext('完整的离散图形')
subplot(2,2,3),plot(t1,y1,t1,y1,'r.'),axis([0,pi,-1,1]),title('子图(3)'),gtext('是真的连续图形')
subplot(2,2,4),plot(t2,y2),axis([0,pi,-1,1]),title('子图(4)'),gtext('正确的连续图形')
(4)其它绘图指令的使用及精细指令的使用
键入所以下指令:
clf;t=6*pi*(0:100)/100;y=1-exp(-0.3*t).*cos(0.7*t);
tt=t(find(abs(y-1)>0.05));ts=max(tt);
plot(t,y,'r-','linewidth',3)
axis([-inf,6*pi,0.6,inf])
set(gca,'xtick',[2*pi,4*pi,6*pi],'ytick',[0.95,1,1.05,max(y)]) grid on
title('\ity=1-e^{-\alphat}cos{\omegat}')
text(13.5,1.2,'\fontsize{12}{\alpha}=0.3')
text(13.5,1.1,'\fontsize{12}{\omega}=0.7')
hold on;plot(ts,0.95,'bo','markersize',10);hold off
cell_string{1}='\fontsize{12}\uparrow';
cell_string{2}='\fontsize{16}\fontname{隶书}镇定时间';
cell_string{3}='\fontsize{6}';
cell_string{4}=['\fontsize{14}\rmt_{s}=' num2str(ts)];
text(ts,0.85,cell_string)
xlabel('\fontsize{14}\bft\rightarrow')
ylabel('\fontsize{14}\bfy\rightarrow')
观察指令窗及图形窗中的结果。
观察指令窗及图形窗中的结果。
B 、画出t e y t cos 5.0-=的曲线(t 的取值范围是0到2π),在x 轴上标上0.5,
1.2和4.5三个刻度。
在y轴上标0.2,1.0,3.5三个刻度。
用xlabel在横轴
下标上t;用ylabel在y轴左侧标y在图上用“小红圈”标出第一次使y=0.6的那点位置,并要求在该点旁边用12号字,斜体标出其横坐标。
t=linspace(0,2*pi,1000);
d=exp(-0.5*t);
m=cos(t);
y=d.*m;
plot(t,y);
value=0.6;
pos=find(abs(y-value)<0.001);
pos=pos(1);
t2=t(pos);
y2=y(pos);
hold on;
plot(t2,y2,'or','MarkerSize',5);。