Skip to content

Commit

Permalink
pathing fixes + optimization
Browse files Browse the repository at this point in the history
fabian.froehlich committed Jul 29, 2015
1 parent 7d5b504 commit a587fba
Showing 7 changed files with 312 additions and 307 deletions.
96 changes: 49 additions & 47 deletions build_sigma_noise.m
Original file line number Diff line number Diff line change
@@ -25,19 +25,23 @@

function [Sigma_noise,dSigma_noisedphi,ddSigma_noisedphidphi,dddSigma_noisedphidphidphi,ddddSigma_noisedphidphidphidphi] = build_sigma_noise(phi,Ym,s,Model,ind_y)

nt = size(Ym,1);
ny = size(Ym,2);
np = length(phi);

sigma_noise = Model.exp{s}.sigma_noise(phi);

if(size(sigma_noise,1) == size(Ym,1))
if(size(sigma_noise,1) == nt)
if(size(sigma_noise,2) == 1)
Sigma_noise = repmat(sigma_noise,[1,size(Ym,2)]);
elseif(size(sigma,2) == size(Ym,2))
Sigma_noise = repmat(sigma_noise,[1,ny]);
elseif(size(sigma,2) == ny)
Sigma_noise = sigma_noise;
else
error('Incompatible size of sigma_noise parametrisation!')
end
elseif(size(sigma_noise,2) == size(Ym,2))
elseif(size(sigma_noise,2) == ny)
if(size(sigma_noise,1) == 1)
Sigma_noise = repmat(sigma_noise,[size(Ym,1),1]);
Sigma_noise = repmat(sigma_noise,[nt,1]);
else
error('Incompatible size of sigma_noise parametrisation!')
end
@@ -49,34 +53,34 @@

if nargout >= 2 % first order derivatives
dsigma_noisedphi = Model.exp{s}.dsigma_noisedphi(phi);
dSigma_noisedphi = zeros(length(ind_y),length(phi));
dSigma_noisedphi = zeros(length(ind_y),np);

if(size(dsigma_noisedphi,1) == size(Ym,1))
if(size(dsigma_noisedphi,1) == nt)
if(size(dsigma_noisedphi,2) == 1)
dSNdphi = repmat(dsigma_noisedphi,[1,size(Ym,2),1]);
elseif(size(dsigma_noisedphi,2) == size(Ym,2))
dSNdphi = repmat(dsigma_noisedphi,[1,ny,1]);
elseif(size(dsigma_noisedphi,2) == ny)
dSNdphi = dsigma_noisedphi;
end
elseif(size(dsigma_noisedphi,2) == size(Ym,2))
elseif(size(dsigma_noisedphi,2) == ny)
if(size(dsigma_noisedphi,1) == 1)
dSNdphi = repmat(dsigma_noisedphi,[size(Ym,1),1,1]);
dSNdphi = repmat(dsigma_noisedphi,[nt,1,1]);
end
elseif(and(size(dsigma_noisedphi,1)==1,size(dsigma_noisedphi,2)==1))
dSNdphi = repmat(dsigma_noisedphi,[size(Ym),1]);
end

if nargout >= 3 % second order derivatives
ddsigma_noisedphidphi = Model.exp{s}.ddsigma_noisedphidphi(phi);
ddSigma_noisedphidphi = zeros(length(ind_y),length(phi),length(phi));
if(size(dsigma_noisedphi,1) == size(Ym,1))
ddSigma_noisedphidphi = zeros(length(ind_y),np,np);
if(size(dsigma_noisedphi,1) == nt)
if(size(dsigma_noisedphi,2) == 1)
ddSNdphidphi = repmat(ddsigma_noisedphidphi,[1,size(Ym,2),1,1]);
elseif(size(dsigma_noisedphi,2) == size(Ym,2))
ddSNdphidphi = repmat(ddsigma_noisedphidphi,[1,ny,1,1]);
elseif(size(dsigma_noisedphi,2) == ny)
ddSNdphidphi = ddsigma_noisedphidphi ;
end
elseif(size(dsigma_noisedphi,2) == size(Ym,2))
elseif(size(dsigma_noisedphi,2) == ny)
if(size(dsigma_noisedphi,1) == 1)
ddSNdphidphi = repmat(ddsigma_noisedphidphi,[size(Ym,1),1,1]);
ddSNdphidphi = repmat(ddsigma_noisedphidphi,[nt,1,1]);
end
elseif(and(size(dsigma_noisedphi,1)==1,size(dsigma_noisedphi,2)==1))
ddSNdphidphi = repmat(ddsigma_noisedphidphi,[size(Ym),1,1]);
@@ -85,16 +89,16 @@

if nargout >= 4 % third order derivatives
dddsigma_noisedphidphidphi = Model.exp{s}.dddsigma_noisedphidphidphi(phi);
dddSigma_noisedphidphidphi = zeros(length(ind_y),length(phi),length(phi),length(phi));
if(size(dsigma_noisedphi,1) == size(Ym,1))
dddSigma_noisedphidphidphi = zeros(length(ind_y),np,np,np);
if(size(dsigma_noisedphi,1) == nt)
if(size(dsigma_noisedphi,2) == 1)
dddSNdphidphidphi = repmat(dddsigma_noisedphidphidphi,[1,size(Ym,2),1,1,1]);
elseif(size(dsigma_noisedphi,2) == size(Ym,2))
dddSNdphidphidphi = repmat(dddsigma_noisedphidphidphi,[1,ny,1,1,1]);
elseif(size(dsigma_noisedphi,2) == ny)
dddSNdphidphidphi = dddsigma_noisedphidphidphi;
end
elseif(size(dsigma_noisedphi,2) == size(Ym,2))
elseif(size(dsigma_noisedphi,2) == ny)
if(size(dsigma_noisedphi,1) == 1)
dddSNdphidphidphi = repmat(dddsigma_noisedphidphidphi,[size(Ym,1),1,1,1]);
dddSNdphidphidphi = repmat(dddsigma_noisedphidphidphi,[nt,1,1,1]);
end
elseif(and(size(dsigma_noisedphi,1)==1,size(dsigma_noisedphi,2)==1))
dddSNdphidphidphi = repmat(dddsigma_noisedphidphidphi,[size(Ym),1,1,1]);
@@ -103,40 +107,38 @@

if nargout >= 5 % fourth order derivatives
ddddsigma_noisedphidphidphidphi = Model.exp{s}.ddddsigma_noisedphidphidphidphi(phi);
ddddSigma_noisedphidphidphidphi = zeros(length(ind_y),length(phi),length(phi),length(phi),length(phi));
if(size(dsigma_noisedphi,1) == size(Ym,1))
ddddSigma_noisedphidphidphidphi = zeros(length(ind_y),np,np,np,np);
if(size(dsigma_noisedphi,1) == nt)
if(size(dsigma_noisedphi,2) == 1)
ddddSNdphidphidphidphi = repmat(ddddsigma_noisedphidphidphidphi,[1,size(Ym,2),1,1,1]);
elseif(size(dsigma_noisedphi,2) == size(Ym,2))
ddddSNdphidphidphidphi = repmat(ddddsigma_noisedphidphidphidphi,[1,ny,1,1,1]);
elseif(size(dsigma_noisedphi,2) == ny)
ddddSNdphidphidphidphi = ddddsigma_noisedphidphidphidphi;
end
elseif(size(dsigma_noisedphi,2) == size(Ym,2))
elseif(size(dsigma_noisedphi,2) == ny)
if(size(dsigma_noisedphi,1) == 1)
ddddSNdphidphidphidphi = repmat(ddddsigma_noisedphidphidphidphi,[size(Ym,1),1,1,1]);
ddddSNdphidphidphidphi = repmat(ddddsigma_noisedphidphidphidphi,[nt,1,1,1]);
end
elseif(and(size(dsigma_noisedphi,1)==1,size(dsigma_noisedphi,2)==1))
ddddSNdphidphidphidphi = repmat(ddddsigma_noisedphidphidphidphi,[size(Ym),1,1,1]);
end
end

for k = 1:length(phi) % first order derivatives
temp = dSNdphi(:,:,k);
dSigma_noisedphi(:,k) = temp(ind_y);
if nargout >= 3 % second order derivatives
for l = 1:length(phi)
temp = ddSNdphidphi(:,:,k,l);
ddSigma_noisedphidphi(:,k,l) = temp(ind_y);
if nargout >= 4 % third order derivatives
for m = 1:length(phi)
temp = dddSNdphidphidphi(:,:,k,l,m);
dddSigma_noisedphidphidphi(:,k,l,m) = temp(ind_y);
if nargout >= 5 % fourth order derivatives
for n = 1:length(phi)
temp = ddddSNdphidphidphidphi(:,:,k,l,m,n);
ddddSigma_noisedphidphidphidphi(:,k,l,m,n) = temp(ind_y);
end
end
end
if nargout >= 2 % first order derivatives
I = ((1:np)-1)*numel(Ym);
ind_1 = bsxfun(@plus,ind_y,I);
dSigma_noisedphi = reshape(dSNdphi(ind_1(:)),[numel(ind_y),np]);
if nargout >= 3 % second order derivatives
II = bsxfun(@plus,I,permute(I*np,[1,3,2]));
ind_2 = bsxfun(@plus,ind_y,II);
ddSigma_noisedphidphi = reshape(ddSNdphidphi(ind_2(:)),[numel(ind_y),np,np]);
if nargout >= 4 % third order derivatives
III = bsxfun(@plus,II,permute(I*np^2,[1,3,4,2]));
ind_3 = bsxfun(@plus,ind_y,III);
dddSigma_noisedphidphidphi = reshape(dddSNdphidphidphi(ind_3(:)),[numel(ind_y),np,np,np]);
if nargout >= 5 % fourth order derivatives
IIII = bsxfun(@plus,III,permute(I*np^3,[1,3,4,5,2]));
ind_4 = bsxfun(@plus,ind_y,IIII);
ddddSigma_noisedphidphidphidphi = reshape(ddddSNdphidphidphidphi(ind_4(:)),[numel(ind_y),np,np,np,np]);
end
end
end
95 changes: 49 additions & 46 deletions build_sigma_time.m
Original file line number Diff line number Diff line change
@@ -26,17 +26,21 @@
function [Sigma_time,dSigma_timedphi,ddSigma_timedphidphi,dddSigma_timedphidphidphi,ddddSigma_timedphidphidphidphi] = build_sigma_time(phi,Tm,s,Model,ind_t)
sigma_time = Model.exp{s}.sigma_time(phi);

if(size(sigma_time,1) == size(Tm,1))
np = length(phi);
nt = size(Tm,1);
nr = size(Tm,2);

if(size(sigma_time,1) == nt)
if(size(sigma_time,2) == 1)
Sigma_time = repmat(sigma_time,[1,size(Tm,2)]);
elseif(size(sigma,2) == size(Tm,2))
Sigma_time = repmat(sigma_time,[1,nr]);
elseif(size(sigma,2) == nr)
Sigma_time = sigma_time;
else
error('Incompatible size of sigma_time parametrisation!')
end
elseif(size(sigma_time,2) == size(Tm,2))
elseif(size(sigma_time,2) == nr)
if(size(sigma_time,1) == 1)
Sigma_time = repmat(sigma_time,[size(Tm,1),1]);
Sigma_time = repmat(sigma_time,[nt,1]);
else
error('Incompatible size of sigma_time parametrisation!')
end
@@ -48,34 +52,34 @@

if nargout >= 2 % first order derivatives
dsigma_timedphi = Model.exp{s}.dsigma_timedphi(phi);
dSigma_timedphi = zeros(length(ind_t),length(phi));
dSigma_timedphi = zeros(length(ind_t),np);

if(size(dsigma_timedphi,1) == size(Tm,1))
if(size(dsigma_timedphi,1) == nt)
if(size(dsigma_timedphi,2) == 1)
dSTdphi = repmat(dsigma_timedphi,[1,size(Tm,2),1]);
elseif(size(dsigma_timedphi,2) == size(Tm,2))
dSTdphi = repmat(dsigma_timedphi,[1,nr,1]);
elseif(size(dsigma_timedphi,2) == nr)
dSTdphi = dsigma_timedphi;
end
elseif(size(dsigma_timedphi,2) == size(Tm,2))
elseif(size(dsigma_timedphi,2) == nr)
if(size(dsigma_timedphi,1) == 1)
dSTdphi = repmat(dsigma_timedphi,[size(Tm,1),1,1]);
dSTdphi = repmat(dsigma_timedphi,[nt,1,1]);
end
elseif(and(size(dsigma_timedphi,1)==1,size(dsigma_timedphi,2)==1))
dSTdphi = repmat(dsigma_timedphi,[size(Tm),1]);
end

if nargout >= 3 % second order derivatives
ddsigma_timedphidphi = Model.exp{s}.ddsigma_timedphidphi(phi);
ddSigma_timedphidphi = zeros(length(ind_t),length(phi),length(phi));
if(size(dsigma_timedphi,1) == size(Tm,1))
ddSigma_timedphidphi = zeros(length(ind_t),np,np);
if(size(dsigma_timedphi,1) == nt)
if(size(dsigma_timedphi,2) == 1)
ddSTdphidphi = repmat(ddsigma_timedphidphi,[1,size(Tm,2),1,1]);
elseif(size(dsigma_timedphi,2) == size(Tm,2))
ddSTdphidphi = repmat(ddsigma_timedphidphi,[1,nr,1,1]);
elseif(size(dsigma_timedphi,2) == nr)
ddSTdphidphi = ddsigma_timedphidphi ;
end
elseif(size(dsigma_timedphi,2) == size(Tm,2))
elseif(size(dsigma_timedphi,2) == nr)
if(size(dsigma_timedphi,1) == 1)
ddSTdphidphi = repmat(ddsigma_timedphidphi,[size(Tm,1),1,1]);
ddSTdphidphi = repmat(ddsigma_timedphidphi,[nt,1,1]);
end
elseif(and(size(dsigma_timedphi,1)==1,size(dsigma_timedphi,2)==1))
ddSTdphidphi = repmat(ddsigma_timedphidphi,[size(Tm),1,1]);
@@ -84,16 +88,16 @@

if nargout >= 4 % third order derivatives
dddsigma_timedphidphidphi = Model.exp{s}.dddsigma_timedphidphidphi(phi);
dddSigma_timedphidphidphi = zeros(length(ind_t),length(phi),length(phi),length(phi));
if(size(dsigma_timedphi,1) == size(Tm,1))
dddSigma_timedphidphidphi = zeros(length(ind_t),np,np,np);
if(size(dsigma_timedphi,1) == nt)
if(size(dsigma_timedphi,2) == 1)
dddSTdphidphidphi = repmat(dddsigma_timedphidphidphi,[1,size(Tm,2),1,1,1]);
elseif(size(dsigma_timedphi,2) == size(Tm,2))
dddSTdphidphidphi = repmat(dddsigma_timedphidphidphi,[1,nr,1,1,1]);
elseif(size(dsigma_timedphi,2) == nr)
dddSTdphidphidphi = dddsigma_timedphidphidphi;
end
elseif(size(dsigma_timedphi,2) == size(Tm,2))
elseif(size(dsigma_timedphi,2) == nr)
if(size(dsigma_timedphi,1) == 1)
dddSTdphidphidphi = repmat(dddsigma_timedphidphidphi,[size(Tm,1),1,1,1]);
dddSTdphidphidphi = repmat(dddsigma_timedphidphidphi,[nt,1,1,1]);
end
elseif(and(size(dsigma_timedphi,1)==1,size(dsigma_timedphi,2)==1))
dddSTdphidphidphi = repmat(dddsigma_timedphidphidphi,[size(Tm),1,1,1]);
@@ -102,42 +106,41 @@

if nargout >= 5 % fourth order derivatives
ddddsigma_timedphidphidphidphi = Model.exp{s}.ddddsigma_timedphidphidphidphi(phi);
ddddSigma_timedphidphidphidphi = zeros(length(ind_t),length(phi),length(phi),length(phi),length(phi));
if(size(dsigma_timedphi,1) == size(Tm,1))
ddddSigma_timedphidphidphidphi = zeros(length(ind_t),np,np,np,np);
if(size(dsigma_timedphi,1) == nt)
if(size(dsigma_timedphi,2) == 1)
ddddSTdphidphidphidphi = repmat(ddddsigma_timedphidphidphidphi,[1,size(Tm,2),1,1,1]);
elseif(size(dsigma_timedphi,2) == size(Tm,2))
ddddSTdphidphidphidphi = repmat(ddddsigma_timedphidphidphidphi,[1,nr,1,1,1]);
elseif(size(dsigma_timedphi,2) == nr)
ddddSTdphidphidphidphi = ddddsigma_timedphidphidphidphi;
end
elseif(size(dsigma_timedphi,2) == size(Tm,2))
elseif(size(dsigma_timedphi,2) == nr)
if(size(dsigma_timedphi,1) == 1)
ddddSTdphidphidphidphi = repmat(ddddsigma_timedphidphidphidphi,[size(Tm,1),1,1,1]);
ddddSTdphidphidphidphi = repmat(ddddsigma_timedphidphidphidphi,[nt,1,1,1]);
end
elseif(and(size(dsigma_timedphi,1)==1,size(dsigma_timedphi,2)==1))
ddddSTdphidphidphidphi = repmat(ddddsigma_timedphidphidphidphi,[size(Tm),1,1,1]);
end
end

for k = 1:length(phi) % first order derivatives
temp = dSTdphi(:,:,k);
dSigma_timedphi(:,k) = temp(ind_t);
if nargout >= 2 % first order derivatives
I = ((1:np)-1)*numel(Tm);
ind_1 = bsxfun(@plus,ind_t,I);
dSigma_timedphi = reshape(dSTdphi(ind_1(:)),[numel(ind_t),np]);
if nargout >= 3 % second order derivatives
for l = 1:length(phi)
temp = ddSTdphidphi(:,:,k,l);
ddSigma_timedphidphi(:,k,l) = temp(ind_t);
if nargout >= 4 % third order derivatives
for m = 1:length(phi)
temp = dddSTdphidphidphi(:,:,k,l,m);
dddSigma_timedphidphidphi(:,k,l,m) = temp(ind_t);
if nargout >= 5 % fourth order derivatives
for n = 1:length(phi)
temp = ddddSTdphidphidphidphi(:,:,k,l,m,n);
ddddSigma_timedphidphidphidphi(:,k,l,m,n) = temp(ind_t);
end
end
end
II = bsxfun(@plus,I,permute(I*np,[1,3,2]));
ind_2 = bsxfun(@plus,ind_t,II);
ddSigma_timedphidphi = reshape(ddSTdphidphi(ind_2(:)),[numel(ind_t),np,np]);
if nargout >= 4 % third order derivatives
III = bsxfun(@plus,II,permute(I*np^2,[1,3,4,2]));
ind_3 = bsxfun(@plus,ind_t,III);
dddSigma_timedphidphidphi = reshape(dddSTdphidphidphi(ind_3(:)),[numel(ind_t),np,np,np]);
if nargout >= 5 % fourth order derivatives
IIII = bsxfun(@plus,III,permute(I*np^3,[1,3,4,5,2]));
ind_4 = bsxfun(@plus,ind_t,IIII);
ddddSigma_timedphidphidphidphi = reshape(ddddSTdphidphidphidphi(ind_4(:)),[numel(ind_t),np,np,np,np]);
end
end
end
end

end
128 changes: 55 additions & 73 deletions complete_model.m

Large diffs are not rendered by default.

37 changes: 25 additions & 12 deletions logL_CE_w_grad_2.m
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@
% moment-approximation schemes to the solution of population balance
% equations. The likelihood function allows for the parallel estimation of
% parameters from multiple different experimental setups/conditions
%
%
% USAGE:
% ======
% [logL,dlogLdxi,ddlogLdxidxi = logL_CE_w_grad_2(xi,Data,Model,options)
@@ -44,7 +44,7 @@
% Model ... model definition ideally generated via make_model and
% complete_model. must have the following fields
% .type_D ... string specifying the parametrisation of the covariance
% matrix for the random effects. either
% matrix for the random effects. either
% 'diag-matrix-logarithm' for diagonal matrix with log. paramet. or
% 'matrix-logarithm' for full matrix with log. paramet. or
% .integration ... flag indicating whether integration for classical
@@ -127,18 +127,18 @@
% .dphidb
% .ddphidbetadbeta
% .ddphidbdbeta
% .ddphidbdb
% .ddphidbdb
% options ... option struct with the following options
% .tau_update ... minimum number of second which must pass before the
% .tau_update ... minimum number of second which must pass before the
% plots are updated
% .plot ... flag whether the function should plot either
% 0 ... no plots
% 1 ... all plots (default)
% extract_flag ... flag indicating whether the values of random effect
% parameters are to be extracted (only for SCTL data)
% 0 ... no extraction (default)
% 1 ... extraction
%
% 1 ... extraction
%
%
% Outputs:
% ========
@@ -158,7 +158,7 @@
% parameter
% (otherwise)
% B_SP ... location of sigma-points
%
%
% 2015/04/14 Fabian Froehlich

function varargout = logL_CE_w_grad_2(varargin)
@@ -228,7 +228,7 @@

[D,invD,dDddelta,dinvDddelta,ddDddeltaddelta,ddinvDddeltaddelta] = xi2D(delta,type_D);

% debugging:
% debugging:
% [g,g_fd_f,g_fd_b,g_fd_c] = testGradient(delta,@(x) xi2D(x,type_D),1e-4,1,3)
% [g,g_fd_f,g_fd_b,g_fd_c] = testGradient(delta,@(x) xi2D(x,type_D),1e-4,3,5)
% [g,g_fd_f,g_fd_b,g_fd_c] = testGradient(delta,@(x) xi2D(x,type_D),1e-4,2,4)
@@ -260,6 +260,11 @@
Sim_SCTL.T = nan(size(Data{s}.SCTL.T));
Sim_SCTL.R = nan(size(Data{s}.SCTL.T));

% set default scaling
if(~isfield(Model,'SCTLscale'))
Model.SCTLscale = 1;
end

% load values from previous evaluation as initialisation
if logL_old == -inf
bhat_0 = zeros(length(Model.exp{s}.ind_b),size(Data{s}.SCTL.Y,3));
@@ -292,7 +297,7 @@
end

parfor i = 1:size(Data{s}.SCTL.Y,3)

% Load single-cell data
Ym_si = Data{s}.SCTL.Y(ind_time,:,i);
ind_y = find(~isnan(Ym_si));
@@ -374,7 +379,7 @@
else
[Y_si,T_si,R_si,dY_sidphi,dT_sidphi,dR_sidphi,ddY_sidphidphi,ddT_sidphidphi,ddR_sidphidphi] = simulate_trajectory(t_s,phi_si,Model,Data{s}.condition,s,ind_t,ind_y);
end

% Construct sigma
if(nderiv<2)
[Sigma_noise_si] = build_sigma_noise(phi_si,Ym_si,s,Model,ind_y);
@@ -495,7 +500,7 @@
dJ_bdxi = chainrule(dJ_bdb,dbdxi) + chainrule(pdJ_bpddelta,ddeltadxi);

dlogLi_Ddxi(:,i) = - transpose(dJ_Ddxi);
dlogLi_Tdxi(:,i) = - transpose(dJ_Tdxi);
dlogLi_Tdxi(:,i) = - transpose(dJ_Tdxi);
dlogLi_bdxi(:,i) = - transpose(dJ_bdxi);

if(Model.integration)
@@ -653,7 +658,7 @@
end
end
end

logL = logL + Model.SCTLscale*sum(logLi_D + logLi_T + logLi_b + logLi_I,2);
if nderiv > 1
dlogLdxi = dlogLdxi + Model.SCTLscale*sum(dlogLi_Ddxi + dlogLi_Tdxi + dlogLi_bdxi + dlogLi_Idxi,2);
@@ -662,6 +667,14 @@
end
end

if(~isfield(Model,'shr_fun'))
if Model.penalty > 3
error('Shrinkage Function is missing! please provide Model.shr_fun')
else
Model.shr_fun = 0;
end
end

if(Model.penalty)
% parameter penalization terms
% logL_s = log(p(mu_S,S_s|b_s,D))
4 changes: 4 additions & 0 deletions objective_SCTL_s1.m
Original file line number Diff line number Diff line change
@@ -139,6 +139,10 @@
end

% event model
if(~isfield(Model.exp{s},'time_model'))
Model.exp{s}.time_model = 'normal';
end

switch(Model.exp{s}.time_model)
case 'normal'
if nargout <= 1
3 changes: 2 additions & 1 deletion optimize_SCTL_si.m
Original file line number Diff line number Diff line change
@@ -41,9 +41,10 @@
options_fmincon = optimset('algorithm','trust-region-reflective',...
'display','off',...
'GradObj','on',...
'MaxIter',1000,... % 1000%'display','iter',...
'MaxIter',1000,... %'display','iter',...
'TolFun',0,...
'TolX',1e-10,...
'PrecondBandWidth',Inf,...
'Hessian','user-supplied');

[bhat,~,~,~,~,~,~] = fmincon(...
256 changes: 128 additions & 128 deletions penal_param.m

Large diffs are not rendered by default.

0 comments on commit a587fba

Please sign in to comment.