[For comparison only] 2D Moreau envelope, brute force computation
M = pl_me_brute_2d(Xr,Xc,f,Sr,Sc)
column vector of length n.
column vector of length m.
matrix of size nxm. The function f is sampled on a grid Xr x Xc so f(i,j)=fu(Xr(i),Xc(j)) for some function fu.
column vector of size m1.
column vector of size m2. The Moreau envelope is computed on a grid SrxSc.
matrix of size m1xm2 containing the Moreau envelope of the function f.
Warning: This function is provided only for comparison purposes and unit testing, use more efficient linear-time algorithms for faster computation.
Compute numerically the discrete Moreau envelope of a set of spatial points (Xr(i1),Xc(i2),f(i1,i2)) at slopes (Sr(j1),Sc(j2)), i.e.
2 2 M(j1,j2) = min [ f(i1,i2) + (Sr(j1) - Xr(i1) + (Sc(j2) - Xc(i2)) ]. i1,i2 | ![]() | ![]() |
function f=f(lambda, x),f=lambda * x.^2,endfunction function g=g(lambda1, lambda2, x, y),g=f(lambda1,x)+f(lambda2,y),endfunction lambda1=1;lambda2=2; x1=(-10:10)';x2=(-5:5)'; [X, Y]=ndgrid(x1,x2);F=g(lambda1,lambda2,X,Y); s1=(-4:4)';s2=(-5:6)'; Xr=x1;Xc=x2;Sr=s1;Sc=s2; desired=pl_me_brute_2d(x1,x2,F,s1,s2); //1d computation for separable function Ms1=pl_me_direct(x1,f(lambda1,x1),s1); Ms2=pl_me_direct(x2,f(lambda2,x2),s2); t1 = Ms1 * ones(1,size(Ms2,1)); t2 = ones(size(Ms1,1),1) * Ms2'; correct=t1+t2; b = and(correct == desired); | ![]() | ![]() |
Yves Lucet
, University of British Columbia, BC, Canada