function [K,fval] = mink1(K0,bet0,m0,n0) % minimizes F(k) = Psi(k) - % we'll be using the smoothed version global bet m n a oneb sig m=m0; n=n0; bet = bet0; oneb = (bet > 0); %a = 1; sig = sign(K0); K = randn(size(bet))'; %K = graddesc(K,phi); for a=1:20 %for a=1 [K,fval] = fmincon(@myobj,K,[],[],[],[],0*K0,ones(size(K))); end return function y = myobj(K) global oneb y = F(K,oneb); return function f = F(K,bet) global m n sig f = spl(sum(sig.*K)) - bet*(sig.*K); return function nd = ndF(K,phi) nd = Ndiff('mylocF',1,{K,phi}); nd = nd(:); KND = [K nd] return function y = pl(x) global m n a y = x.*(x>0); return function y = spl(x) global m n a y = log(1+exp(a*x))/a; return function z = softmax(x,y) z = x + pl(y-x); return function S = Psi1(K,m,n) S1 = Psi( K,m,n); S2 = Psi(-K,m,n); S = softmax(S1,S2); return function S = Psi(K,m,n) S = 0; for t=1:n S = S + sum(pl(K)); K = getK1(K,m,n-t+1); end return function K = graddesc(K,phi) d = 1; mu = .95; del0 = zeros(size(K)); goN = 1; while goN %K = K/max(abs(K)); nd = ndF(K,phi); del = d*nd + mu*del0; %K = K - del*nd; K = K - del; del0 = del; N = sum(abs(nd)); goN = (N>0.0000001); f = F(K,phi); fprintf('F(k) = %1.9f \n',f); end return