-
Notifications
You must be signed in to change notification settings - Fork 305
Open
Description
车参数:
cf=-110000;
cr=cf;
m=2108;
Iz=1585.3;
a=1.47;
b=2.97-a;
k=zeros(1,4);
i=1;
vx=0.01*i;
A=[1,1,0,0;
1,(cf+cr)/(m*vx),-(cf+cr)/m,(a*cf-b*cr)/(m*vx);
0,0,0,1;
0,(a*cf-b*cr)/(Iz*vx),-(a*cf-b*cr)/Iz,(a*a*cf+b*b*cr)/(Iz*vx)];
B=[0;
-cf/m;
0;
-a*cf/Iz];
Q=1*eye(4);
R=10;
自己写的迭代函数:
`function [K2,P] = lqrtest(A, B, Qx, Ru)
%--------------------------------------------------------------------------
% P matrix calculation:
P=Qx;
iteration_num=1;
max_num_iteration=20000;
tolerance = [0 0 0 0;0 1 1 1;0 1 1 1;0 1 1 1];
err = 2*ones(4,4);
while(err >= tolerance & iteration_num < max_num_iteration)
iteration_num=iteration_num+1;
P_1 = Qx + A'*P*A - A'*P*B*(Ru+B'*P*B)^(-1)*B'*P*A;
err = abs(P_1 - P);
if sum(sum(isnan(P_1)))
break;
end
P = P_1;
end
% gain K matrix calculation:
K2 = inv(Ru + B'*P*B)*(B'*P*A);
end
[k,P]=lqr(A,B,Q,R) % 使用matlab自带函数
和
[k,P]=lqrtest(A,B,Q,R) %使用迭代求解riccati方程求P
两种方法算出来的解是不一样的,那我用迭代法的解是不是就不可以啊?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels