我是靠谱客的博主 丰富外套,最近开发中收集的这篇文章主要介绍matlab step函数_Matlab中控制系统仿真的简单方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Matlab中控制系统仿真的简单方法

Matlab中有丰富的控制方程解算与控制函数,但这些函数应用起来略感不自由,我习惯用matlab代码做控制系统的仿真,虽然比较繁琐,但好在可以随心所欲。以一个经典的二阶系统为例,说明一下控制系统仿真方法。

一个经典的质量-弹簧-阻尼系统,如图

3bec982db47a4d7b0a054a7e818b6b52.png

系统方程是:

9870ae452bf8fc7aeb5d17831a67281c.png

是一个一元二阶常微分方程。对该系统的仿真有很多种方法,比如可以转换成S函数,写出传函

78ccbb3f05c4ad32c553fb6101ae1051.png

设num=1;

den=[m b k];

形成系统 sys=tf(num,den);

然后就可以研究控制性能了,如研究阶跃响应

Step(sys),复杂响应 lsim(sys,u,t);

但。。。。 不知道说啥原因,习惯问题吧,我喜欢掌控每一个环节,所以常用以下方法实现控制系统的仿真。

首先:将微分方程转换为状态空间:

7089c9435837eaf221b5d48389f54ccd.png

再配合龙哥库塔发求数值积分。

直接上代码吧

参数:m=5;b=4;k=3; F=sin(t)

function SolveControl

dt=0.1; % 仿真补偿

tmax=30; %仿真时间

u=0; %控制信号初始化

x0=0; %状态初始化

X=zeros(2,tmax/dt); %保存每一步的状态

X(:,1)=x0;

for i=1:tmax/dt

u=sin(i*dt);

K1=dt*dynamic(X(:,i),u); % 4阶龙格库塔

K2=dt*dynamic(X(:,i)+1/2*K1,u);

K3=dt*dynamic(X(:,i)+1/2*K2,u);

K4=dt*dynamic(X(:,i)+K3,u);

X(:,i+1)=X(:,i)+(K1+2*K2+2*K3+K4)/6;

end

t=1:dt:tmax+1;

plot(t,X(1,:),'r.-');

xlabel('T(s)');

ylabel('X');

end

function XX=dynamic(x,u) % 动力学模型+控制

m=5;b=4;k=3;

XX(1,:)=x(2,:); % 状态空间表达

XX(2,:)=-k/m*x(1,:)-b/m*x(2,:)+1/m*u;

end

得到的仿真结果如图所示

6541a392710ccd972824c7a974920ac8.png

作为对比,以下是用matlab函数

num=1;

den=[5 4 3];

sys=tf(num,den);

t=0:0.1:30;

u=sin(t);

lsim(sys,u,t);

生成的曲线

0a6acd508dba97ebfb2b64b646d26770.png

结果是一样的

最后

以上就是丰富外套为你收集整理的matlab step函数_Matlab中控制系统仿真的简单方法的全部内容,希望文章能够帮你解决matlab step函数_Matlab中控制系统仿真的简单方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部