matlab实验指导Word下载.docx
《matlab实验指导Word下载.docx》由会员分享,可在线阅读,更多相关《matlab实验指导Word下载.docx(28页珍藏版)》请在冰豆网上搜索。
789],[i,j]=find(A>
=5),
forn=1:
length(i)
m(n)=A(i(n),j(n))
end
M
运行结果:
5、程序代码:
a11=input('
a11='
),a12=input('
a12='
),
a21=input('
a21='
),a22=input('
a22='
A=[a11,a12,a21,a22],
DA=det(A),IA=inv(A),EA=eig(A)
6、程序代码如下:
sum(2.^[0:
63])
4.心得体会
通过本次的学习,使我对MATLAB的使用有了基本的了解。
熟悉了MATLAB的一系列运用和命令窗口的基本组成。
掌握如何去建立矩阵及各种表达式的书写规则和常规函数的使用。
对行列式的运用有了进一本的了解。
实验二M函数与M文件的编写与应用
1、熟悉MATLAB的环境与工作空间。
2、熟悉变量与矩阵的输入、矩阵的运算。
3、熟悉M文件与M函数的编写及应用。
4、熟悉MATLAB控制语句与逻辑运算。
1、1行100列的Fibonacc数组a,a
(1)=a
(2)=1,a(i)=a(i-1)+a(i-2),用for循环指令来寻求该数组中第一个大于10000的元素,并指出其位置i。
2、编写M脚本文件,定义下列分段函数,并分别求出当(x1=1,x2=0.5)、(x1=-1,x2=0)和(x1=0,x2=-0.5)时的函数值。
3、编写M函数表示曲线
sint以及其它的包络线
,并从命令窗口输入命令语句绘制曲线。
t的取值围是[0-4
]。
4、设
编写一个M文件,使的调用函数f(x)时,x可用矩阵代入,得出的f(x)为同价矩阵。
\\
5、实验程序及结果心得体会
1、程序代码如下:
n=100;
a=ones(1,n);
fori=3:
n
a(i)=a(i-1)+a(i-2);
ifa(i)>
10000
a(i),
break;
end;
end,i
程序运行结果如下:
2、程序代码如下:
function[p]=ff(x1,x2)
ifx1+x2>
1
p=0.5457*exp(-0.75*x2^2-3.75*1^2-1.5*1);
elseifx1+x2<
=-1
elsep=0.7575*exp(-x2^2-6.*x1^2);
End
在命令窗口输入
x1=0.x2=-0.5
ff(x1,x2)
ans=0.5899
输入
X1=-1,x2=0
Ff(x1,x2)
程序结果如下:
Ans=
0.00229
输入
X1=1,x2=0..5
程序结果如下
Ans=
0.0224
functiony=ff(t)
y1=exp(-t/3)
y2=exp(-t/3).*sin(3*t);
y=[y1;
y2]
单击M文件编辑器的SAVE图标,使出现标准的文件保存对话框
在文件对话框中选定目录填写文件击SAVE按钮把M文件保存到制定的文件目录中
输入如下命令
T=0:
pi/100:
4*pi;
Plot(t,ff(tt))
functionf=fx(x)
f=1./((x-2).^2+0.1)+1./((x-3).^4+0.01)
4实验心得
通过对M函数与M文件的编写与应用使我对MATLAB的环境与工作空进有了更近一步的熟悉,可以在文件保存对话框中选定目录,填写文件名并设置M文件保存在制定的目录中,熟悉了M文件与M函数的编写与应用和MATLAB的控制语句与逻辑运算。
实验三选择与循环结构程序的设计
1、掌握if语句、switch语句、try语句的使用。
2、掌握利用for语句、while语句实现循环结构的方法。
1、根据
求
(1)y<
时的最大值;
(2)与
(1)的n值对应的y值。
2、已知
求f1~f100中,最大值最小值、各数之和,以及正数、零、负数的个数。
3、输入一个百分制成绩,要求输出成绩等级A.B.C.D.E.其中,90~100分为A,80~89分为B,70~79分为C,60~69分明为D,60分一下为E。
4、求分段函数的值。
用if语句实现输出x=-0.5,-3.0,1.0,2.0,2.5,3.0,5.0时的y值。
3.实验程序及结果
1、用for循环,程序如下:
100%取足够大的n值,这里取100
f(n)=1./(2*n-1)
y=sum(f)
ify>
=3
my=y-f(n)%y<
3时的最大y值
mn=n-1%y<
3时的最大n值
break
end
my
Mn
my=
2.9944
mn=
56
f
(1)=1,f
(2)=0,f(3)=1
forn=4:
100
f(n)=f(n-1)-2*f(n-2)+f(n-3)
a=sum(f)%各数之和
b=max(f)%最大值
c=min(f)%最小值
p=f==0,d=sum(p)%零的个数
p1=f>
0,e=sum(p1)%正数的个数
p2=f<
0,f=sum(p2)%负数的个数
a,b,c,d,e,f
a=
-7.4275e+11
b=
4.3776e+11
c=
-8.9941e+11
d=
2
e=
49
f=
per=input('
输入成绩:
'
)
switchfloor(per/10)%将grade向负无穷方向取整,不能为fix
case9
grade='
%100>
grade>
=90
case8
B'
case7
C'
case6
D'
casenum2cell(0:
5)%数值向量必须转换为元胞数组才能作为判决条件
E'
otherwise
ifper==100
%grade=100
elsegrade='
error'
%grade<
0或>
程序运行,在命令窗口输入成绩后可显示成绩等级。
functiony=ex3_4(x)
fori=1:
length(x)
if(x(i)<
0)&
(x(i)~=-3)%如果x为一向量,x<
0只能是x的每个元素小于0才返回1
y(i)=x(i)^2+x(i)-6
elseif(x(i)>
(x(i)<
5)&
(x(i)~=2)&
(x(i)~=3)
y(i)=x(i)^2-5*x(i)+6
else
y(i)=x(i)^2-x(i)-1
y
程序运行如下:
在命令窗口输入下列语句:
X=[-5.0,-3.0,1.0,2.0,2.5,3.0,5.0],
Y=ex3_4(x)
有如下结果:
y=
14.000011.00002.00001.0000-0.25005.000019.0000
本实验是对循环与选择结构程序设计,在本实验中有对IF语句SWITCH语句TRY语句的使用。
其中有当条件成立时,则执行语句组,执行完之后执行IF语句的后续语句,若条件不成立,则直接执行IF语句的后续语句。
而SWITCH语句是更具表达式的取值不同,分别执行不同的语句。
最后学习了循环结构有FORWHILE循环。
,FOR循环变量可以为数据,WHILE循环以不定次数求一组命令的值,而BREAK语句与CONTINUE语句他们一般与IF语句配合使用。
实验四绘图函数的应用
1、熟悉二维和三维绘图函数的命令。
2、熟悉图形修饰和控制方法。
3、了解特殊坐标图形的绘制。
1、在同一图形窗口绘制sinx,cosx曲线,要求用不同颜色和线型、数据点标记字符,X轴围为[0--2
],y轴围为[-2-2],并加注解说明sinx、cosx以区分,图例注解放置在图形右下角。
2、定义函数myfun:
y(1,2)=[200sinx/x,x^2],绘制该函数在X=[-20-20]区间的图形。
3、试将图形窗口分割成三个区域,分别格绘制y=lgx在[0-100]区间的对数坐标,x半对数坐标及y半对数坐标,并加上标题添加图。
4、t=-3:
0.125:
3,x=cos2t,y=cos2t,z=x^2+2*y^2,请绘制带有等高线的基于x,y,z的三维网格曲面图,并填充颜色。
坐标轴围为[-1,1,-1,1,0,,2].
5、绘制出饱和非线性特性方程
的曲线。
1、输入的程序代码如下:
0.05:
2*pi;
plot(t,sin(t),'
r-.o'
t,cos(t),'
m-s'
legend('
sinx'
'
cosx'
4)
axis([02*pi-22])
functionY=myfun(x)
Y(:
1)=200*sin(x(:
))./x(:
);
2)=x(:
).^2;
x=0:
0.1:
100;
y=log10(x);
subplot(311),loglog(x,y)
grid
title('
logloggraph'
subplot(312),semilogx(x,y)
semilogxgraph'
subplot(313),semilogy(x,y)
semilogygraph'
t=-3:
3;
x=sin(2.*t);
y=cos(2.*t);
[x,y]=meshgrid(x,y);
z=x.^2+2*y.^2;
mesh(x,y,z)
axis([-1--1-03])
pause
meshc(x,y,z)
surf(x,y,z)
5、程序代码如下:
x=[-2:
0.02:
2];
y=1.1*sign(x).*(abs(x)>
1.1)+x.*(abs(x)<
=1.1);
plot(x,y)
本节学习了对MATLAB的绘图使用,MATLAB可以提供很多图形函数,可以绘制二维,三维和一些专业的数据图形,学习到了关于MATLAB其他控制函数的使用方法。
其中对基本的绘图命令,轴的形式与刻度设置以及图形的标注网格及图例说明有了清楚的认识,对各个命令如fplotsubplotplotyypolar等有了基本的了解。
在后章节对三维图形的绘制有了一定的方法。
对三维图形的图形绘制函数如surfmesh函数有了一定的认识。
实验六Simulink仿真应用
1、熟悉Simulink环境。
2、熟悉建立Sinulink仿真框图并进行系统仿真。
3、熟悉编写S函数和M函数对系统进行仿真。
1、VanderPol方程所描述系统的仿真。
设置初始条件x1(0)=x2(0)=0.25,仿真时间t=20s及VanderPol方程
要求:
(1)绘出Simulink仿真模块图并进行仿真得到系统的时间相应和相平面图。
(2)编写M函数和M文件得到系统的时间响应和相平面图。
(3)编写S函数并绘出S函数仿真框图,仿真得到系统的时间响应和相了、平面图。
2、采用S函数来构造非线性分段函数。
先编写一个m函数文件如下:
functionxdot=vdpol(t,x)
xddot1
(1)=x
(1)*(1-x
(2)^2)-x
(2);
xdot1
(2)=x
(1);
xdot=xdot1'
;
然后编写另一个M文件:
ts=[020];
x0=[0.250.25]
[t,x]=ode45('
vdpol'
ts,x0);
subplot(121),plot(t,x)
subplot(122),plot(x(:
1),x(:
2))
系统仿真块图如下:
采用S函数编写如下:
function[sys,x0,str,ts]=sy6_13(t,x,u,flag)
switchflag,
case0,
[sys,x0,str,ts]=mdlInitializeSizes;
case1,
sys=mdlDerivatives(t,x,u);
case3,
sys=mdlOutputs(t,x,u);
case{2,4,9}
sys=[];
error(['
Unhandledflag='
num2str(flag)]);
function[sys,x0,str,ts]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates=2;
sizes.NumDiscStates=0;
sizes.NumOutputs=2;
sizes.NumInputs=0;
sizes.DirFeedthrough=0;
sizes.NumSampleTimes=1;
%atleastonesampletimeisneeded
sys=simsizes(sizes);
x0=[0.25;
0.25];
str=[];
ts=[00];
functionsys=mdlDerivatives(t,x,u)
sys
(1)=[1]=x
(1).*(1-x
(2).^2)-x
(2);
sys
(2)=x
(1);
functionsys=mdlOutputs(t,x,u)
sys=x;
然后绘制S函数仿真框图:
仿真可以得到与上图一样的结果。
我用的的是matlab8.0仿真得到的结果与书上不一致
2、编写的S函数如下:
function[sys,x0,str,ts]=ex5sf2(t,x,u,flag)
case0,
case3,
case{1,2,4,9}
otherwise
Unhandledflag='
function[sys,x0,str,ts]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates=0;
sizes.NumDiscStates=0;
sizes.NumOutputs=1;
sizes.NumInputs=1;
sizes.DirFeedthrough=1;
sizes.NumSampleTimes=1;
sys=simsizes(sizes);
x0=[];
str=[];
ts=[00];
ifu<
sys=3*sqrt(u);
elseifu>
=1&
u<
3
sys=3;
=3&
4
sys=3-(u-3)^2;
=4&
5
sys=2;
=5&
6
sys=2-(u-5)^2;
sys=1;
系统框图如下:
仿真得到:
4实验心得
本章学习了SIMULINK仿真工具箱,知道了他是对动态系统进行建模,仿真和分析的一个软件包,支持连续,离散及两者混合的线性和非线性的系统仿真。
知道了它的作用是提供了封装和模块化工具,提高了仿真的集成化和可视化程度,简化了设计过程,减轻了设计负担。
更加熟悉的去编写S函数和M函数并对系统进行仿真
实验七线性系统分析与设计
1、熟悉MATLAB控制系统工具箱。
2、掌握MATLAB控制系统工具箱中进行分析设计的函数命令。
3、了解控制系统的计算机辅助分析与设计方法。
1、设一高阶系统的传递函数为
将系统的传递函数模型转换为状态空间模型及零点增益模型。
2、已知二阶系统传递函数为
当
=1时,试计算阻尼比
从0.1~1时的二阶系统的阶跃响应,并绘制阶跃响应三维网格曲面图。
3、已知一系统的传递函数为
绘制Bode图、Nichlos图、Nyquist图。
4、设系统的开环传递函数为
画出系统的根轨迹,并求出临界点(即跟在虚轴上)的增益。
num=[0.00010.02181.04369.3599];
den=[0.00060.02680.63656.2711];
sys=idtf(num,den);
sys1=idss(sys);
sys2=zpk(sys);
num=1;
Y=zeros(200,1);
i=0;
forbc=0.1:
den=[1,2*bc,1];
t=[0:
19.9]'
i=i+1;
i)=step(sys,t);
mesh(Y)
3、程序如下:
clc
clear
closeall
num=[00281282];
den=[151010510];
sys=idtf(num,den)
bode(sys)
figure
nicho(sys),
clear;
clc;
clf;
disp('
分析连续系统'
s=idtf(1,[1,12,30,50,3])
figure
(1);
rlocus(s);
sgrid;
连续系统根轨迹图'
rlocfind(s)
分析离散系统'
sd=c2d(s,0.5,'
t'
figure
(2);
rlocus(sd);
zgrid;
离散系统根轨迹'
rlocfind(sd)
在本章的学习中,我学的了控制系统工具箱的使用,他是对于孔子系统的仿真和分析,影响最为深刻的事孔子系统的模型,时域分析方法和频域分析方法等。
,印象最深的事对模型的转换“传递函数模型,状态空间模型,零极点增溢模型”之间的相互转换。
对模型的如串联,并联,反馈,闭环有了一定的了解。
但是对于控制系统的时域分析还是没有弄懂,可能是因为其中的各个函数很复杂的原因