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

6 次查看(过去 30 天)
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);

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Linear Programming and Mixed-Integer Linear Programming 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by