MATLAB与系统仿真实验指导书新模板650321.docx
《MATLAB与系统仿真实验指导书新模板650321.docx》由会员分享,可在线阅读,更多相关《MATLAB与系统仿真实验指导书新模板650321.docx(18页珍藏版)》请在冰豆网上搜索。
MATLAB与系统仿真实验指导书新模板650321
《MATLAB与系统仿真》
实验指导书
西安电子科技大学机电工程学院
2014年9月
实验一MATLAB基本使用、矩阵操作及编程
一、实验目的和要求
熟悉MATLAB的界面和基本操作,掌握矩阵的建立方法及各种运算,熟练使用MATLAB编程语言编写程序。
1.熟悉MATLAB软件的界面和帮助系统。
2.掌握MATLAB软件中关于矩阵建立、矩阵初等变换以及矩阵算术、关系、逻辑运算的各种命令。
3.掌握MATLAB软件中M函数和M文件的编写,以及程序结构与控制,学会编写一般程序。
二、实验仪器
计算机一台,注意正确开、关机及打开软件。
三、实验内容与步骤
1.MATLAB的基本使用
(1)启动与退出
双击MATLAB图标,进入MATLAB命令窗口,观察各个窗口以及菜单;
单击File菜单中的Exit,或使用MATLAB的Exit命令退出。
(2)变量和矩阵的建立
>>a=25
>>b=3-9i
问题1.1:
输入“>>a=25;”,结果有什么区别?
>>c=[1,2,3,4;5,6,7,8]
>>d=0:
1:
10
>>e=linspace(1,11,6)
问题1.2:
体会以上输入方法有什么区别和联系?
若A为在0~2π之间均匀分布的22个数据,B=(1.3,2.5,7.6,2,-3),C=(23,20,17,14,11,8,5,2),各用何种方法输入较简单?
>>A=[1,2,3;4,5,6;7,8,9]
问题1.3:
输入“A=[123;456;789]”,结果相同吗?
MATLAB中对变量名有什么规定?
(3)基本命令
>>savedataabc
>>loaddata
使用↑键和↓键查看或执行以前执行过的命令
>>d=1223.58
>>formatshorte%显示格式设定
>>d
>>formatrat
>>d
>>whoab%工作空间管理
>>whos
>>workspace
>>path
>>clear%注意工作空间的变化
问题1.4:
执行命令“clc”和“clear”结果有何不同?
>>helpeig%帮助命令
>>lookformax
>>demo
2.矩阵的操作
(1)测试矩阵大小
>>f=length(A)
>>[n,m]=size(A)
>>g=ndims(A)
问题1.5:
以上三个命令有什么区别?
(2)矩阵元素的引用
>>A(1,:
)
>>A([1,3],:
)
>>A(2:
3,1:
2)
问题1.6:
输入“A(2,3)”,结果任何,输入“A(6)”,结果相同吗?
>>A([1,3],:
)=A([3,1],:
)
>>A(2,:
)=4
>>A(find(A==4))=0
>>A(3,:
)=[]
>>reshape(A,3,2)
问题1.7:
如何将A的第1列和第2列互换?
输入“reshape(A,2,4)”能否得到正确结果?
>>A(4,5)=2
>>[A(1:
3,2:
4),A(2:
4,1:
3);A,A(:
2)]
(3)矩阵变换
>>diag(A,1)
>>tril(A,2)
>>triu(A,2)
>>flipud(A)
>>fliplr(A)
>>rot90(A)
问题1.8:
输入“rot90(A,2)”和“rot90(A,-2)”结果有区别吗?
(4)特殊矩阵的产生
>>B=eye(5)
>>C=ones(2,3)
>>D=zeros(3,2)
>>E=rand(2,5)
>>randn(3,4)
>>vander([239])
问题1.9:
产生一个在[10,20]内均匀分布的4阶随机矩阵。
>>logspace(0,2,5)
>>diag([3,5,2])
>>hilb(4)
>>F=magic(5)
(5)矩阵的算术运算
>>A’
>>det(F)
>>rank(F)
>>inv(F)
>>eig(F)
>>[V,D]=eig(F)
>>trace(F)
>>3*B
>>B+F
>>F-B
>>B*F
>>F/B
>>F\B
>>F^2
问题1.10:
分组比较“B*F”和“B.*F”,“F/B”和“F./B”,“F\B”和“F.\B”,“F^2”和“F.^2”以及“2^B”和“2.^B”的区别。
(6)矩阵的关系运算
>>A>3
>>B~=0
>>C==0
>>F<=B
问题1.11:
输入“2<4”,结果如何?
(7)矩阵的逻辑运算
>>h=4|0
>>k=xor(3,5)
>>B-1&F
>>G=~C
问题1.12:
输入“x=1:
5”,“y=3:
7”,“t1=x-2>3”,“t2=(x>3)-y”,“t3=~t1-2”,“t4=(x>1)&(y<6)”,结果如何?
从中体会逻辑操作符、关系操作符、计算操作符的优先等级和计算先后次序。
(8)常用计算函数
>>floor(5.8)
>>ceil(-6.2)
>>round(7.5)
>>fix(4.4)
问题1.13:
以上四个取整函数有什么区别?
>>rem(-3,2)
>>mod(-3,2)
问题1.14:
以上两个求余函数有什么区别?
>>x=exp(4)
>>y=log(d)
>>z=abs(-pi)
(9)字符串变量
>>H_1='AMATLABexample.'
>>H_2='学习MATLAB。
'
>>H_3=str2mat('这','字符','串数组','','由4行组成')
>>H_4=strvcat('这','字符','串数组','','由4行组成')
问题1.15:
由以上两个函数建立的字符串数组有什么不同?
与直接输入法相比有什么优点?
>>size(H_3),size(H_4)
>>strcmp(H_3,H_4)
>>H_5='a+b',eval(H_5)
>>H_6=[H_2(1:
2),H_2(end)]
问题1.16:
建立字符串“ThisisMATLABexample‘3.2-1’.”,并作以下操作:
(1)统计字符串中数字和非字母字符的个数;
(2)将字符串中的大写字母替换为小写字母;(3)将字符串逆序排列;(4)将字母a替换成t,比较两个字符串和字符串是否相同。
(10)高维数组
>>K(2,4,2)=1
>>K(2,4,2)=1
>>C=ones(2,3);C(:
:
2)=ones(2,3)*2;C(:
:
3)=ones(2,3)*3
>>D=rand(2,4,3)
>>DS=reshape(D,[2,6,2])
>>L=[12;34],M=cat(4,L,L,L,L)
>>size(M)
>>squeeze(M)
3.MATLAB编程
(1)命令文件
单击MATLAB菜单栏上的新建按钮,进入MATLAB文件编辑窗口,即可输入各种程序及函数,编辑完成后保存文件,并在命令窗口中执行。
建立命令文件,在文件编辑窗口输入:
A=[123]
B=[567]
C=dot(A,B)
D=cross(A,B)
以文件名“ex”存盘,回到命令窗口输入“ex”调用程序文件。
并写出结果。
>>ex
(2)函数文件
单击MATLAB菜单栏上的新建按钮,进入MATLAB文件编辑窗口,定义函数之后,编写函数,编辑完成后保存文件,文件名必须要与函数名相同。
然后可以在命令窗口或程序文件中调用。
建立文件名为“my”的文件,在文件编辑窗口输入:
function[v,s]=vs(v0,a,t)
v=v0+a*t;
s=v0*t+a*t^2/2;
存盘,在命令窗口调用vs函数计算初速度为2m/s,加速度为4m/s2的物体在5秒后的速度和位移,要注意参数的匹配,并写出结果
>>[v,s]=vs(2,4,5)
(3)选择语句
编写命令文件比较数的大小
ifa>b
max=a
elseifa==b
max=’两数相等’
else
max=b;
disp([‘最大值为:
’,num2str(max)]);
end
以文件名“comp”保存并任给两个数字在命令窗口调用,并写出调用语句及执行结果。
问题1.17:
编程:
从键盘输入三个数,按大小顺序输出。
判断数字奇偶性
var=input(‘输入一位数’)
switchvar
case{1,3,5,7,9},disp(‘奇数’)
case{0,2,4,6,8},disp(‘偶数’)
otherwise,disp(‘非数字’)
end
以文件名“odd”保存并在命令窗口调用,任给一个数字,写出调用语句及执行结果。
问题1.18:
某商场促销,100元可当作230元花,一个顾客挑选了标价766元的商品,需要实际付款多少?
判断是否划算?
如果不划算,给出还需挑选商品的标价范围,并计算实际付款数额。
编写函数文件对任意商品价格都能实现计算实际付款数额及判断是否划算并给出建议的功能。
(4)循环语句
编写命令文件利用for循环求出从100~200之间的所有素数
form=101:
200
k=fix(sqrt(m));
fori=2:
k+1
ifrem(m,i)==0;
break;
end
end
ifi==k+1
disp(int2str(m))
end
end
自取文件名保存并在命令窗口调用。
写出调用语句和执行结果。
问题1.19:
建立一个命令文件
A=[2,5,0;2,4,7;3,1,9]
fork=A
y=k
(1)-k
(2)+k(3)
end
执行结果如何?
(A为矩阵,计算时将按列分步赋值)
问题1.20:
编写命令文件求
的值,其中a是一个1~9之间的数字,a和n都由键盘输入。
用while循环求100~200的和
sum=0;
i=1;
whilei<=100
sum=sum+I;
i=i+1;
end
sum
自取文件名保存并在命令窗口调用。
写出调用语句及执行结果。
问题1.21:
用公式
求π的近似值,直到最后一项的绝对值小于10-6。
(5)综合编程
编写函数文件求
,并写出调用函数的语句。
一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。
编写函数文件输出全部水仙花数。
一个球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。
编写函数文件求它在第10次落地时共经过多少米?
第10次反弹多高?
编写调用该函数文件的命令文件。
猜数游戏:
首先由计算机产生[1,100]之间的随机整数,然后由用户猜测所产生的随机数。
根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,显示“High”,小于则显示“Low”,等于显示“Win!
”,同时退出游戏。
用户最多可以猜7次,猜不中显示“Lose!
”。
四、实验报告要求
将实验步骤中的每一条命令输入软件中,观察执行结果并记录下来,体会相似命令之间的差异;回答实验步骤中的问题,对需要编程的题目在调试通过并以实例验证正确后在题目下方的空白处写上程序,对重要语句加注释。
五、参考资料
朱衡君主编《MATLAB语言及实践教程》(第一版),北京:
清华大学出版社;北京交通大学出版社,2004.10
徐金明主编《MATLAB实用教程》,北京:
清华大学出版社,2005
实验二MATLAB数据可视、数值计算、符号计算与系统仿真
一、实验目的和要求
熟练使用MATLAB的图形绘制和处理语句,掌握基本数值计算,掌握Simulink工具箱的基本使用。
1.熟练使用MATLAB软件绘制二维图形、三维图形,对图形做修饰和标注以及绘制一些特殊图形。
2.掌握MATLAB的基本数值计算函数。
3.掌握MATLAB的基本符号计算函数。
4.掌握MATLAB软件中Simulink工具箱的基本使用方法,建立简单的模型并仿真。
二、实验仪器
PC机一台,注意正确开、关机及打开软件。
三、实验内容与步骤
1.数据可视
(1)绘制二维图形
t=0:
pi/50:
4*pi;
holdon
plot(exp(t/100).*sin(t-pi/2),'--mo')
plot(sin(t*pi),':
bs')
gridon
figure
(2)
y=exp(-t/3).*sin(3*t) ;
plot(t,y,'-.r*','LineWidth',2)
问题2.1:
是否可以将exp(-t/3).*sin(3*t)改为exp(-t/3).*sin(3*t)?
为什么?
(2)图形修饰与控制
axissquare
axisequal
title('衰减震荡曲线')
axis([0,12,-1,1])
xlabel('时间')
ylabel('幅值')
text(5,0.6,'e^{-t/3}sin3t')
boxon
figure(3)
subplot(2,2,1);x=0:
pi/60:
2*pi;plot(x,exp(-i*x))
subplot(2,2,2);fplot('log(x)',[10,2e3])
subplot(2,1,2);plot(x,sin(x),':
b',x,cos(x),'-r')
legend('sin(x)','cos(x)')
问题2.2:
如果将以上第四条语句与第三条语句的输入顺序互换,那么图例将会被标注在哪幅图上?
clear
a=2;%衰减系数
w=3;%震荡频率
t=0:
0.01:
10;
y=exp(-a*t).*sin(w*t);%计算函数值
[y_max,i_max]=max(y);
t_text=['t=',num2str(t(i_max))];%生成最大值点的横坐标字符串
y_text=['y=',num2str(y_max)];%生成最大值点的纵坐标字符串
max_text=char('maximum',t_text,y_text);%生成标志最大值点的字符串
%生成标志图名用的字符串
tit=['y=exp(-',num2str(a),'t)*sin(',num2str(w),'t)'];
plot(t,zeros(size(t)),'k')
holdon
plot(t,y,'b')
plot(t(i_max),y_max,'r.','MarkerSize',20)
text(t(i_max)+0.3,y_max+0.05,max_text)
title(tit),xlabel('t'),ylabel('y'),holdoff
(3)特殊二维图形
clc
h=line([2,4,5],[1,3,6])
set(h,'color',[21234120]/255)
figure
(2)
polar(30,3,'pr')
figure(3)
y=logspace(-1,2);
loglog(y,10*exp(y),'-s');gridon
figure(4)
X=[2,3,5,6,1]
subplot(2,2,1),pie(X)
subplot(2,2,2),bar(X)
subplot(2,2,3),stairs(X)
subplot(2,2,4),stem(X)
(4)绘制三维图形
t=0:
pi/60:
10*pi;
x=sin(t);
y=cos(t);
plot3(x,y,t,'*-m')
gridon
figure
(2)
[x,y]=meshgrid(-3:
0.1:
3);
z=3*(1-x).^2.*exp(-(x.^2)-(y+1).^2)-10*(x/5-x.^3-y.^5).*exp(-x.^2-y.^2)...
-1/3*exp(-(x+1).^2-y.^2);
surf(x,y,z),colorbar
figure(3)
[X,Y,Z]=sphere;
surf(X,Y,Z)
axisequal
shadinginterp
view([190,50])
2.数值计算
(1)多项式
对多项式p=x4+2x3-5x+6和s=x2+2x+3,用多项式的系数表示为
p=[1,2,0,-5,6]
s=[1,2,3]
A=[1,2,3;2,3,4;3,4,5]
p=poly(A)
r=[1,4,8];
p=poly(r)
poly2sym(p)
p=[1,2,0,-5,6];s=[0,0,1,2,3]
p+s
p-s
conv(p,s)
问题2.3:
可以用p*s来求多项式的乘积吗?
为什么?
问题2.4:
向量的除法,除数不能为零,这里s的第一个元素为零,怎么办?
求多项式p=x2+2x+6的根
解一:
p=[1,2,6];
r=root(p)
解二:
pc=compan(p)
r1=eig(pc)
求多项式p=x4+2x3-5x+6的一阶导数,求x=1,3,5时多项式p(x)的值。
p=[1,2,0,-5,6];
d=polyder(p)
x=1:
2:
5
y=polyval(p,x)
问题2.5:
若要求x为矩阵[1,4;-3,5]时多项式的值,应怎么做?
(2)方程组求解
(a)求非齐次线性方程组AX=b的解,其中A=[2,3,5;3,6,8;6,5,4],b=[12;34;43]
>>A=[2,3,5;3,6,8;6,5,4];b=[12;34;43];
>>R=rank(A)
>>X=A\b
(b)线性齐次方程组的求解
求解线性方程组的通解:
A=[1,2,2,1;2,1,-2,-2;1,-1,-4,-3];
formatrat
B=null(A,'r')
写出通解:
x=k1*B(:
1)+k2*B(:
2)
(3)求函数的极值
求函数f(x)=2x3-6x2-18x+7在区间(-2,4)的极小值,并作图。
f=inline('2*x.^3-6*x.^2-18*x+7');
[x,fval]=fminbnd(f,-2,4)
fplot(f,[-2,4])
问题2.6:
如何求函数f的最大值?
(4)数值差分、积分
X=[1367912;5820274];
Y1=diff(X)
Y2=diff(X,2)
X=-1:
0.1:
1;
Y=1./(1+25*X.^2);
T=trapz(X,Y)
(5)常微分方程
求解微分方程y’=-2y+2x2+2x,0≤x≤0.5,y(0)=1
fun=inline('-2*y+2*x^2+2*x','x','y');
[x,y]=ode23(fun,[0,0.5],1)
plot(x,y)
(6)插值和拟合
clc;clear;clf;
x=[1:
1:
12];
y=[1:
1:
5];%原始数据的定义
z=[0.20.240.250.260.250.250.250.260.260.290.250.29;0.270.310.30.30.260.280.290.260.260.260.260.29;0.410.410.370.370.380.350.340.350.350.340.350.35;0.410.420.420.410.40.390.390.380.360.360.360.36;0.30.360.40.430.450.450.510.420.40.370.370.37];%z是一个5乘12的矩阵。
surf(x,y,z);
title('OriginaldataPlot');xlabel('X'),ylabel('Y'),zlabel('Z'),
axis([015060.20.55]);%对X,Y,Z轴范围的控制
x1=1:
0.2:
12;
y1=1:
0.2:
5;
[x2,y2]=meshgrid(x1,y1);
t11=interp2(x,y,z,x2,y2,'cubic');%二维插值,需要用到的函数interp2
figure
(2)
surf(x1,y1,t11);
title('AfterFitdataPlot');
xlabel('X'),ylabel('Y'),zlabel('Z'),
axis([015060.20.55]);%对X,Y,Z轴范围的控制
3.符号计算
(1)函数的微分
symsxyt
D1=diff(sin(x^2)*y^2,2)
D2=diff(D1,y)
D3=diff(t^6,6)
问题2.7:
试输入“diff(‘a^3*x^3-b*x’,a,2)”,有什么错误?
怎样改正?
如果A是一个矩阵,diff(A)将怎样计算?
(2)函数的积分
fun=inline('3*x.^2./(x.^3-2*x.^2+3)');
S1=quad(fun,0,2)
S2=quadl(fun,0,2)
(3)级数展开
symax
f=a/(x-10);
y1=taylor(f,x,3)
y2=talor(f,3,x,4)
MATLAB中没有专门用于傅立叶级数展开的命令,可编一个函数文件来实现
function[a0,an,bn]=mfourier(f)
symsnx
a0=int(f,-pi,pi)/pi;
an=int(f*con(n*x),-pi,pi)/pi;
bn=int(f*sin(n*x),-pi,pi)/pi;
保存后在命令窗口执行:
symsx
f=x^2+x;
[a0,an,bn]=mfourier(f)
执行结果化简后不难得到:
an=4*(-1)^n/n^2,bn=2*(-1)^(n-1)/n
(4)常微分方程解法
D1=dsolve('D2y=Dy+exp(x)')
D2=dsolve('(Dy)^2+y^2=1','s')
D3=dsolve('Dy=a*y','y(0)=b')
[x,y]=dsolve('Dx=y','Dy=-x')
3.Simulink的基本使用
(1)基本操作
单击工具栏上的按钮进入Simulink工具箱,观察工具箱里的各种模块,单击新建按钮,打开模型编辑窗口,练习把模块拖入模型编辑窗口,双击模块修改其参数,右击模块旋转或修改模块名,连接各个模块。
(2)建模与仿真
建立一个简单模型并仿真