中南大学自动化胡杨系统仿真实验报告完整版.docx

上传人:b****8 文档编号:28165410 上传时间:2023-07-08 格式:DOCX 页数:57 大小:885.98KB
下载 相关 举报
中南大学自动化胡杨系统仿真实验报告完整版.docx_第1页
第1页 / 共57页
中南大学自动化胡杨系统仿真实验报告完整版.docx_第2页
第2页 / 共57页
中南大学自动化胡杨系统仿真实验报告完整版.docx_第3页
第3页 / 共57页
中南大学自动化胡杨系统仿真实验报告完整版.docx_第4页
第4页 / 共57页
中南大学自动化胡杨系统仿真实验报告完整版.docx_第5页
第5页 / 共57页
点击查看更多>>
下载资源
资源描述

中南大学自动化胡杨系统仿真实验报告完整版.docx

《中南大学自动化胡杨系统仿真实验报告完整版.docx》由会员分享,可在线阅读,更多相关《中南大学自动化胡杨系统仿真实验报告完整版.docx(57页珍藏版)》请在冰豆网上搜索。

中南大学自动化胡杨系统仿真实验报告完整版.docx

中南大学自动化胡杨系统仿真实验报告完整版

--------------------------------------------------------------------------作者:

_____________--------------------------------------------------------------------------日期:

_____________

中南大学自动化胡杨系统仿真实验报告完整版

中南大学

系统仿真实验报告

指导老师:

实验者:

学号:

专业班级:

完成时间:

 

实验一MATLAB中矩阵与多项式的基本运算

基本命令训练:

1.eye(m)

取n=3,程序如下:

>>eye(3)

ans=

100

010

001

结论:

eye(n)用于产生n×n维的单位矩阵,在这里n取3,故产生3×3维单位矩阵。

2.one(n)、ones(m,n)

对ones(n)取n=5,对ones(m,n)取m=3,n=5,程序如下:

>>ones(5)

ans=

11111

11111

11111

11111

11111

>>ones(3,5)

ans=

11111

11111

11111

结论:

ones(n)用于产生n×n维的全1矩阵,在这里n取5,故产生5行5列全1矩阵。

ones(m,n)用于产生m×n维的全1矩阵,在这里m取3,n取5,故产生3行5列的全1矩阵。

 

3.zeros(m,n)

取m=3,n=2,程序如下:

>>zeros(3,2)

ans=

00

00

00

结论:

zeros(m,n)用于产生m×n维全0矩阵,在这里m取3,n取2,故产生3行2列全0矩阵。

4.rand(m,n)

取m=3,n=4,程序如下:

>>rand(3,4)

ans=

0.95010.48600.45650.4447

0.23110.89130.01850.6154

0.60680.76210.82140.7919

结论:

rand(m,n)用于产生m×n维平均分布的随机矩阵,在这里m取3,n取4,故产生了3行4列的随机矩阵

5.diag(v)

先创建3×3的魔方矩阵v,在进行diag(v)运算,程序如下:

>>v=magic(3)

diag(v)

v=

816

357

492

 

ans=

8

5

2

结论:

diag(v)用于得到矩阵v的对角元素

6.A\B、A/B、inv(A)*B、B*inv(A)

先创建A、B两个矩阵,在进行运算,程序如下:

>>A=[1,2;3,4];

>>B=[5,6;7,8];

>>a=A\B

b=A/B

c=inv(A)*B

d=B*inv(A)

a=

-3-4

45

 

b=

3.0000-2.0000

2.0000-1.0000

 

c=

-3.0000-4.0000

4.00005.0000

d=

-1.00002.0000

-2.00003.0000

结论:

’/’表示矩阵右除,’\’表示矩阵左除,inv(A)表示求A的逆矩阵,由实验结果可知,矩阵左除与右除结果不一样,矩阵左乘与右乘结果也不一样,A\B是求AX=B的解,A/B是求XB=A的解。

所以编程求解的时候要注意区分他们的区别。

7、roots(p)

>>symsx;

>>a=3*x.^3+2*x+5;

>>p=[3,0,2,5]

>>roots(p)

p=

3025

ans=

0.5000+1.1902i

0.5000-1.1902i

-1.0000

结论:

roots(p)函数用于求多项式的根,以向量形式输入多项式的系数,对应降幂排列,然后调用函数,即可求得对应多项式的根。

8、poly

>>A=[1,2;3,4];

>>poly(A)

ans=

1.0000-5.0000-2.0000

结论:

poly(A)用于求矩阵A的特征多项式的系数

9.conv、deconv

>>A=[1,2];

>>B=[3,4];

>>a=conv(A,B)

b=deconv(A,B)

a=

3108

 

b=

0.3333

结论:

使用conv函数对多项式进行乘法运算,其使用格式为c=conv(a,b),其中a和b为两个多项式的系数向量,c为相乘所生成的多项式的系数向量。

使用deconv(a,b)完成除法运算。

10.A*B与A.*B的区别

>>A=[1,2];

>>B=[5,6]';

>>a=A*B

A=[1,2];

B=[5,6];

b=A.*B

a=

17

 

b=

512

结论:

A.*B称为“点乘”、“位乘“,即为两个行列数相同的矩阵,对应位置一一相乘,得到的结果依位置对应到结果矩阵中,而A*B为矩阵乘法,要求前者A的列数与后者B行数对应。

11.who与whos的使用

>>A=[1,2;3,4];

>>who

whos

Yourvariablesare:

A

NameSizeBytesClassAttributes

A2x232double

结论:

who给出变量的名称清单;而whos给出所有变量的详细信息。

12.disp、size(a)、length(a)的使用

>>a='helloworld';

>>disp(a)

a=[1,2,3,4];

B=size(a)

C=length(a)

helloworld

B=

14

 

C=

4

结论:

disp函数的作用是直接将内容输出在Matlab命令窗口中,size(a)表示矩阵每个维度的长度,length(a)表示矩阵a的最大的长度。

实验二MATLAB绘图命令

基本命令训练

1.plot2.loglog3.semilogx4.semilogy

5.polar6.title7.xlabel8.ylabel

9.text10.grid11.bar12.stairs

13.contour

1.>>t=[0:

pi/360:

2*pi*22/3];

x=93*cos(t)+36*cos(t*4.15);

y=93*sin(t)+36*sin(t*4.15);

plot(y,x),grid;

实验结果为:

>>t=[0:

pi/360:

2*pi*22/3];

x=93*cos(t)+36*cos(t*4.15);

y=93*sin(t)+36*sin(t*4.15);

plot(y,x)

实验结果为:

实验结论:

plot()用于绘制二维曲线,grid用于切换有无网格的状态。

2.t=0:

0.05:

100;

x=t;y=2*t;z=sin(2*t);

plot3(x,y,z,'b:

')

实验结果为:

实验结论:

plot3(x,y,z)用于绘制三维曲线,b表示设置曲线的颜色为蓝色,:

表示曲线线型为点线,格式为plot3(函数参数,函数参数,’曲线参数设置’)

3.t=0:

pi/20:

2*pi;

y=sin(x);

stairs(x,y)

实验结果为:

实验结论:

stairs(x,y)表示绘制出的二维曲线为阶梯图。

4.th=[pi/200:

pi/200:

2*pi]';

r=cos(2*th);

polar(th,r),grid

实验结果为:

实验结论:

polar()用于绘制二维曲线的极坐标图。

5.th=[0:

pi/10:

2*pi];

x=exp(j*th);

plot(real(x),imag(x),'r*');

grid;

实验结果为:

实验结论:

r表示设置曲线颜色为红色,*表示曲线的数据点形为星号。

6、>>x=0:

1000;

>>y=0:

1000;

>>loglog(x,y);

title('Loglog');gridon;

实验结果为:

实验结论:

loglog()用于绘制横纵轴均为对数刻度的图形,title()用于为图形添加标题,本例为添加Loglog作为标题。

7、>>x=0:

1000;

>>y=0:

1000;

>>semilogx(x,y);

title('Loglog');

gridon;

实验结果为:

将semilogx换成semilogy程序如下:

>>x=0:

1000;

>>y=0:

1000;

>>semilogy(x,y);

title('Loglog');

gridon;

实验结果为:

实验结论:

semilogx()用于绘制半对数图,其中x轴坐标为对数,若换成semilogy则表示y轴坐标为对数。

8、>>x=0:

1000;

>>y=0:

1000;

>>plot(x,y);

>>x=0:

1000;

>>y=0:

1000;

>>plot(x,y);

gridon;

xlabel('\fontsize{20}\itx\rm');

ylabel('\fontsize{20}y');

text(500,500,'中点')

实验结果为:

实验结论:

xlabel和ylabel分别表示给x轴和y轴添加标注,text(x,y,’string’)用于给图形坐标(x,y)处书写注释,本程序给x轴和y轴分别标注x,y,,在(500,500)坐标处注释“中点”。

9、>>t=0:

pi/100:

2*pi;

>>alpha=3;

>>y=sin(alpha*t);

>>bar(t,y);

gridon;

实验结果为:

实验结论:

bar(x,y)用于绘制二维条形图。

10、>>x=-8:

0.5:

8;

>>y=-8:

0.5:

8;

>>[xx,yy]=meshgrid(x,y);

>>c=sqrt(xx.^2+yy.^2)+eps;

>>z=sin(c)./c;

>>contour(xx,yy,z)

实验结果为:

实验结论:

contour(x,y,z)用于绘制等高线。

补充实验:

多窗口绘制图形subplot()

>>subplot(2,2,1);

t=[0:

pi/200:

2*pi];

y=sin(t);

plot(t,y);

subplot(2,2,2);

t=[0:

pi/200:

2*pi];

y=cos(t);

plot(t,y);

subplot(2,2,4);

t=[0:

pi/200:

2*pi];

y=t;

plot(t,y);

实验结果为:

实验结论:

本实验测试subplot()函数,由实验结果可知,subplot()函数中某一个未编写并不会影响整个函数的运行,只是未编写的那个部分不显示,其他的照常显示,比如编写了subplot(2,2,1),subplot(2,2,2),subplot(2,2,4),但是未编写subplot(2,2,3),那么结果只显示subplot(2,2,1),subplot(2,2,2),subplot(2,2,4)中的结果,而且顺序按原位置,而subplot(2,2,3)的不会显示。

实验三MATLAB程序设计

1.计算1~1000之内的斐波那契亚数列

>>f=[1,1];

>>i=1;

>>whilef(i)+f(i+1)<1000

f(i+2)=f(i)+f(i+1);

i=i+1;

end

>>f,i

f=

Columns1through10

11235813213455

Columns11through16

89144233377610987

i=

15

2.>>m=3;

>>n=4;

>>fori=1:

m

forj=1:

n

a(i,j)=1/(i+j-1);

end

end

>>formatrat

>>a

a=

11/21/31/4

1/21/31/41/5

1/31/41/51/6

3.>>m=3;

n=4;

fori=1:

m

forj=1:

n

a(i,j)=1/(i+j-1);

end

end

a

a=

10.50.333330.25

0.50.333330.250.2

0.333330.250.20.16667

实验2用了formatrat,结果为分数表示,实验3没有则用小数表示。

4、>>x=input('请输入x的值:

');

ifx<=10;

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

elseifx>15

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

elsey=x;

end

y

请输入x的值:

10

y=

10.054

>>x=input('请输入x的值:

');

ifx<=10;

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

elseifx>15

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

elsey=x;

end

y

请输入x的值:

11

y=

11

5、去掉多项式或数列开头的零项

.>>p=[0001302009];

fori=1:

length(p),ifp

(1)==0,p=p(2:

length(p));

end;

end;

p

p=

1302009

6、建立MATLAB的函数文件,程序代码如下,以文件名ex2_4.m存盘

点击File-New-Function建立文件,文件名为ex2_4.m,结果如下:

在MATLAB的命令窗口输入ex2_4(200),得到运行结果:

>>ex2_4(200)

ans=

1123581321345589144

在MATLAB的命令窗口输入lookforffibno,得到结果:

>>lookforffibno

ex2_4-ffibno计算斐波那契亚数列的函数文件

在MATLAB的命令窗口输入helpex2_4,得到结果:

>>helpex2_4

ffibno计算斐波那契亚数列的函数文件

n可取任意自然数

程序如下

3、程序设计题

functionsushu

n=input('请输入一个数n:

');

if(n==1)

fprintf('1既不是素数也不是合数\n');

disp('是否继续?

');

disp('1.是;2.否');

b=input('');

ifb==1

sushu;

else

disp('谢谢使用!

');

break;

end

end

if(n==2)

fprintf('2是素数\n');

disp('是否继续?

');

disp('1.是;2.否');

b=input('');

ifb==1

sushu;

else

disp('谢谢使用!

');

break;

end

end

if(n==3)

fprintf('3是素数\n');

disp('是否继续?

');

disp('1.是;2.否');

b=input('');

ifb==1

sushu;

else

disp('谢谢使用!

');

break;

end

end

if(n>3)

fori=2:

(n-1)

ifmod(n,i)==0

a=n/i;

t=0;

fprintf('%d=%d*%d\n',n,a,i);

elset=1;

end

end

if(t==1)

cleart;

fprintf('%d不是素数\n',n);

else

fprintf('%d是素数\n',n);

cleart;

end

disp('是否继续?

');

disp('1.是;2.否');

b=input('');

ifb==1

sushu;

else

disp('谢谢使用!

');

end

end

 

运行结果为:

>>sushu

请输入一个数n:

1

1既不是素数也不是合数

是否继续?

1.是;2.否

1

请输入一个数n:

2

2是素数

是否继续?

1.是;2.否

1

请输入一个数n:

38

38=19*2

38=2*19

38不是素数

是否继续?

1.是;2.否

1

请输入一个数n:

23

23不是素数

是否继续?

1.是;2.否

2

谢谢使用!

实验四MATLAB的符号计算与SIMULINK的使用

程序举例

1.求矩阵对应的行列式和特征根

>>a=sym('[1001]');

>>da=det(a)

ea=eig(a)

da=

1

ea=

1

实验结论:

det()函数用于计算矩阵对于的行列式的值,eig()函数用于计算矩阵的特征值和特征向量

2.求方程的解(包括精确解和一定精度的解)

>>r1=solve('x^2-x-1')

rv=vpa(r1)

rv4=vpa(r1,4)

rv20=vpa(r1,20)

r1=

1/2-5^(1/2)/2

5^(1/2)/2+1/2

rv=

rv4=

-0.618

1.618

rv20=

实验结论:

vpa(s,n)称为变精度算法函数,表示将s表示为n位有效数的符号对象

3、>>a=sym('a');b=sym('b');c=sym('c');d=sym('d');%定义4个符号变量

w=10;x=5;y=-8;z=11;%定义4个数值变量

A=[a,b;c,d]%建立符号矩阵A

B=[w,x;y,z]%建立数值矩阵B

det(A)%计算符号矩阵A的行列式

det(B)%计算数值矩阵B的行列式

A=

[a,b]

[c,d]

B=

105

-811

ans=

a*d-b*c

ans=

150

4、>>symsxy;

s=(-7*x^2-8*y^2)*(-x^2+3*y^2);

expand(s)%对s展开

collect(s,x)%对s按变量x合并同类项(无同类项)

factor(ans)%对ans分解因式

ans=

7*x^4-13*x^2*y^2-24*y^4

ans=

7*x^4+(-13*y^2)*x^2-24*y^4

ans=

(7*x^2+8*y^2)*(x^2-3*y^2)

实验结论:

expand函数用于多项式的展开运算,collect函数用于符号表达式的展开运算和合并同类项,factor用于对函数进行因式分解。

5、对方程AX=b求解

>>A=[34,8,4;3,34,3;3,6,8];

b=[4;6;2];

X=linsolve(A,b)%调用linsolve函数求解

A\b%用另一种方法求解

X=

0.067482

0.16137

0.10367

ans=

0.067482

0.16137

0.10367

实验结论:

运用linsove(A,b)与A\b结果一样,都用于对AX=b进行求解

6、对方程组求解

>>a11*x1+a12*x2+a13*x3=b1

a21*x1+a22*x2+a23*x3=b2

a31*x1+a32*x2+a33*x3=b3

A=[a11,a12,a13;a21,a22,a23;a31,a32,a33];

b=[b1;b2;b3];

XX=A\b

XX=

(a12*a23*b3-a12*b2*a33+a13*a32*b2-a13*a22*b3+b1*a22*a33-b1*a32*a23)/(a11*a22*a33-a11*a32*a23-a21*a12*a33+a32*a21*a13-a22*a31*a13+a31*a12*a23)-(a11*a23*b3-a11*b2*a33-a21*a13*b3-a23*a31*b1+b2*a31*a13+a21*b1*a33)/(a11*a22*a33-a11*a32*a23-a21*a12*a33+a32*a21*a13-a22*a31*a13+a31*a12*a23)(a32*a21*b1-a11*a32*b2+a11*a22*b3-a22*a31*b1-a21*a12*b3+a31*a12*b2)/(a11*a22*a33-a11*a32*a23-a21*a12*a33+a32*a21*a13-a22*a31*a13+a31*a12*a23)

7、>>symsabtxyz;

f=sqrt(1+exp(x));

diff(f)%未指定求导变量和阶数,按缺省规则处理

f=x*cos(x);

diff(f,x,2)%求f对x的二阶导数

diff(f,x,3)%求f对x的三阶导数

f1=a*cos(t);f2=b*sin(t);

diff(f2)/diff(f1)%按参数方程求导公式求y对x的导数

ans=

exp(x)/(2*(exp(x)+1)^(1/2))

ans=

-2*sin(x)-x*cos(x)

ans=

x*sin(x)-3*cos(x)

ans=

-(b*cos(t))/(a*sin(t))

3、SIMULINK的使用

选择合适子模块构造控制系统如下:

选择Simulation菜单下的start命令运行仿真,在示波器(Scope)中观察结果:

R(s)为阶跃输入,C(s)为输出

实验结果为:

 

实验五MATLAB在控制系统分析中的应用

基本命令

1.step2.impulse3.initial4.lsim5.rlocfind

6.bode7.margin8.nyquist9.Nichols10.cloop

1、求下面系统的单位阶跃响应

>

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1