matlab legend颜色不变,关于MATLAB画图中legend标注曲线颜色不匹配问题

本帖最后由 zhangxueqing 于 2017-3-26 16:36 编辑

谢谢!但是如果不放循环里,那么图形画不出来?

t_start= tic;

%Global constants and defaults

QUIET    = 0;

MAX_ITER = 1000;

ABSTOL   = 1e-5;

RELTOL   = 1e-3;

%Data preprocessing

[m, n] = size(A);

fprintf('(1) GADMM1 for lasso problem    \n');

% save a matrix-vector multiply

Atb = A'*b;

%ADMM solver

x = zeros(n,1);

z = zeros(n,1);

u = zeros(n,1);

I=eye(n);

% cache the factorization

[L U] = factor(A, rho1);

if ~QUIET

fprintf('%3s\t%10s\t%10s\t%10s\t%10s\t%10s\n', 'iter', ...

'r norm', 'eps pri', 's norm', 'eps dual', 'objective');

end

for k = 1:MAX_ITER

% x-update

q = Atb + rho1*(z + u);    % temporary value

if( m >= n )    % if skinny

x = U \ (L \ q);

else            % if fat

x = q/rho1 - (A'*(U \ ( L \ (A*q) )))/rho1^2;

end

% z-update with relaxation

zold = z;

z = shrinkage(alpha1*x+(1-alpha1)*zold-u, tau/rho1);

% u-update

u = u - (alpha1*x+(1-alpha1)*zold - z);

% diagnostics, reporting, termination checks

history.objval(k)  = objective(A, b, tau, x, z);

history.r_norm(k)  = norm(x - z);

history.s_norm(k)  = norm(-rho1*(z - zold));

history.eps_pri(k) = sqrt(n)*ABSTOL + RELTOL*max(norm(x), norm(-z));

history.eps_dual(k)= sqrt(n)*ABSTOL + RELTOL*norm(rho1*u);

if ~QUIET

fprintf('%3d\t%10.4f\t%10.4f\t%10.4f\t%10.4f\t%10.2f\n', k, ...

history.r_norm(k), history.eps_pri(k), ...

history.s_norm(k), history.eps_dual(k), history.objval(k));

end

if (history.r_norm(k) < history.eps_pri(k) && ...

history.s_norm(k) < history.eps_dual(k))

break;

end

end

if ~QUIET

toc(t_start);

end

h1=k;

y1=1/2*norm((A*x - b).^2) + tau*norm(z,1) ; %每步目标函数值

hold on

subplot(2,2,1)

H1=plot(h1,y1,'--.r','linewidth',2)

xlabel('Iteration')

ylabel('The objective function value (alpha=0.5)')

set(H1,'linestyle','-','color','b');

end

function p = objective(A, b, tau, x, z)

p = ( 1/2*norm((A*x - b).^2) + tau*norm(z,1) );

end

function z = shrinkage(x, kappa)

z = max( 0, x - kappa ) - max( 0, -x - kappa );

end

function [L U] = factor(A, rho1)

[m, n] = size(A);

if ( m >= n )    % if skinny

L = chol( A'*A + rho1*speye(n), 'lower' );

else            % if fat

L = chol( speye(m) + 1/rho1*(A*A'), 'lower' );

end

% force matlab to recognize the upper / lower triangular structure

L = sparse(L);

U = sparse(L');

end

2017-3-26 16:36 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

运行结果

4df0da88ae3e48a893bdbc0de92e6f7a.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值