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

6 visualizzazioni (ultimi 30 giorni)
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);

Risposte (0)

Categorie

Scopri di più su Linear Programming and Mixed-Integer Linear Programming in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by