I'm sorry my code is very long and it's very messy.
thanks for your help.
optimainaleron.m
clear all
clc
load 'resultscirculo.mat'
option = 'cerrado';
axmax = inf*ones(max(size(P)),1);
axmin = -inf*ones(max(size(P)),1);
aymax = inf*ones(max(size(P)),1);
aymin = -inf*ones(max(size(P)),1);
vx0min = -100;
vx0max = 100;
vy0min = -inf;
vy0max = inf;
v0min = -inf;
v0max = inf;
theta0min=-18*ones(max(size(P)),1);
theta0max=40*ones(max(size(P)),1);
lb = [axmin;aymin;theta0min;vx0min;vy0min];
ub = [axmax;aymax;theta0max;vx0max;vy0max];
theta0 =linspace(-18,45,50);
theta0=theta0';
ax0 =linspace(0,0,50);
ay0 =linspace(0,0,50);
ffrz0 = -100.*ones(max(size(P)),1);
fflz0 = -100.*ones(max(size(P)),1);
frrz0 = -200.*ones(max(size(P)),1);
frlz0 = -200.*ones(max(size(P)),1);
Fr0=[ffrz0;fflz0;frrz0;frlz0];
v1=50;
vx1=10;
vy1=10;
x0=[ax0';ay0';theta0;vx1;vy1];
noncon=@(x)moddim(x0,R,P,option);
objfunc = @(x)tiempo( x0,P,option );
options.Display = 'iter';
options.PlotFcns = {@optimplotfval,@optimplotfirstorderopt};
options.MaxFunEvals =10000000;
options.TolFun = 1e-5;
options.Algorithm = 'active-set';
options.UseParallel = 0;
for i = 1:1
[x0,fval0,exitflag0,output0,lambda0,grad0,hessian0]= fmincon(objfunc, x0, [],[],[],[],[],[],noncon,options);
x_opt = x0;
end
tiempo.m
function [ velp ] = tiempo( x,P,option )
siz = length(x)-2;
ax = x(1:(siz/3));
ay = x((siz/3)+1:(((2*siz)/3)));
theta=x(((2*siz/3)+1):(end-2));
vx1=x(end-1);
vy1=x(end);
np=max(size(P));
[ D, s,sx,sy ] = distancia( P,option );
[ v,vx,vy ] = velcalculator( ax,ay,vx1,vy1, s,sx,sy)
v=(vx'.^2+vy'.^2).^(1/2);
p00 = 0.1248 ;
p10 = -0.008334 ;
p01 = 0.03139 ;
p20 = -0.002709 ;
p11 = -0.001824 ;
p02 = -0.002159 ;
p30 = -3.832e-06 ;
p21 = -0.0002478 ;
p12 = -3.538e-05 ;
p03 = -0.0001129 ;
p40 = 5.228e-08 ;
p31 = 2.519e-07 ;
p22 = -1.056e-05 ;
p13 = 6.798e-06 ;
p04 = 8.076e-06 ;
p41 = -2.174e-10 ;
p32 = -1.048e-08 ;
p23 = -4.085e-08 ;
p14 = -1.177e-07 ;
p05 = -1.094e-07 ;
v=v';
Fd =( p00 + p10.*theta + p01.*v + p20.*theta.^2 + p11.*theta.*v + p02.*v.^2 + p30.*theta.^3 + p21.*theta.^2.*v + p12.*theta.*v.^2 + p03.*v.^3 + p40.*theta.^4 + p31.*theta.^3.*v + p22.*theta.^2.*v.^2 + p13.*theta.*v.^3 + p04.*v.^4 + p41.*theta.^4.*v + p32.*theta.^3.*v.^2 + p23.*theta.^2.*v.^3 + p14.*theta.*v.^4 + p05.*v.^5).*9.81;
a=((ax+(( p00 + p10.*theta + p01.*v + p20.*theta.^2 + p11.*theta.*v + p02.*v.^2 + p30.*theta.^3 + p21.*theta.^2.*v + p12.*theta.*v.^2 + p03.*v.^3 + p40.*theta.^4 + p31.*theta.^3.*v + p22.*theta.^2.*v.^2 + p13.*theta.*v.^3 + p04.*v.^4 + p41.*theta.^4.*v + p32.*theta.^3.*v.^2 + p23.*theta.^2.*v.^3 + p14.*theta.*v.^4 + p05.*v.^5).*9.81)/1000).^2+ay.^2).^(1/2);
time(1)=0;
vel = -((2.*(a(1:end-1)+a(2:end))).*(((s(end-1)+v(1:end-1).^2)))).^(0.5);
vellast = -((2.*(a(end)+a(1))).*(((s(end)+v(end).^2)))).^(0.5);
vel=[vel;vellast]
velp=sum(vel)/50
for i=1:49
time(i+1)= (2.*s(i)./(a(i)+a(i+1)))+time(i).^2.^(0.5);
end
timelast = (((s(1)./(a(end)+a(1)))+time(end-1)).^(0.5));
time = time(end)+timelast ;
end
moddim.m
function [c,ceq]=moddim(x,R,P,option);
siz = length(x)-2;
ax = x(1:(siz/3));
ay = x((siz/3)+1:(((2*siz)/3)));
theta=x(((2*siz/3)+1):(end-2));
vx1=x(end-1);
vy1=x(end);
np=max(size(P));
[ D, s,sx,sy ] = distancia( P,option );
vx=zeros(np,1);
vy=zeros(np,1);
[ v,vx,vy ] = velcalculator( ax,ay,vx1,vy1, s,sx,sy)
a=(ax.^2+ay.^2).^(1/2);
ar=a./R;
m=1000;d=0;b=1.7;tf=0.95;tr=0.95;h=0.48;Ixz=160;Izz=2800;Krr=(500*17.858);Krl=(500*17.858);Kfr=(700*17.858);Kfl=(700*17.858);da=1.2;l=2.6;g=9.81;
v=(vx.^2+vy.^2).^(1/2);
p00 = -22.07 ;
p10 = -9.15 ;
p01 = 2.109 ;
p20 = 0.4215 ;
p11 = 0.3237 ;
p02 = -0.6287 ;
p30 = 0.03312 ;
p21 = -0.001976 ;
p12 = -0.008085 ;
p03 = 6.67e-05 ;
p40 = -0.00181 ;
p31 = -0.001228 ;
p22 = 0.0009839 ;
p13 = -1.491e-05 ;
p04 = -3.561e-06 ;
p50 = 2.152e-05 ;
p41 = 2.599e-05 ;
p32 = -1.592e-05 ;
p23 = 4.868e-07 ;
p14 = 6.517e-08 ;
Fl= p00 + p10.*theta + p01.*v + p20.*theta.^2 + p11.*theta.*v + p02.*v.^2 + p30.*theta.^3 + p21.*theta.^2.*v + p12.*theta.*v.^2 + p03.*v.^3 + p40.*theta.^4 + p31.*theta.^3.*v + p22.*theta.^2.*v.^2 + p13.*theta.*v.^3 + p04.*v.^4 + p50.*theta.^5 + p41.*theta.^4.*v + p32.*theta.^3.*v.^2 + p23.*theta.^2.*v.^3 + p14.*theta.*v.^4;
deltaang=l./R;
r=(vx./l).*(deltaang);
betaang=atan(vy./abs(vx));
alfaang1= atan(v.*(sin(betaang)))./(v.*cos((betaang))+tf)-deltaang;
alfaang2= atan(v.*(sin(betaang)))./(v.*cos((betaang))-tf)-deltaang;
alfaang3= atan(v.*(sin(betaang)))./(v.*cos((betaang))+tr);
alfaang4= atan(v.*(sin(betaang)))./(v.*cos((betaang))-tr);
alfaang = [alfaang1;alfaang2;alfaang3;alfaang4];
g=9.81;
for i=1:siz/3
Fr(:,i)=calcforce(vx(i),vy(i),r(i),ax(i),ay(i),ar(i),Fl(i));
end
Fr1=Fr';
k=((0.45./(0.45-abs(Fr)/2.1582e+05))-1);
muflx=(ax./abs(ax)).*(1.48.*sin(1.37*atan(18.22.*k(1,:)'+0.46.*(18.22.*k(1,:)'-atan(18.22.*k(1,:)'))))).*(cos(1.1231.*atan(alfaang1.*(13.476./(1+11.354^2.*k(1,:)'.^2)))));
mufrx=(ax./abs(ax)).*(1.48.*sin(1.37*atan(18.22.*k(2,:)'+0.46.*(18.22.*k(2,:)'-atan(18.22.*k(2,:)'))))).*(cos(1.1231.*atan(alfaang2.*(13.476./(1+11.354^2.*k(2,:)'.^2)))));
murlx=(ax./abs(ax)).*(1.48.*sin(1.37*atan(18.22.*k(3,:)'+0.46.*(18.22.*k(3,:)'-atan(18.22.*k(3,:)'))))).*(cos(1.1231.*atan(alfaang3.*(13.476./(1+11.354^2.*k(3,:)'.^2)))));
murrx=(ax./abs(ax)).*(1.48.*sin(1.37*atan(18.22.*k(4,:)'+0.46.*(18.22.*k(4,:)'-atan(18.22.*k(4,:)'))))).*(cos(1.1231.*atan(alfaang4.*(13.476./(1+11.354^2.*k(4,:)'.^2)))));
mufly=(1.22.*sin(1.25*atan(17.8.*alfaang1-0.02.*(17.8.*alfaang1-atan(17.8.*alfaang1))))).*(cos(1.0533.*atan(k(1,:)'.*(7.7856./(1+8.1697^2.*alfaang1.^2)))));
mufry=(1.22.*sin(1.25*atan(17.8.*alfaang2-0.02.*(17.8.*alfaang2-atan(17.8.*alfaang2))))).*(cos(1.0533.*atan(k(2,:)'.*(7.7856./(1+8.1697^2.*alfaang2.^2)))));
murly=(1.22.*sin(1.25*atan(17.8.*alfaang3-0.02.*(17.8.*alfaang3-atan(17.8.*alfaang3))))).*(cos(1.0533.*atan(k(3,:)'.*(7.7856./(1+8.1697^2.*alfaang3.^2)))));
murry=(1.22.*sin(1.25*atan(17.8.*alfaang4-0.02.*(17.8.*alfaang4-atan(17.8.*alfaang4))))).*(cos(1.0533.*atan(k(4,:)'.*(7.7856./(1+8.1697^2.*alfaang4.^2)))));
Fflz=Fr1(:,1);
Ffrz=Fr1(:,2);
Frlz=Fr1(:,3);
Frrz=Fr1(:,4);
Fr=[Fflz;Ffrz;Frlz;Frrz];
Ax=(ax.*m-ar.*d.*m+Fflz.*muflx+Ffrz.*mufrx+Frlz.*murlx+Fl.*murrx+Frrz.*murrx-(b.*r+vy).*m.*r);
Ay=(ay.*m+ar.*b.*m+Fflz.*mufly+Ffrz.*mufry+Frlz.*murly+Frrz.*murrx+Fl.*murry+m.*r.*(-d.*r+vx));
My=(ay.*b.*m-ax.*d.*m+ar.*(Izz+b.*h.*m)+Ffrz.*(l.*mufly-muflx.*tf)+Fflz.*(l.*mufly+muflx.*tf)+Frlz.*murlx.*tr-Frrz.*murrx.*tr+m.*r.*(b.*vx+d.*vy));
Az=(-Fflz-Ffrz-Fl-Frlz-Frrz-g.*m);
Mp=(-d.*g.*m+ay.*h.*m+ar.*(Ixz+b.*h.*m)+Fflz.*tf-Ffrz.*tf+Frlz.*tr-Frrz.*tr+h.*m.*r.*(-d.*r+vx));
Mr=(Fflz.*l+Ffrz.*l+b.*g.*m-ax.*h.*m+ar.*d.*h.*m+(Ixz.*+b.*h.*m).*r.^2+h.*m.*r.*vy);
Hp=(-Frlz.*Krl.*tf+Frrz.*Krr.*tf+Fflz.*Kfl.*tr-Ffrz.*Kfr.*tr);
c=[];
ceq=[];
end