大家好,菜鸟最近在看龚建伟教授的《无人驾驶车辆模型检测》,可是看到第五章基于动力学模型的主动转向控制那里的源代码最后的有效集法'active set'从quadprog里删除了,请问应该怎么改?
%% 开始求解过程
options = optimset('Algorithm','active-set');
x_start=zeros(Nc+1,1);%加入一个起始点
[X,fval,exitflag]=quadprog(H,f,A_cons,b_cons,[],[],lb,ub,x_start,options);
fprintf('exitflag=%d\n',exitflag);
fprintf('H=%4.2f\n',H(1,1));
fprintf('f=%4.2f\n',f(1,1));
1.改为内点法求规划问题
2.如果在某一时刻由于计算结果的问题导致运行终止,将原来的代码修改一下,用if isempty命令判断就算结果X是否为空,如果是,则保留上一次计算结果,如果不是,则正常输出,代码如下:
% options = optimset('Algorithm','active-set');
options = optimset('Algorithm','interior-point-convex'); %内点法
x_start=zeros(Nc+1,1);%加入一个起始点
[X,fval,exitflag]=quadprog(H,f,A_cons,b_cons,[],[],lb,ub,x_start,options);
if isempty(X)
U(1)=kesi(7,1);
sys= U;
toc
else
%% 计算输出
u_piao=X(1);%得到控制增量
U(1)=kesi(7,1)+u_piao;%当前时刻的控制量为上一刻时刻控制+控制增量
%U(2)=Yita_ref(2);%输出dphi_ref
sys= U;
toc
% End of mdlOutputs.
end
fprintf('exitflag=%d\n',exitflag);
fprintf('H=%4.2f\n',H(1,1));
fprintf('f=%4.2f\n',f(1,1));
根据提示改为内点法后,二次规划问题无法求得最优解,所以必须下载一个2011a版的matlab才可以。