matlab控制系统仿真教程答案唐(matlab求传递函数的极点)

简单的控制算法,没有用Simulink工具,直接写代码。主要点就是分清楚仿真环境和需要验证的算法。也就是说首先要数学建模,建立一个‘环境’,用来模拟实际环境。然后写自己的控制算法。最后把算法用到‘环境’上,就是在仿真了。全部代码如下:%Thesimulationofthestablependulumcart%usingPID,poleplacementandLQRclc;clea…

大家好,又见面了,我是你们的朋友全栈君。

简单的控制算法,没有用Simulink工具,直接写代码。主要点就是分清楚仿真环境和需要验证的算法。也就是说首先要数学建模,建立一个‘环境’,用来模拟实际环境。然后写自己的控制算法。最后把算法用到‘环境’上,就是在仿真了。

677d4b0e029c

677d4b0e029c

677d4b0e029c

677d4b0e029c

677d4b0e029c

全部代码如下:

%The simulation of the stable pendulum cart

%using PID,poleplacement and LQR

clc;

clear;

%parameter

m = 0.09; % The pendulum mass: m = 0.09kg;

M = 1.52; % The mobile cart mass: M = 1.52kg;

L = 0.24; % The 1/2 length of the pendulum: L = 0.24m;

I = m*(2*L)*(2*L)/12; % The inertia of the pendulum: I = m*(2L)^2/12;

Ts = 0.015; % The sampling time;

g = 9.81; % The gravity accelation: g = 9.81 N/m;

%modeling

temp_den = (m+M)*I+m*M*L*L;

i = m*g*L*(m+M)/temp_den;

j = -m*m*L*L*g/temp_den;

A = [0 1 0 0;

i 0 0 0;

0 0 0 1;

j 0 0 0];

B = [0 -m*L/temp_den 0 (I+m*L*L)/temp_den]’;

C = [1 0 0 0;

0 0 1 0];

D =[0 0]’;

[G H]=c2d(A,B,Ts);

x0=[-0.2 0 0.2 0]’;

t=0:Ts:3;

u=zeros(size(t));

%without control

y0=dlsim(A,B,C,D,u,x0);

subplot(4,1,1);

plot(t,y0);

axis([0 3 -50 50]);

xlabel(‘t’);

ylabel(‘θ&x’);

title(‘未加控制’);

legend(‘θ’,’x’);

%poleplacement

P=[0.9277,-0.9489,0.9632,0.9704];

K=place(G,H,P);

G1=G-H*K;

y1=dlsim(G1,H,C,D,u,x0);

subplot(4,1,2);

plot(t,y1);

xlabel(‘t’);

ylabel(‘x&θ’);

title(‘极点配置’);

legend(‘x’,’θ’);

%LQR

Q=[200 0 0 0;

0 1 0 0;

0 0 200 0;

0 0 0 1];

R=0.1;

K=dlqr(G,H,Q,R)

G2=G-H*K;

y2=dlsim(G2,H,C,D,u,x0);

subplot(4,1,3);

plot(t,y2);

xlabel(‘t’);

ylabel(‘x&θ’);

title(‘LQR’);

legend(‘x’,’θ’);

%PID

y3=zeros(4,size(t,2));

sumx0=[0 0 0 0]’;

u=0;

kp1=150;

ki1=3;

kd1=1000;

kp2=80;

ki2=1;

kd2=1500;

for i=1:size(t,2)

lastx0=x0;

x0=G*x0+H*u;

Dx0=x0-lastx0;

sumx0=sumx0+x0;

u=kp1*x0(1)+ki1*sumx0(1)+kd1*Dx0(1)+kp2*x0(3)+ki2*sumx0(3)+kd2*Dx0(3);

y3(:,i)=x0;

end

y3=[y3(1,:);y3(3,:)];

subplot(4,1,4);

plot(t,y3);

xlabel(‘t’);

ylabel(‘x&θ’);

title(‘PID’);

legend(‘x’,’θ’);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128781.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CentOS 7中创软连接和scp命令

    CentOS 7中创软连接和scp命令(1)创建软连接 使用root用户操作语法:ln -s源路径软连接路径ln-s/home/hadoop/apps/zookeeper-3.4.10/usr/local/zookeeper(2)修改zookeeper软链接属主为hadoop 使用root用户操作chown-Rhadoop:hadoop/usr/local/zookeeper(3)s…

    2025年11月11日
    2
  • 防雷

    防雷

    2021年8月25日
    51
  • Json使用教程

    Json使用教程使用第三方静态库的步骤:1、编译文件生成静态库。2、把相关的.h文件放入D:\VS2005安装目录\VC\include路径下。3、把相应的.lib文件放在D:\VS2005安装目录\VC\lib路径下。在使用中只需要将json.rar中的文件添加(并包含)到项目中链接:在需要使用Json的文件中添加json.h的头文件即可使用了使用教程如下:JsonCpp是一…

    2022年4月7日
    50
  • 女友:啥,识别个文字还要付费?我立马用Python实现了一款免费版文字识别工具[通俗易懂]

    女友:啥,识别个文字还要付费?我立马用Python实现了一款免费版文字识别工具[通俗易懂]导语有一天和女朋友聊天,翻着手机上的软件,看电影、看编程网站,她说到:“这么多APP,怎么就没一个做文字识别很方便的呢?我经常读书读到一段话想把它摘抄下来,可是这些软件不是打开进入文字识别步骤很复杂,就是限制识别次数,要么就是限制编辑,很多识别软件还都是付费的,好烦“。然后程序员小哥说:“要不我给你做一个免费版本文字识别小程序?”话不多话,对象第一,开干~~~​​​正文程序原理简介:python利用百度文字识别功能,实现对上传的图片进行扫描,获取图片的文字信…

    2022年5月27日
    36
  • android IPC 通信(上)-sharedUserId&&Messenger「建议收藏」

    android IPC 通信(上)-sharedUserId&&Messenger

    2022年2月23日
    50
  • disqualification游戏_ACWING怎么样

    disqualification游戏_ACWING怎么样如下图所示,有一个 # 形的棋盘,上面有 1,2,3 三种数字各 8 个。给定 8 种操作,分别为图中的 A∼H。这些操作会按照图中字母和箭头所指明的方向,把一条长为 7 的序列循环移动 1 个单位。例如下图最左边的 # 形棋盘执行操作 A 后,会变为下图中间的 # 形棋盘,再执行操作 C 后会变成下图最右边的 # 形棋盘。给定一个初始状态,请使用最少的操作次数,使 # 形棋盘最中间的 8 个格子里的数字相同。输入格式输入包含多组测试用例。每个测试用例占一行,包含 24 个数字,表示将初始棋

    2022年8月8日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号