倒立摆系统的RLS参数辨识程序
对于一个倒立摆系统,其描述为: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)+*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)=*D(k) (7)
其中:D(k)=;
令C‘=;
利用递推最小二乘法辨识参数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*;
h=0.01;A(1,1)=0.3491;A1(1,1)=0;
c1=0;c2=0;d1=0;d2=0;
C=;C1=;
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=];
A1=];
end;
for(i=1:1500)
D(:,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));
%
初次编写,贻笑方家了! 正在做这方面,学习下,谢谢分享!
页:
[1]