仿真复习资料

更新时间:2024-06-27 09:58:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

仿真复习资料

一,基本矩阵和函数的操作 1.已知x=[2 4 6] ,y=[1 3 5]

1) a= x+y a=3 7 11 加法

2) b= x*y’ b=44 y’ 表示矩阵的转置 3) c= x.*y c= 2 12 30 直接相乘

4) d= x.^y d=2 64 7776 前者为底数后者为指数

5) e=conv(x,y) e=2 10 28 38 30 代数式相乘(conv只能用于两

个相乘,多了就要嵌套)

6) f= poly(x) f=1 -12 44 -48 (x-2)(x-2(x-6)的系数 7) g= roots(f) g=2.000 ;4.000;6.000 求根 8) h= polyval(x,3) h=36 赋值 9) m=polyder(x) m=4 4 求导

10) x(5)=7 x=2 4 6 0 7 第五项赋值为5,第四项自动为0

2.已知x=[2 4 6] ,y=[1 3 5] 多项式拟合。 >> x=[2 4 6];y=[1 3 5];

>> p=polyfit(x,y,3) 3表示拟合的阶数 p =-0.0208 0.2500 0.0833 0

3,常用的函数

Sin(),cos(),tin(),cot(),esp(x)=ex,sqrt(x)=x,a^b=ab,abs(x)=|x| asin(x)=arcsin(x),atant(),acos() round(x):四舍五入至最近整数

log(x):以e为底的对数,log10(x)以10为底的对数 l og2(x):以2为底的对数,pow2(x):2的指数

1

例如:y?1?sin(x)表示为y=sqrt(1-sin(x));

二,基本的二维画图指令

plot(x,y)表示y对x的函数图象;

subplot(m,n,p)表示将一个窗口分成m*n,取第p个窗口; polar(x,y)表示在极坐标下y对x的函数图象; semlilogx(x,y)表示x轴对数坐标图; semlilogy(x,y)表示y轴对数坐标图;

loglog(x,y)表示x轴和y轴都为对数的坐标图; plot(x1,y1,x2,y2)表示在同一坐标系下划两个图; xlabel(' ')表示对x轴注解; ylabel(' ')表示对y轴注解; Title(' ')表示对当前图象的标题。 例如:

>> x=0:0.01:10; >> y=sqrt(1-sin(x)); >> subplot(221); >> plot(x,y);

>> title('正常坐标图'); >> subplot(222); >> polar(x,y); >> title('极坐标图'); >> subplot(223); >> semilogx(x,y);

>> title('x轴对数坐标图'); >> subplot(224); >> semilogy(x,y);

>> title('y轴对数坐标图'); 图象见试题

2

三,矩阵的赋值和运算

函数 zeros

格式 B = zeros(n) %生成n×n全零阵

B = zeros(m,n) %生成m×n全零阵 B = zeros([m n]) %生成m×n全零阵

B = zeros(size(A)) %生成与矩阵A相同大小的全零阵

函数 eye

格式 Y = eye(n) %生成n×n单位阵

Y = eye(m,n) %生成m×n单位阵

Y = eye(size(A)) %生成与矩阵A相同大小的单位阵

函数 ones

格式 Y = ones(n) %生成n×n全1阵

Y = ones(m,n) %生成m×n全1阵 Y = ones([m n]) %生成m×n全1阵

Y = ones(size(A)) %生成与矩阵A相同大小的全1阵

命令 正态分布随机矩阵 函数 randn

格式 Y = randn(n) %生成n×n正态分布随机矩阵

Y = randn(m,n) %生成m×n正态分布随机矩阵 Y = randn([m n]) %生成m×n正态分布随机矩阵

命令 产生线性等分向量 函数 linspace

格式 y = linspace(a,b) %在(a, b)上产生100个线性等分点

y = linspace(a,b,n) %在(a, b)上产生n个线性等分点

函数 logspace

a格式 y = logspace(a,b) 在( b )之间产生50个对数等分向量 , 10y = logspace(a,b,n) y = logspace(a,pi)

函数 deconv

格式 [q,r] = deconv(v,u) %多项式v除以多项式u,返回商多项式q和余多项式r。

矩阵的转置 a=a’

格式 d = det(X) %返回方阵X的多项式的值

函数 trace

格式 b=trace (A) %返回矩阵A的迹,即A的对角线元素之和。

3

格式 k = rank (A) %求矩阵A的秩

函数 diag

格式 X = diag(v,k) %以向量v的元素作为矩阵X的第k条对角线元素,

当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k<0时,v为下方第k条对角线。

X = diag(v) %以v为主对角线元素,其余元素为0构成X。 v = diag(X,k) %抽取X的第k条对角线元素构成向量v。k=0:抽取

主对角线元素;k>0:抽取上方第k条对角线元素;k<0抽取下方第k条对角线元素。

v = diag(X) %抽取主对角线元素构成向量v。

格式 B = rot90 (A) %将矩阵A逆时针方向旋转90°

格式 B = fliplr(A) %将矩阵A左右翻转

格式 B = flipud(A) %将矩阵A上下翻转

四,系统的一些基本操作

1,传递函数,状态空间,零极点增益的基本操作

注意在以下表示中用num表示传递函数的分子,den表示传递函数的分母;a,b,c,d为状态空间表示,z,p,k为零极点增益。

如(s+1)/(s+2),num=[1 1],den=[1 2],从右往左为常数项到最高次的系数。 系统的表示

tf(num,den)表示以num为分子以den为分母的传递函数; ss(a,b,c,d);zp(z,p,k);

不同表示之间的转化

[num,den]=ss2tf(a,b,c,d);将状态空间转化为传递函数; [z,p,k]=ss2zp(a,b,c,d);将状态空间转化为零极点增益; 以下类似[a,b,c,d]=zp2ss(z,p,k);[num,den]=zp2tf(z,p,k); [r,p,k] = residue(num,den) [num,den]= residue(r,p,k)

4

2.系统之间的连接

先定义两个系统g1和g2,g1=tf(num1,den1);g2=ft(num2,den2); 串联 [num,den]=series(g1,g2);或g=g1*g2; 并联 [num,den]=paralle(g1,g2); 反馈 [num,den]=feedback(g1,g2).

3,系统的仿真

先定义系统g=tf(num,den);或g=ss(a,b,c,d);或g=zp(z,p,k) 单位阶跃响应 step(g);step(num,den);step(a,b,c,d).

4,根轨迹

先定义系统g=tf(num,den);或g=ss(a,b,c,d);或g=zp(z,p,k) rlocus(g); rlocus(num,den); rlocus(a,b,c,d)

5,奈氏曲线

先定义系统g=tf(num,den);或g=ss(a,b,c,d);或g=zp(z,p,k) nyquist(g);nyquist(num,den); nyquist(a,b,c,d)

6,波特图

先定义系统g=tf(num,den);或g=ss(a,b,c,d);或g=zp(z,p,k) [m,p,w]=bode(g);或bode(num,den);

[mag,phase,wc,wg]=margin(g);或margin(num,den);

五,数值积分法仿真

一下程序中加粗加下划线的为需要变化的,其他的不变。

1,欧拉法

dy/dt=f(t,y) ,y(t0)=y0,y(k+1)=y(k)+hf(t(k),y(k)).

例题: 已知 dy/dt=2t,y(0)=0 ,试用欧拉法进行仿真 h=0.01;Tf=10;t=0;

y=0;m=Tf/h; 对y赋初值 for i=1:m

y(i+1)=y(i)+h*2*t(i); y(i+1)=y(i)+h*f(t(i),y(i)) t=[t,t(i)+h]; end

plot(t,y); grid

状态空间的欧拉仿真

a=[-14 9 10;12 -9 10;24 -24 -18]; b=[2.8 4 12]';c=[1 1 1]; 状态空间输入 x=[0 0 0]'; y=0;u=100;t=0; y,u初始化值 h=0.01;Tf=10; m=Tf/h; for i=1:m

x=x+h*(a*x+b*u);

5

t=[t,t(i)+h]; y=[y,c*x]; end

plot(t,y); grid

2,二阶龙格-库塔法仿真(还有一个例题见试卷,注意次仿真方法的表达式不唯一,注意看清题目)

y(k+1)=y(k)+h/2*(k1+k2),k1=f(t(k),y(k)),k2=f(t(k)+h,y(k)+hk1) 例题:a=[-14,9,10;12,-9,10;24,-24,-18]; b=[2.8;4;12]; c=[1,1,1]; x=[0;0;0];Tf=10; h=0.01; u=100;t=0;m=Tf/h; y=0; for i=1:m k1=a*x+b*u; k2=a*(x+h*k1)+b*u; x=x+h*(k1+k2)/2; y=[y,c*x]; t=[t,t(i)+h]; end

plot(t,y); Grid

3,四阶龙格-库塔法仿真

a=[-14,9,10;12,-9,10;24,-24,-18]; b=[2.8;4;12];c=[1,1,1];d=0; x=[0;0;0];tf=10;h=0.01;t=0; u=100;m=tf/h;y=0; for i=1:m k1=a*x+b*u;

k2=a*(x+h*k1/2)+b*u; k3=a*(x+h*k2/2)+b*u; k4=a*(x+h*k3)+b*u;

x=x+h*(k1+2*k2+2*k3+k4)/6; y=[y,c*x]; t=[t,t(i)+h]; end

plot(t,y); grid

6

六,可控标准型的状态空间参数

3s2?2已知传递函数为:G(s)?,编写程序求其可控标准型的状态空

4323s?5s?2s?1间参数A,B,C,D。 >> a=[3 0 2];

>> b=[3 5 2 1]; (分子和分母的输入) >> b=b/a(1);a=a/a(1); >> n=length(a)-1; >> A=a(2:n+1);

>> A=[rot90(rot90(eye(n-1,n)));-fliplr(A)] >> B=[zeros(1,n-1),1]' >> m1=length(b);

>> C=[fliplr(b),zeros(1,n-m1)]

七,面向数字结构图的数字仿真

1..典型闭环系统仿真实现

1.输入数据

a=[a0,a1,…,an]; b=[b0,b1,…,bm]; X=[0,0,…,0]’;(n-1个) V=v0; T0=0;Tf=10; h=0.01; R=r; y=0;t=T0;

2.闭环系数矩阵

b=b/a(1);a=a/a(1); n=length(a)-1; A=a(2:n+1);

A=[rot90(rot90(eye(n-1,n))); -fliplr(A)];

B=[zeros(1,n-1),1]’; m1=length(b);

7

C=[fliplr(b),zeros(1,n-m1)]; Ab=A-B*C*V;

3.运用四阶龙格-库塔公式求解 N=round((Tf-T0)/h); for i=1:N

k1=Ab*X+B*R;

k2=Ab*(X+h*k1/2)+B*R; k3=Ab*(X+h*k2/2)+B*R; k4=Ab*(X+h*k3)+B*R;

X=X+h*(k1+2*k2+2*k3+k4)/6; y=[y,C*X]; t=[t,t(i)+h]; end

plot(t,y);

grid

2.,复杂联接的闭环系统数字仿真

例 已知系统结构图如下图所示,写出系统联结矩阵和输入联结矩阵。wo,wc,w.

8

注意:方框中每个都为传递函数,而不是数值 还有一个例题见试卷最后一题。

八,系统校正

1,某系统开环传函如右,求它的幅值裕量和相位裕量,并求闭环阶跃响应。 num=3.5;den=[1 2 3 2]; G=tf(num,den); bode(G);grid;

[Gm,Pm,Wcg,Wcp]=margin(G) G_close=feedback(G,1); step(G_close)

2,已知系统开环传递函数如下,绘出伯德图,并讨论其稳定性 >> k=1.5;num=1; den=poly([0,-1,-2]); w=logspace(-1,1,100); [m,p]=bode(k*num,den,w); subplot(2,1,1);

semilogx(w,20*log10(m)); grid;

ylabel('增益(dB)');

9

subplot(2,1,2); semilogx(w,p); grid;

xlabel('频率(rad/s)'); ylabel('相角(deg)');

3,超前校正

k0=1000;要求43

做原系统的Bode图与阶跃响应曲线,检查是否满足题目要求 k0=1000; num=1; den=conv(conv([1,0],[0.1,1]),[0.001,1]); figure(1);

margin (k0*num,den);hold on figure(2);s1=tf(k0*num,den);

sys=feedback(s1,1);step(sys);hold on 求超前校正器的传递函数 >> k0=1000;num=1;

den=conv(conv([1,0],[0.1,1]),[0.001,1]); g0=tf(k0*num,den); [m,p,w]=bode(g0);

[gm0,pm0,wcg0,wcp0]=margin(g0); r=45; gama=r-pm0+5; gama=gama*pi/180;

a=(1+sin(gama))/(1-sin(gama)); wc=spline(m,w,1/sqrt(a)); T=1/(wc*sqrt(a)); gc=tf([a*T,1],[T,1])

校验系统校正后是否满足题目要求。 >> g=g0*gc; >> figure(1); >> margin(g);

计算系统校正后阶跃响应曲线和性能指标。 >> sys=feedback(g,1); >> figure(3); >> step(sys);

4,滞后校正

k0=30;r>40;wc>2.3

10

做原系统的Bode图与阶跃响应曲线,检查是否满足题目要求 >> k0=30;n1=1; >> d1=conv(conv([1,0],[0.1,1]),[0.2,1]); >> s1=tf(k0*n1,d1);

>> figure(1);margin(s1);hold on

>> figure(2);sys=feedback(s1,1);step(sys)

滞后校正器的传递函数。根据题目要求,wc>2.3 >> wc=2.3;

>> na=polyval(k0*n1,j*wc); >> da=polyval(d1,j*wc); >> g=abs(na/da); >> T=1/(0.1*wc); >> bt=g*T;

>> Gc=tf([T,1],[bt,1])

校验系统校正后是否满足题目要求。 >> s1=tf(k0*n1,d1); >> s=s1*Gc;

>> sys=feedback(s,1); >> step(sys);

方法二(运用给定的r=40) >> k=30;num=1; den=conv(conv([1,0],[0.1,1]),[0.2,1]); g0=tf(k*num,den);

figure(1);margin(g0);hold on [m0,p0,wcg0,wcp0]=margin(g0); [m,p,w]=bode(g0); r=40;

gama=-180+r+10; wc=spline(p,w,gama); b=spline(p,m,gama); t=10/wc;

gc=tf([t,1],[b*t,1]); g=g0*gc;

figure(1);margin(g);

5.滞后-超前校正

k0=10;r>45;wc>1.5

做原系统的Bode图与阶跃响应曲线,检查是否满足题目要求。 >> k0=20;num=1; >> den=conv(conv([1,0],[1,1]),[1,2]);

11

>> g0=tf(k0*n1,d1);

>> [mag,phase,w]=bode(g0); >> figure(1);margin(g0); hold on

>> figure(2);sys=feedback(g0,1);step(sys) 求滞后校正器的传递函数

>> wc=1.5;beta=9.5;T=1/(0.1*wc);(bata一般取10或9.5) >> betat=beta*T;Gc1=tf([T,1],[betat,1]) 求超前校正器的传递函数 sope=g0*Gc1;

gama=45;(r的取值) gamal=gama+5; gam=gamal*pi/180;

alfa=(1-sin(gam))/(1+sin(gam)); wc=1.5;

T=1/(wc*sqrt(alfa)); alfat=alfa*T;

Gc=tf([T,1],[alfat,1])

校验系统校正后是否满足题目要求 s=g0*Gc1*Gc; margin(s);

作出系统校正后阶跃响应曲线 sys=feedback(s,1); >> step(sys) 方法2

>> k=20;num=1; >> den=conv(conv([1,0],[1,1]),[1,2]); >> g0=tf(k*num,den);

>> figure(1);margin(g0); hold on >> figure(2);sys=feedback(g0,1); >> step(sys);

>> [m0,p0,wcg0,wcp0]=margin(g0); >> wc=wcg0; >> t2=10/wc;

>> b=10;(b取10或9.5) >> t1=b*m0/wc;

>> gc1=tf([t1,1],[t1/b,1]); >> gc2=tf([t2,1],[b*t2,1]); >> gc=gc1*gc2; >> g=g0*gc;

>> figure(1);margin(g); >> sys=feedback(g,1); >> figure(3);step(sys);

其外还有一个滞后-超前校正的例题见试题

12

13

本文来源:https://www.bwwdw.com/article/qj83.html

Top