Skip to content

Instantly share code, notes, and snippets.

@diego898
Last active August 29, 2015 13:56
Show Gist options
  • Save diego898/8834557 to your computer and use it in GitHub Desktop.
Save diego898/8834557 to your computer and use it in GitHub Desktop.
clear all;
clc;
%% Parameters
cvx_expert true;
a = 3;
J = 5;
c1 = 1;
c2 = 2;
y = 2;
%% Original CVX Problem
cvx_begin quiet
variable f
variable Z
minimize(c1*(y-f*a)^2 + c2*(f*a)^2 - log(Z))
subject to
Z >= 0;
f*J == Z
cvx_end
f
Z
%% New CVX Problem
lambda = 10;
lim = 50;
% q(lambda)
for i = 1:lim
% solve J1
cvx_begin quiet
variable f_new
minimize(c1*(y-f_new*a)^2 + c2*(f_new*a)^2 + lambda*(f_new*J))
cvx_end
fnew(i) = f_new;
fopt(i) = c1*(y-f_new*a)^2 + c2*(f_new*a)^2 + lambda*(f_new*J);
% solve J2
cvx_begin quiet
variable Z_new
minimize(-log(Z_new) - lambda*Z_new)
subject to
Z_new >= 0;
cvx_end
znew(i) = Z_new;
zopt(i) = -log(Z_new) - lambda*Z_new;
% update lambda
cvx_begin quiet
variable lam
maximize(c1*(y-f_new*a)^2 + c2*(f_new*a)^2 -log(Z_new) - lam*Z_new + lam*(f_new*J))
cvx_end
lamm(i) = lam;
lopt(i) = c1*(y-f_new*a)^2 + c2*(f_new*a)^2 -log(Z_new) - lam*Z_new + lam*(f_new*J);
lambda = lam;
end
f_new
Z_new
lambda
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment