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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • fscanf()函数具体解释

    fscanf()函数具体解释

    2021年12月15日
    86
  • 最优模型选择的准则:AIC、BIC准则

    最优模型选择的准则:AIC、BIC准则选择最优模型的指导思想是从两个方面去考察:一个是似然函数最大化,另一个是模型中的未知参数个数最小化。似然函数值越大说明模型拟合的效果越好,但是我们不能单纯地以拟合精度来衡量模型的优劣,这样回导致模型中未知参数越来越多,模型变得越来越复杂,会造成过拟合。所以一个好的模型应该是拟合精度和未知参数个数的综合最优化配置。AIC准则AIC准则是由日本统计学家Akaike与1973年提出的,全称是最小…

    2022年5月10日
    75
  • java.sql.SQLException: ORA-01008: 并非所有变量都已绑定的解决方法「建议收藏」

    java.sql.SQLException: ORA-01008: 并非所有变量都已绑定的解决方法「建议收藏」错误:在使用PreparedStatement的时候,可以很好地避免像Statement的sql注入问题,但是在这里使用PreparedStatement对象和使用Statement对象来执行sql语句有一定的区别。PreparedStatement的对象通过:PreparedStatementp=con.preparedStatement(str);来执行sql语句,其中str是s…

    2025年9月6日
    12
  • microsoft setup bootstrapper已停止工作

    microsoft setup bootstrapper已停止工作1.https://jingyan.baidu.com/article/6c67b1d6557f752787bb1e2b.html2.https://blog.csdn.net/a_flying_bird/article/details/51726220通过这两个方法还是没有解决,我估计要重装电脑。…

    2022年7月20日
    24
  • docker下载安装教程_docker安装macos

    docker下载安装教程_docker安装macos前言Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个D

    2022年7月31日
    6
  • No MyBatis mapper was found in ‘[com.supergo]‘ package. Please check your configuration.问题

    No MyBatis mapper was found in ‘[com.supergo]‘ package. Please check your configuration.问题NoMyBatismapperwasfoundin‘[com.supergo]’package.Pleasecheckyourconfiguration.问题第一遍编写程序运行的时候没问题,第二遍的时候遇到了这个问题。使用的tk的开源项目进行mybatis集成,百度了很多解决方案,最终看到一位前辈介绍:doScan()会扫描启动类同级目录下的mapper接口,但是合理的目录结果绝对不允许所有的mapper都在启动类目录下,所以在启动类目录下添加了一个伪mapper,如下:然后再

    2022年6月25日
    35

发表回复

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

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