《计算机仿真技术》讲稿Word文档下载推荐.docx
《《计算机仿真技术》讲稿Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《《计算机仿真技术》讲稿Word文档下载推荐.docx(49页珍藏版)》请在冰豆网上搜索。
![《计算机仿真技术》讲稿Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/26/1a53b78c-e676-408a-ae92-a1ae841334df/1a53b78c-e676-408a-ae92-a1ae841334df1.gif)
表达式的值。
解:
18+(5*sin(pi/6))/(2+cos(pi/6))
18.8723
【例1.3.2-3】简单矩阵
的输入步骤。
(1)在键盘上输入下列内容
A=[1,2,3;
4,5,6;
7,8,9]
(2)按【Enter】键,指令被执行。
(3)在指令执行后,MATLAB指令窗中将显示以下结果:
A=
123
456
789
其中>
为MATLAB的提示符,矩阵内容由方括号表示,方括号里边的分号表示矩阵的换行,逗号或空格表示同一行矩阵元素间的分隔。
矩阵的代数运算:
矩阵转置的表示A’;
矩阵加减法C=A+B,C=A-B;
矩阵乘法C=A*B;
矩阵除法:
C=B/A。
矩阵逻辑运算和比较运算。
【例1.3.2-4】矩阵的分行输入。
A=[1,2,3
4,5,6
【例1.3.2-5】指令的续行输入
S=1-1/2+1/3-1/4+...
1/5-1/6+1/7-1/8
S=
0.6345
三、数值、变量和表达式
MATLAB语言的常量
常量名
常量值
i
虚数单位
pi
圆周率π
j
虚数单位
inf
无穷大∞
MATLAB语言中的标点
运算符
名称
说明
:
冒号
有多种运算功能,可用于定义行向量、截取指定矩阵中的部分
=
等号
用于赋值
;
分号
不显示中间结果在命令窗口、区分矩阵行等
·
小数点
域访问等
%
百分号
用于注释语句
…
续行符号
续行
,
逗号
用于分隔矩阵列、函数参数分隔符等
'
单引号
字符串的标志符,或表示矩阵的转置运算及复数的共轭值等
[]
方括号
用于创建和表示矩阵
()
圆括号
用于函数调用和指定的运算顺序
{}
大括号
用于构成单元数组等
【例1.3.3-1】复数
表达,及计算
。
z1=3+4i;
z2=1+2*i;
z3=2*exp(i*pi/6);
z=z1*z2/z3
z=
0.3349+5.5801i
*MATLAB通常用十进制数来表示一个数,亦可用科学记数法来表示一个数。
另外,MATLAB语言还提供了复数的表达和运算功能。
复数可用下列语句产生:
c=a+i*b(或c=a+j*b)%将实部为a虚部为b的复数赋值给复变量c。
c=a*exp(i*b)(或c=a*exp(j*b))%将模为a幅角为b的复数赋值给复变量c。
MATLAB语言也提供了丰富的复数操作函数,其中包括real、imag、abs、angle等。
例:
z=2*exp(i*pi/3)
1.0000+1.7321i
real(z)%求复数z的实部
1.0000
imag(z)%求复数z的虚部
1.7321
abs(z)
2
angle(z)%函数angle表示以弧度来计算复数和相角
1.0472
【例1.3.3-2】求多项式
的根并计算
的全部方根。
(1)在MATLAB命令窗口中输入:
p=[3023];
rootp=roots(p)
rootp=
0.3911+1.0609i
0.3911-1.0609i
-0.7822
(2)先构造一个多项式
在MATLAB命令窗口中输入:
p=[1008];
R=roots(p)
R=
-2.0000
1.0000-1.7321i
1.M文件
M文件有两种形式:
脚本文件(ScriptFile)和函数文件(FunctionFile)。
这两种文件的扩展名均为“.m”。
(1)脚本文件
通过下面例子来了解脚本文件。
【例1.3.3-3】编写一个M文件绘制函数
在区间[-6,6]中的图形。
在MATLAB命令行下输入edit命令以打开M文件编辑器,输入以下程序:
x=-6:
0.1:
6;
leng=length(x);
form=1:
leng
ifx(m)<
=0
y(m)=sin(x(m));
elseifx(m)<
=3
y(m)=x(m);
else
y(m)=-x(m)+6;
end
end
plot(x,y,'
*'
),grid
将其存盘为file.m文件(该文件就是一个脚本文件),然后在MATLAB命令行下输入:
file
则生成如下图所示的函数曲线。
(2)函数文件
【例1.3.3-4】编写一个通用的M函数求取例例1.3.3-3中函数任意点的值,并绘制在[-6,6]中的图形。
(1)编写函数demofun并存储在同名M文件demofun.m中。
functiony=demofun(x)
(2)在命令行下输入下列命令:
x=-6:
y=demofun(x);
+'
也可得相同的图形。
四计算结果的图形表示
1、二维图形绘制基本语句
plot(t,y)
例2-21:
x=[-pi:
0.05:
pi];
y=sin(tan(x))-tan(sin(x));
%求函数值
plot(x,y)
在[0,2π]之间绘制正弦曲线(30个点)。
x=linspace(0,2*pi,30);
y=sin(x);
plot(x,y)
【例1.3.4-1】画出衰减振荡曲线
及其它的包络线
的取值范围是
(图1.3-3)
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,'
)
grid
注:
冒号表达式是MATLAB中很有用的表达式,如
其中,s1为向量起始值,s2为步距,s3为最大值。
若没有s2,则默认值1。
*多重线的另一种画法是利用hold命令。
在已经画好的图形上,若设置holdon,MATLAB将把新的plot命令产生的图形画在原来的图形上。
而holdoff命令将结束这个过程。
例如:
x=linspace(0,2*pi,30);
holdon
z=cos(x);
plot(x,z)
holdoff
网格和标记:
y=sin(x);
z=cos(x);
plot(x,y,x,z);
grid
title('
sinxandcosx'
xlabel('
x'
ylabel('
y=sin(x)z=cos(x)'
)
(1)>
v2=0:
0.2:
pi%最终值为3而不是π
v2=
00.20000.40000.60000.80001.00001.20001.4000
1.60001.80002.00002.20002.40002.60002.80003.0000
(2)>
pi%默认步距为1
0123
其他二维图形绘制语句
绘制极坐标曲线
0.01:
r=sin(8*t/3)./(2-cos(3*t/2).^2);
polar(t,r);
axis('
square'
)%绘制极坐标并调整坐标系
6*pi;
比较上面两条曲线可知,应增大θ的取值范围,才能得到完整的极坐标曲线。
2、三维曲线绘制
格式:
plot3(x,y,z)
Plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xm,ym,zm,选项m)
其中“选项”和二维曲线绘制的完全一致。
另外:
stem3()可以绘制三维火柴杆型曲线,fill3()可以绘制三维的填充图形,bar3()可以绘制三维的直方图等。
试绘制参数方程
的三维曲线。
.1:
2*pi;
%构造t向量,注意下面的点运算
x=t.^3.*sin(3*t).*exp(-t);
y=t.^3.*cos(3*t).*exp(-t);
z=t.^2;
plot3(x,y,z),grid%三维曲线绘制
stem3(x,y,z),holdon
【例1.3.4-2】画出
所表示的三维曲面(图1.3-4)。
x=-8:
0.5:
8;
y=x'
;
X=ones(size(y))*x;
Y=y*ones(size(x));
R=sqrt(X.^2+Y.^2)+eps;
%<
5>
Z=sin(R)./R;
6>
surf(X,Y,Z);
colormap(cool)
xlabel('
),ylabel('
y'
),zlabel('
z'
第二章MATLAB语言程序设计基础
优点:
①简洁高效性
②科学运算功能
③绘图功能
④庞大的工具箱与模块集
⑤强大的动态系统仿真功能
2.1MATLAB程序设计语言基础
⏹MATLAB语言的变量名规则
⏹由一个字母引导,后面可以为其他字符
⏹区分大小写AbcABc
⏹有效MYvar12,MY_Var12和MyVar12_
⏹错误的变量名12MyVar,_MyVar12
⏹MATLAB的保留常量
⏹eps,i,j,i=sqrt(-1),pi,NaN,Inf
⏹lastwarn,lasterr
2.2解析结果的化简与变换
%从各种方法中自动选择最简格式
%化简并返回实际采用的化简方法
其他常用的化简函数:
numden(),sincos(),collect(),expand(),factor().
例2-6化简P=(s+3)^2*(s^2+3*s+2)*(s^3+12*s^2+48*s+64)
symss;
P;
P=(s+3)^2*(s^2+3*s+2)*(s^3+12*s^2+48*s+64)
simple(P)%经过一系列化简尝试,得出计算机认为最简形式
(s+3)^2*(s+2)*(s+1)*(s+4)^3
[a,m]=simple(P)%反回化简方法为因式分解方法
a=
m=
factor
expand(P)%多项式展开方法
ans=
s^7+21*s^6+185*s^5+883*s^4+2454*s^3+3944*s^2+3360*s+1152
变量替换函数subs(),其格式为
%单个变量替换
%多个变量替换
其中,f为原表达式。
将其中的
替换成
,生成新的表达式f1。
例2-7:
由表达式
替换例2-6中的s算子。
symszs;
P=(s+3)^2*(s^2+3*s+2)*(s^3+12*s^2+48*s+64);
P1=subs(P,s,(z+1)/(z-1));
%变量替换
simple(P1)%化简
8*(2*z-1)^2*z*(3*z-1)*(5*z-3)^3/(z-1)^7
2.3MATLAB语言流程控制
2.3.1循环结构
1.for语句的一般结构
fori=v,循环结构体,end
或
for循环控制变量=循环次数设定%初始值:
步长:
终值
循环体
注意:
for循环可以嵌套使用。
2.while循环的基本结构
while(条件式),循环结构体,end
【例2-11】用循环结构求解
s=0;
fori=1:
100
s=s+i
或
i=1;
while(i<
=100)
s=s+i;
i=i+1;
end,[s]
5050
sum(1:
100)%借助MATLAB的sum函数对整个向量进行直接操作。
例2-12求解级数求和问题
tic,s=0;
100000
s=s+1/2^i+1/3^i;
end;
toc
elapsed_time=
22.9380
tic;
i=1:
100000;
s=sum(1./2.^i+1./3.^i);
52.4060
例2-13求满足
的最小m值。
m=0;
while(s<
=10000)
m=m+1;
s=s+m
end,[s,m]
10011141
2.3.2条件结构
2-14例2-13中的问题可以用for循环和if语句的相结合求解
s=0;
fori=1:
10000
s=s+1;
ifs>
1000,break,end
end,[s]
可见,这样的结构较烦琐,不如直接使用while结构直观、方便。
2.4函数编写与调试
⏹M-函数是MATLAB编程的主流方法
⏹除了M-函数外,还可以采用M-script文件
⏹M-script适合于小规模运算
【例2-15】若最大值不为10000,需修改程序
对m和10000值的设置,不适合于M-script
……
2.4.2可变输入输出个数
【例2-20】conv()可以计算两个多项式的积用varargin实现任意多个多项式的积
P=[12405];
Q=[12];
F=[123];
D=conv(conv(P,Q),F)%采用conv()函数,则需要嵌套调用
D=
16193645443530
第三章控制系统数学模型及其转换
一、用MATLAB求拉氏变换与反变换
1、用MATLAB计算拉氏变换
例1:
求函数f(t)为:
(1)1(t);
(2)At;
(3)t2;
(4)Aeαt的Laplace(拉氏)变换F(S)。
在命令窗口输入
symsstAalpha;
%syms符号函数指令
F=laplace(1,s)
F=laplace(A*t)
F=laplace(t^2)
F=laplace(A*exp(alpha*t))
执行结果为:
F=1/s
F=A/s^2
F=2/s^3
F=A/(s-alpha)
例2求函数f(t)为:
(1)cos(ωt);
(2)eαtsin(ωt);
(3)δ(t);
(4)A.t2+B.t3的Laplace(拉氏)变换F(S)。
在命令窗口输入:
symsstalphaomegaAB;
F=laplace(cos(omega*t))
F=laplace(exp(alpha*t)*sin(omega*t))
F=laplace('
Dirac(t)'
t,s)
F=laplace(A*t^2+B*t^3)
执行结果为:
F=s/(s^2+omega^2)
F=omega/((s-alpha)^2+omega^2)
F=1
F=2*A/s^3+6*B/s^4
在MATLAB中,单位脉冲函数δ(t)规定写成Dirac(t),而且第一个字母必须为大写;
单位阶跃函数写成Heaviside(t);
2利用留数将象函数表达式展开成部分分式
留数的概念在高等数学中学过,我们这里只讲留数部分分式展开
(1)若阶多项式A(S)不含重根,则以下展开称为部分分式展开
式中:
P1,P2,…Pn为极点;
部分分式的分子R1,R2,…Rn为留数;
k(s)为直接项。
(2)若阶多项式A(S)含m重根,那么相应部分则写为:
在高等数学中,留数R1,R2,…Rn通常用待定系数法来计算。
(3)计算留数MATLAB的函数命令
[RPK]=residue(B,A)
其中B与A是分子多项式B(S)分母多项式A(S)以降幂排列的多顶式系数项量。
具体应用见下面例子。
例3将象函数表达式展开成部分分式。
B=[12];
A=[143];
R=0.5000
0.5000
P=-3
-1
K=[]
即:
例4将象函数表达式展开成部分分式。
a=expand(s*(s+1)^2*(s+3))
a=s^4+5*s^3+7*s^2+3*s
A=[15730];
R=0.0833
-0.7500
-0.5000
0.6667
P=-3.0000
-1.0000
0
K=[]
3、用Laplace反变化求原函数
例5求象函数F(S)=1与,的原函数f(t)=L-1[F(S)]。
(1)在命令窗口输入
symsst;
f=ilaplace(1,t)
f=Dirac(t)
(2)解:
symssta
f=ilaplace(1/(s*(s+a)))
f=1/a*(1-exp(-a*t))
例6求象函数
的原函数f(t)=L-1[F(S)]。
(1)解:
F=s/((s+1)^2*(s+2));
f=ilaplace(F);
f=collect(f,exp(-t))%将f的函数归类简化
f=(-t+2)*exp(-t)-2*exp(-2*t)
(2)在命令窗口输入
F=(2*s+2)/(s^2+4*s+5);
f=ilaplace(F)
先得到结果再简化:
f=2*exp(-2*t)*cos(t)-2*exp(-2*t)*sin(t)
f=collect(f,exp(-2*t))
f=(2*cos(t)-2*sin(t))*exp(-2*t)
(3)解:
F=1/(s^3+21*s^2+120*s+100);
f=collect(f,exp(t)^10)
f=(-1/81-1/9*t)*exp(-10*t)+1/81*exp(-t)
二.连续系统的数学模型
1系统传递函数形式模型
传递函数分子、分母多项式系数向量可以分别定义如下:
用printsys,tf来建立传递函数的系统模型,其基本格式为
(注:
printsys只能在命令窗口中显示模型,不能将模型输入到workspace中)
已知系统的传递函数如下,利用MATLAB建立其相应的传递函数系统模型。
num=5*[203];
den=conv(conv(conv([100],[31]),conv([12],[12])),[5038]);
printsys(num,den,'
s'
运行结果:
num/den=
10s^2+15
--------------------------------------------------------------
15s^8+65s^7+89s^6+83s^5+152s^4+140s^3+32s^2
tf(num,den)
Transferfunction:
------------------------------------------------