《计算机仿真技术》讲稿.docx
- 文档编号:8432532
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:49
- 大小:747.46KB
《计算机仿真技术》讲稿.docx
《《计算机仿真技术》讲稿.docx》由会员分享,可在线阅读,更多相关《《计算机仿真技术》讲稿.docx(49页珍藏版)》请在冰豆网上搜索。
《计算机仿真技术》讲稿
计算机数学语言概述
⏹其他数学分支
积分变换、复变函数、偏微分方程、数据插值与拟合、概率论与数理统计、数值分析
⏹其他相关课程
电路、电子技术、电力电子技术、电机与拖动、自动控制原理
第一章基础准备及入门
MATLAB语言的优势
⏹编程简单,类似于其他语言,如C
⏹集成度更高,扩展性更好
⏹数学问题数值解能力强大
⏹由Maple内核构成的符号运算工具箱可以继承Maple所有解析解的求解能力
⏹在数学、工程领域各种“工具箱”
⏹强大的系统仿真能力,Simulink建模
⏹在控制界是国际首选的计算机语言
本章有两个目的:
一是讲述MATLAB正常运行所必须具备的基础条件;二是简明系统地介绍高度集成的Desktop操作桌面的功能和使用方法。
一、操作桌面的缺省外貌
MATLAB命令窗口
(1)命令窗口的菜单栏
菜单栏共包含File、Edit、Window和Help四项。
File菜单项:
New命令:
用于建立M文件、图形窗口。
Open命令:
打开一个已经建立的M文件。
(2)MATLAB工作空间的常用操作指令
命令
功能
workspace
打开工作空间浏览器界面
clc
擦除命令窗口的显示内容,但不清除工作空间
clf
擦除当前图形窗口中的图形
exit
关闭(退出)MATLAB
pack
整理MATLAB内存碎块
dir
列出当前目录及该目录下的文件和子目录清单
clear或clearabc
清除MATLAB工作空间中所有的变量或指定的变量
二、通用操作界面
CommandWindow运行入门
CommandWindow指令窗简介
1.最简单的计算器使用法
【例1.3.2-1】求
的算术运算结果。
(1)用键盘在MATLAB指令窗中输入以下内容
>>(12+2*(7-4))/3^2
(2)在上述表达式输入完成后,按【Enter】键,该就指令被执行。
(3)在指令执行后,MATLAB指令窗中将显示以下结果。
ans=
2
[例1.3.2.2]计算
表达式的值。
解:
>>18+(5*sin(pi/6))/(2+cos(pi/6))
ans=
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
7,8,9]
A=
123
456
789
【例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)
z=
1.0000+1.7321i
>>real(z)%求复数z的实部
ans=
1.0000
>>imag(z)%求复数z的虚部
ans=
1.7321
>>abs(z)
ans=
2
>>angle(z)%函数angle表示以弧度来计算复数和相角
ans=
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.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)
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
(2)在命令行下输入下列命令:
>>x=-6:
0.1:
6;
y=demofun(x);
plot(x,y,'+'),grid
也可得相同的图形。
四计算结果的图形表示
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,':
b')
>>grid
注:
冒号表达式是MATLAB中很有用的表达式,如
其中,s1为向量起始值,s2为步距,s3为最大值。
若没有s2,则默认值1。
*多重线的另一种画法是利用hold命令。
在已经画好的图形上,若设置holdon,MATLAB将把新的plot命令产生的图形画在原来的图形上。
而holdoff命令将结束这个过程。
例如:
x=linspace(0,2*pi,30);
>>y=sin(x);
>>plot(x,y)
>>holdon
>>z=cos(x);
>>plot(x,z)
>>holdoff
网格和标记:
例如:
x=linspace(0,2*pi,30);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)>>v2=0:
pi%默认步距为1
v2=
0123
其他二维图形绘制语句
例:
绘制极坐标曲线
,
解:
>>t=0:
0.01:
4*pi;
r=sin(8*t/3)./(2-cos(3*t/2).^2);
polar(t,r);
axis('square')%绘制极坐标并调整坐标系
>>t=0:
0.01:
6*pi;
r=sin(8*t/3)./(2-cos(3*t/2).^2);
polar(t,r);
axis('square')%绘制极坐标并调整坐标系
比较上面两条曲线可知,应增大θ的取值范围,才能得到完整的极坐标曲线。
2、三维曲线绘制
格式:
plot3(x,y,z)
Plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…,xm,ym,zm,选项m)
其中“选项”和二维曲线绘制的完全一致。
另外:
stem3()可以绘制三维火柴杆型曲线,fill3()可以绘制三维的填充图形,bar3()可以绘制三维的直方图等。
例:
试绘制参数方程
,
,
的三维曲线。
解:
>>t=0:
.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('x'),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)%经过一系列化简尝试,得出计算机认为最简形式
ans=
(s+3)^2*(s+2)*(s+1)*(s+4)^3
>>[a,m]=simple(P)%反回化简方法为因式分解方法
a=
(s+3)^2*(s+2)*(s+1)*(s+4)^3
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)%化简
ans=
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循环控制变量=循环次数设定%初始值:
步长:
终值
循环体
end
注意:
for循环可以嵌套使用。
2.while循环的基本结构
while(条件式),循环结构体,end
【例2-11】用循环结构求解
。
解:
>>s=0;
>>fori=1:
100
s=s+i
end
或
>>s=0;i=1;
while(i<=100)
s=s+i;i=i+1;
end,[s]
ans=
5050
或
>>sum(1:
100)%借助MATLAB的sum函数对整个向量进行直接操作。
ans=
5050
例2-12求解级数求和问题
。
解:
>>tic,s=0;
>>fori=1:
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);
>>toc
elapsed_time=
52.4060
例2-13求满足
的最小m值。
解:
>>s=0;m=0;
>>while(s<=10000)
m=m+1;s=s+m
end,[s,m]
ans=
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];[RPK]=residue(B,A)
执行结果为:
R=0.5000
0.5000
P=-3
-1
K=[]
即:
例4将象函数表达式展开成部分分式。
解:
在命令窗口输入
>>symss;a=expand(s*(s+1)^2*(s+3))
执行结果为:
a=s^4+5*s^3+7*s^2+3*s
>>B=[12];
A=[15730];
[RPK]=residue(B,A)
R=0.0833
-0.7500
-0.5000
0.6667
P=-3.0000
-1.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)解:
在命令窗口输入
>>symsst;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)在命令窗口输入
>>symsst;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)解:
在命令窗口输入
>>symsst;F=1/(s^3+21*s^2+120*s+100);f=ilaplace(F);
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:
10s^2+15
------------------------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机仿真技术 计算机仿真 技术 讲稿
![提示](https://static.bdocx.com/images/bang_tan.gif)