Error using barrier Finite difference derivatives at initial point contain Inf or NaN values. Fmincon cannot continue.

6 views (last 30 days)
I am trying to solve optimization problem with constraints.
I need to find those values of variable 'u' at which the 'costfunctionalone' reachs a minimum.
I am using the fmincon function for that.
Unfortinetly, I get the error (Error using barrier Finite difference derivatives at initial point contain Inf or NaN values. Fmincon cannot continue) when starting the program.
What is the cose of that error? And how can I correct it?
clear all ;clc; close all;
%establish the prediction horizon "T", time step "tsample" and Number of simulation steps:
T= 0.6860;
tsample=T/10;
Nsim=1200;
Nfinal=tsample*Nsim;
%establish the weight matrixes:
Q=100;
Qx=1000000; Qy=100; Qz=100;
R=1;
T1=0.275;
T2=0.025;
A=[0 1;-1/T2 -T1/T2];
B=[0 1];
%establish the initial control unputs guesses:
u0=[1; 2; 3; 4; 5; 6; 7; 8; 9; 10 ]';
q0 = [pi/3 20];
q4_save=zeros(1,Nsim);
v4_save=zeros(1,Nsim);
u4_save=zeros(1,Nsim);
t_save=zeros(1,Nsim);
Mmax=310;
I=0.3;
for t=0:tsample:Nfinal
i=round(t/tsample+1);
tspan = [tsample*(i-1) tsample*(i-1)+T];
prov=0;
p=0;
for t1=t:tsample:t+9*tsample
f = @(u)costfunctionalone(t1,T,Qx,R,u,tsample,q0,A,B,tspan,i);
%find optimal inputs "u", minimizimg the functional "J":
options = optimoptions(@lsqnonlin,'Algorithm','levenberg-marquardt',...
'MaxFunctionEvaluations',1500)
[u,fval,exitflag,output,lambda,grad,hessian]=fmincon(f,u0,[],[],[],[],[-Mmax/I],[Mmax/I],@confunone,options)
u0=u;
p=prov;
end
%%
function J = costfunctionalone(t1,T,Qx,R,u,tsample,q0,A,B,tspan,i)
T1=0.275; T2=0.025;
if ((t1 >=0+(i-1)*tsample)&&(t1 < tsample+(i-1)*tsample))
u=u(:,1);
prov=1;
elseif ((t1 >=tsample+(i-1)*tsample)&&(t1 < 2*tsample+(i-1)*tsample))
u=u(:,2);
prov=2;
elseif ((t1 >=2*tsample+(i-1)*tsample)&&(t1 < 3*tsample+(i-1)*tsample))
u=u(:,3);
prov=3;
elseif ((t1 >=3*tsample+(i-1)*tsample)&&(t1 < 4*tsample+(i-1)*tsample))
u=u(:,4);
prov=4;
elseif ((t1 >=4*tsample+(i-1)*tsample)&&(t1 < 5*tsample+(i-1)*tsample))
u=u(:,5);
prov=5;
elseif ((t1 >=5*tsample+(i-1)*tsample)&&(t1 < 6*tsample+(i-1)*tsample))
u=u(:,6);
prov=6;
elseif ((t1 >=6*tsample+(i-1)*tsample)&&(t1 < 7*tsample+(i-1)*tsample))
u=u(:,7);
prov=7;
elseif ((t1 >=7*tsample+(i-1)*tsample)&&(t1 < 8*tsample+(i-1)*tsample))
u=u(:,8);
prov=8;
elseif ((t1 >=8*tsample+(i-1)*tsample)&&( t1 < 9*tsample+(i-1)*tsample))
u=u(:,9);
prov=9;
elseif ((t1 >=9*tsample+(i-1)*tsample )&&( t1 <= 10*tsample+(i-1)*tsample) )
u=u(:,10);
prov=10;
end
%%
b=0.275;
a=0.025;
sq=(-4*a+b^2)^0.5;
k=@(t1)t1/(2*a);
CC3=@(u)-u*( b+sq )/(2*sq);
CC4=@(u)-CC3(u)-u;
C1=@(t1,u)CC3(u)*exp( k(t1)*(-b+sq) );
C2=@(t1,u)CC4(u)*exp( k(t1)*(-b-sq) );
eq=@(t1,u)C1(t1,u)+C2(t1,u)+5-pi/2;
CF=@(t1,u)(eq(t1,u)'*Qx*eq(t1,u) + u'*R*u);
J=integral(@(t1)CF(t1,u),0,T,'ArrayValued',true);

Answers (0)

Categories

Find more on Linear Programming and Mixed-Integer Linear Programming in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!