Passing variable array in fmincon

7 views (last 30 days)
yuvi
yuvi on 11 Nov 2015
Commented: yuvi on 13 Nov 2015
Hi all,
I am trying to do a non linear optimization for a function which takes parameters and variables that come from my dataset.
function [q] = negloglike(x, e, c, G, spelldur1, j2u, j2j)
% e, c, G, spelldur1, j2u, j2j are variables from my data - all 2263 X 1 double arrays
%%lambda0 = x(3)
%lambda1 = x(1)
%delta = x(2)
a = x(1)/x(2)
b1 = 1 + a.*G
b2 = G + a.*G
F_emp = b2./b1
tempp = x(2) + x(1) - x(1).*F_emp
q1 = -e.*(log(x(3))-log(x(3) + x(2)) + (1-c) .*log(tempp) ...
- spelldur1.*tempp + j2u.*log(x(2)) - j2u.*log(tempp) + j2j.*log(x(1)) + ...
j2j.*log(1-F_emp) - j2j.*log(tempp)) - ...
(1-e).* (log(x(2)) - log(x(2) + x(3)) + (1-c).*log(x(3)) - spelldur1.* x(3))
q = sum(q1)
end
So, what I need is a negloglike as a function of just x, where then I can give initial values x = [0.1 0.1 0.1] and use fmincon to find the optimum values of parameter x.
Sorry if this is rudimentary. I am only a day old to Matlab! Thanks a lot in advance!
Yuvi

Answers (1)

Alan Weiss
Alan Weiss on 12 Nov 2015
You are doing well for just a day with MATLAB! All you need to do is set your objective function as the following function handle:
fun = @(x) negloglike(x, e, c, G, spelldur1, j2u, j2j)
The variables e, c, G, spelldur1, j2u, and j2j must already be in your workspace before you call this assignment. Then you can use fmincon to optimize fun. For more information, see Passing Extra Parameters.
Alan Weiss
MATLAB mathematical toolbox documentation
  1 Comment
yuvi
yuvi on 13 Nov 2015
Thanks Alan! This is exactly what I ended up doing. I created a m file for negloglike and then just called negloglike in my main script file.

Sign in to comment.

Categories

Find more on Problem-Based Optimization Setup 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!