控制系统仿真实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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