Azzera filtri
Azzera filtri

Question of fmincon

1 visualizzazione (ultimi 30 giorni)
Tommy
Tommy il 27 Mar 2012
I want to minimize a utility function which contain loops in it via using fmincon, but the command window shows error of "NONLCON must be a function". I wish someone could read the code following, point out the error and show the way to correct it. Thanks a lot.
function f=function_1_2(x)
r0=.02;
sigma=.04;
gamma=5;
delta=.4;
mu0=.06;
N=60;
T=60;
dt=T/N;
R=40;
A0=50;
p=.16;
b=.7;
utility0=0;
asset=A0*ones(1,N+1);
L=A0;
b0=b*ones(1,N+1);
contri=p;
S=0*ones(1,N+1);
r=r0;
mu=mu0;
utility=utility0*ones(1,N+1);
t=0:dt:T;
for j=1:N
S(1,j)=asset(1,j)-L;
contri(1,j)=x(1)-x(2)*S(1,j)/R;
asset(1,j+1)=asset(1,j)+((asset(1,j).*(r+x(3)*(mu-r)))+40*contri(1,j)-15*b0(1,j))*dt+x(2)*sigma*asset(1,j)*sqrt(dt).*randn(1);
if j<R
C(1,j)=ones(1,1)-(contri(1,j)-x(1)*S(1,j)/R);
elseif j>=R & j<=N
C(1,j)=b;
end
utility(1,j+1)=utility(1,j)+exp(-delta*j)*(C(1,j).^(1-gamma))/(1-gamma);
end
f=(-1)*mean(utility(1,N+1))
And the fmincon function is:
clear
clc
%%lower bound
lb=zeros(3,1);lb(2)=.02;
%%upper bound
ub=inf(3,1);ub(2)=1;ub(3)=1;
%%start point
x0=[0,0.02,0];
%%optimize the utility function
[x,fval]=fmincon(@function_1_2,x0,[],[],[],[],[],[],lb,ub)

Risposta accettata

Walter Roberson
Walter Roberson il 27 Mar 2012
The lower bound and upper bound should be the 7th and 8th arguments, but you have them as the 9th and 10th arguments.
Somewhere in there you have two too many []

Più risposte (0)

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by