声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1152|回复: 1

[编程技巧] 倒立摆系统的RLS参数辨识程序

[复制链接]
发表于 2007-6-7 11:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
对于一个倒立摆系统,其描述为:a'=f(a,a')+g(a,a')u   (1)
其中:f=(9.8*sin(a)-m*l*b^2*cos(a)*sin(a)/(mc+m))/l/(4/3-m*cos(a)^2/(mc+m)); (2)
         g=cos(a)/(mc+m)/l/(4/3-m*cos(a)^2/(mc+m));                                           (3)
         l=0.5;m=0.1;mc=1;
对式(1)进行简单的离散化,可得:
              a(k+1)=a(k)+a'(k);
              a'(k+1)=a'(k)+[f(a(k),a'(k))+g(a(k),a'(k))*u(k)]*h;                                  (4)
              h=0.01s

将式(4)转化为模糊双曲正切模型:
              x1(k+1)=c1*tanh(s1*x1(k))+c2*tanh(s2*x2(k))                                    
              x2(k+1)=d1*tanh(s2*x2(k))+d2*u(k)                                                    (5)
式(5)写为矩阵形式:
             X(k+1)=A*tanh(S*X(k))+B*u(k)                                                           (6)
             X(k+1)=[A,B]*D(k)                                                                              (7)
其中:D(k)=[tanh(s1*x1(k);tanh(s2*x2(k));u(k)];
令C‘=[A,B];
利用递推最小二乘法辨识参数A,B:
C(k+1)=C(k)+F(k+1)*D(k)*e(k+1)
F(k+1)=(1/m)*{F(k)-[(F(k)*D(k)*D(k)'*F(k))/(m+D(k)'*F(k)*D(k))]}
e(k+1)=x(k+1)-C(k)'*D(k)
其中a(0)=0.3491(近似20度);a(0)'=0;u(k)=-25*a(k)-a(k)'+0.2*cos((2*pi/50)*k);
s1=s1=1; m=0.95; F(0)=1000I ;x1(0)=x2(0)=c1(0)=c2(0)=d1(0)=d2(0)=0;

(C’表示C矩阵的转制,应用MATLAB表示方法,呵呵,这里公式编辑器貌似编不上,只好这样凑数了。D‘亦同)
RLS算法在MATLAB中的实现:
% 主体程序
k=0.95;
F=1000*[1,0,0;0,1,0;0,0,1];
h=0.01;A(1,1)=0.3491;A1(1,1)=0;
c1=0;c2=0;d1=0;d2=0;
C=[c1;c2;0];C1=[0;d1;d2];
for(i=1:1500)
   x=A(1,i)+A1(1,i)*h;
   u(i)=-25*A(1,i)-A1(1,i)+0.2*cos((2*pi/50)*i);
   a=A(1,i);
   b=A1(1,i);
   f=yo_11(a,b);
   g=yo_12(a,b);
   y=A1(1,i)+(f+g*u(i))*h;                             
   A=[A [x]];
   A1=[A1 [y]];
end;
for(i=1:1500)
   D(:,i)=[tanh(A(1,i));tanh(A1(1,i));u(i)];
   F=1/k*(F-F*D(:,i)*D(:,i)'*F/(k+D(:,i)'*F*D(:,i)));
   e=A(1,i+1)-C(:,i)'*D(:,i);
   e1=A1(1,i+1)-C1(:,i)'*D(:,i);
   C(:,i+1)=C(:,i)+F*D(:,i)*e;
   C1(:,i+1)=C1(:,i)+F*D(:,i)*e1;
end;
%
%f函数%
function f=yo_11(a,b)
l=0.5;m=0.1;mc=1;
f=(9.8*sin(a)-m*l*b^2*cos(a)*sin(a)/(mc+m))/l/(4/3-m*cos(a)^2/(mc+m));
%
%g函数%
function g=yo_12(a,b)
l=0.5;m=0.1;mc=1;
g=cos(a)/(mc+m)/l/(4/3-m*cos(a)^2/(mc+m));
%

初次编写,贻笑方家了!
回复
分享到:

使用道具 举报

发表于 2008-5-15 10:15 | 显示全部楼层
正在做这方面,学习下,谢谢分享!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-12 01:32 , Processed in 0.069456 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表