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

相关推荐

  • pycharm默认主题_pycharm设置背景

    pycharm默认主题_pycharm设置背景一、Pycharm基本设置(小白篇)1、打开Pycharm设置,【File】-【Settings】2、设置解释器,【File】-【Settings】-【Project:项目名字】-【ProjectInterpreter】-【设置图标】-【Add】-【浏览到目标解释器】,选择相应解释器即可。3、设置pycharm主题,【File】-【Settings】-【Appearance&Behavior】-【Appearance】;Theme:修改主题、Usecustomf

    2022年8月27日
  • android 苹果 换机,苹果12怎么一键换机安卓?iPhone12一键换机功能操作步骤

    android 苹果 换机,苹果12怎么一键换机安卓?iPhone12一键换机功能操作步骤苹果12怎么从安卓一键换机?相信有很多朋友最近新购了iPhone12,但是原来安卓手机中有不少的联系人和文件资料,要是手动来备份还原,那就太麻烦了,所以这时候就需要用到一键换机功能了。下面我们就为大家带来了苹果12电脑端和手机端的一键换机教程,一起来看看吧!苹果12怎么一键换机安卓?iPhone12一键换机功能操作步骤苹果一键换机功能怎么操作1、使用QQ同步助手换机,我们可以在原来安卓或者旧苹果手…

    2022年5月26日
  • sqlplus中实现上、下键翻动命令

    sqlplus中实现上、下键翻动命令

    2021年8月26日
  • scala隐式转换[通俗易懂]

    scala隐式转换[通俗易懂]简述:1:通过隐式转换,程序员可以在编写Scala程序时故意漏掉一些信息,让编译器去尝试在编译期间自动推导出这些信息来,这种特性减少代码量,忽略那些冗长的代码。2:我们经常引入第三方库,但当我们想要扩展新功能的时候通常是很不方便的,因为我们不能直接修改其代码。scala提供了隐式转换机制和隐式参数帮我们解决诸如这样的问题。Scala中的隐式转换是一种非常强大的代码查找机制。当函数、构造器调用缺少参数或者某一实例调用了其他类型的方法导致编译不通过时,编译器会尝试搜索一些特定的区域,尝试使编译

    2022年10月9日
  • python编程画圆入门(python常用函数)

    python画圆运用了matplotlb库的figure()和Circle()函数;其中,figure()函数用于确定画布大小,而Circle()函数用于配置圆的相关信息,进而画圆。H9Z少儿编程网-https://www.pxcodes.comH9Z少儿编程网-https://www.pxcodes.com本教程操作环境:windows7系统、Python3版、DellG3电脑。H9Z少儿…

    2022年4月14日
  • IC基础(一):异步FIFO[通俗易懂]

    IC基础(一):异步FIFO[通俗易懂]今天看别人的博客研究了一天的异步FIFO,中遇到了很多问题。很多人可能有过这样的经历,当你研究一个东西,可能你当时很清楚你是怎么想的,但是过后就忘记了当时的思路了。因此我写博客的主要目的就是为了回头查阅方便。IC基础可能会写很多篇,本篇异步FIFO就是此系列的第一篇。…

    2022年8月13日

发表回复

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

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