控制系统仿真实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

控制系统仿真实验

实验报告

实验一 经典的连续系统仿真建模方法

一 实验目的:

1 了解和掌握利用仿真技术对控制系统进行分析的原理和步骤。

2 掌握机理分析建模方法。

3 深入理解阶常微分方程组数值积分解法的原理和程序结构,学习用Matlab 编写数值积分法仿真程序。

4 掌握和理解四阶Runge-Kutta 法,加深理解仿真步长与算法稳定性的关系。 二 实验原理: 1非线性模型仿真

()

()

⎪⎪⎭

⎪⎪⎬⎫

⎪⎪⎩⎪⎪⎨⎧-=-+=221122112111H H A dt dH H Q u k A dt dH d u ααα ⎥⎦

⎢⎣⎡∆∆⎥⎥⎦⎤⎢⎢⎣⎡+⎥⎦⎤⎢⎣⎡∆∆⎥⎥⎥⎥⎦⎤

⎢⎢⎢

⎢⎣⎡

--=∆d u Q u A A k H H AR AR AR

H 001110

12121212

三 实验内容:

1. 编写四阶 Runge_Kutta 公式的计算程序,对非线性模型(3)式进行仿真。 (1) 将阀位u 增大10%和减小10%,观察响应曲线的形状;

2. 编写四阶 Runge_Kutta 公式的计算程序,对线性状态方程(18)式进行仿真 (1) 将阀位增大10%和减小10%,观察响应曲线的形状; (2) 研究仿真步长对稳定性的影响,仿真步长取多大时RK4 算法变得不稳定? 四 程序代码: 龙格库塔: %Rk4文件

function [x,y]=Rk4(f,y0,h,a,b,u) %四阶龙格库塔公式

%微分方程组的函数名称,初始值,步长,时间起点,时间终点,阀门开度 n=floor((b-a)/h);%求步数 x(1)=a; %时间起点 y(1,:)=y0; %赋初值 for i=1:n

x(i+1)=x(i)+h;

k1=f(x(i),y(i,:),u);

k2=f(x(i)+h/2,y(i,:)+h*k1/2,u); k3=f(x(i)+h/2,y(i,:)+h*k2/2,u); k4=f(x(i)+h,y(i,:)+h*k3,u);

y(i+1,:)=y(i,:)+h*(k1+2*k2+2*k3+k4)/6; end

状态方程:

function dy=f(t,y,u)

dy = zeros(2,1);

dy(1)=0.5*(0.2*u+0.15-0.20412*sqrt(y(1)));

dy(2)=0.5*(0.20412*sqrt(y(1))-0.21129*sqrt(y(2)));

dy=dy'

水箱模型:

clear

u=0.6; %阀位大小

y0=[1.5 1.4]; %初始值

a=0;b=600; %仿真时间

h=1; %仿真步长

[T,Y]=Rk4(@f,y0,h,a,b,u); %调用PK4

plot(T,Y(:,1),'b-',T,Y(:,2),'m-.')

title('非线性模型曲线图');legend('第一个水箱液位H1','第二个水箱液位H2');

xlabel('时间t');ylabel('液位高度h');

1 、阀值u对仿真结果的影响

U=0.4;h=1;

U=0.6;h=1;

2编写四阶 Runge_Kutta 公式的计算程序,对线性状态方程(18)式进行仿真:%RK_4文件

function [x,y]=RK_4(f2,y0,h,a,b,u)%参数表顺序依次是微分方程组的函数名称,初始值向量,步长,时间起点,时间终点,阀门开度

n=floor((b-a)/h);%求步数

x(1)=a;%时间起点

y(1,:)=y0; %赋初值,可以是向量,但是要注意维数

for i=1:n

x(i+1)=x(i)+h;

k1=f2(x(i),y(i,:),u);

k2=f2(x(i)+h/2,y(i,:)+h*k1/2,u);

k3=f2(x(i)+h/2,y(i,:)+h*k2/2,u);

k4=f2(x(i)+h,y(i,:)+h*k3,u);

y(i+1,:)=y(i,:)+h*(k1+2*k2+2*k3+k4)/6;

%按照龙格库塔方法进行数值求解

end

状态方程:

function dy=f2(t,y,u)

A=2;

Ku=0.1/0.5;

dy=zeros(2,1); % a column vector a12=0.25/sqrt(1.5); a2=0.25/sqrt(1.4); R12=2*sqrt(1.5)/a12; R2=2*sqrt(1.4)/a2;

AX=[-1/(A*R12) 0;1/(A*R12) -1/(A*R2)]; BX=[Ku/A 1/A;0 0]; dy=AX*y'+BX*u'; dy=dy' end

线性函数: clc

clear all u=[0.5 0]; y0=[0 0];

a=0;b=500;h=1;

[T,Y]=RK_4(@f2,y0,h,a,b,u); Y(:,1)=Y(:,1)+1.5; Y(:,2)=Y(:,2)+1.4;

plot(T,Y(:,1),'g-',T,Y(:,2),'r-.')

title('线性模型曲线图');legend('第一个水箱的液位H1','第二个水箱的液位H2');

xlabel('时间t');ylabel('液位高度h'); 1 阀值u 对仿真结果的影响:

U=0.4;h=1;

050100150200

250300350400450500

1.4

1.61.82

2.2

2.42.62.8线性模型响应曲线图

时间t

液位高度h

H1H2

相关文档
最新文档