LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
psfit_hyperexp.m
1function [MAP,Eapx] = psfit_hyperexp(E,n)
2%% initial point
3x0 = rand(1,2*n); x0(1:n)=x0(1:n)/sum(x0(1:n));
4%% optimization
5global MAXITER;
6global MAXCHECKITER;
7global T0;
8MAXITER=100;
9MAXCHECKITER=1000;
10TOL=1e-8;
11EPSTOL=100*TOL;
12options=optimset( 'Display','off', 'LargeScale','off','MaxIter',MAXITER, 'MaxFunEvals',1e10, ...
13 'MaxSQPIter',500, 'TolCon',TOL, 'Algorithm', 'interior-point', 'OutputFcn', psfit_hyperexp_outfun);
14T0 = tic; % needed for outfun
15
16%% optimization program
17[x, f]=fmincon(@objfun,x0,[],[],[],[],x0*0+EPSTOL,[],@nnlcon,options);
18[alpha,T] = topar(x);
19MAP = {T,-T*ones(n,1)*alpha};
20 function [alpha,T] = topar(x)
21 alpha = x(1:n);
22 T = diag(-1./(x((n+1):2*n)));
23 end
24
25 function [c,ceq] = nnlcon(x)
26 [alpha,T] = topar(x);
27 c = - alpha;
28 ceq = sum(alpha) - 1;
29 end
30
31 function f = objfun(x)
32 [alpha,T] = topar(x);
33 for j=1:length(E)
34 Eapx(j)=factorial(j)*alpha*(-inv(T)^j)*ones(n,1);
35 end
36 f = norm(log(E)-log(Eapx),1);
37 end
38
39
40end