Permalink
Browse files

starting code for computing Lebesgue constant

  • Loading branch information...
Tim Warburton Tim Warburton
Tim Warburton authored and Tim Warburton committed Sep 7, 2016
1 parent e9a25c5 commit 50c09d1bc78762bbe397254308c99ca0b293c1ff
Showing with 127 additions and 0 deletions.
  1. +58 −0 Lebesgue2D/DerivLebesgue2D.m
  2. +54 −0 Lebesgue2D/Lebesgue2D.m
  3. +15 −0 Lebesgue2D/lebfn2d.m
@@ -0,0 +1,58 @@
function maxleb = Lebesgue2D(N, r, s, Nsamples, Nlevels)
V = Vandermonde2D(N, r, s);
[Dr,Ds] = Dmatrices2D(N, r, s, V);
maxleb = norm(Dr);
return
lcoeffs = inv(V);
M = Nsamples;
% randomly sample lebesgue function
L1 = rand(M,1);
L2 = rand(M,1);
L3 = 1-L1-L2;
ids = find(L3>0);
L1 = L1(ids);
L2 = L2(ids);
L3 = L3(ids);
h = 1;
for cnt=1:Nlevels
f = derivlebfn2d(N, lcoeffs, L1, L2, L3);
[fsort, ids] = sort(-f);
ids = ids(1:(M/5));
L1 = L1(ids);
L2 = L2(ids);
L3 = L3(ids);
% now perturb again
h = h/2;
L1new = L1*ones(1, 20) + h*(2*rand(length(L1),20)-1);
L2new = L2*ones(1, 20) + h*(2*rand(length(L2),20)-1);
L3new = 1-L1new-L2new;
L1 = [L1(1:100);L1new(:)];
L2 = [L2(1:100);L2new(:)];
L3 = [L3(1:100);L3new(:)];
ids = find( (L1+L2+L3)<=1 & L1>=0 & L2>=0 & L3>=0);
L1 = L1(ids);
L2 = L2(ids);
L3 = L3(ids);
end
f = derivlebfn2d(N, lcoeffs, L1, L2, L3);
[fsort, ids] = sort(-f);
ids = ids(1);
maxleb = f(ids(1))
View
@@ -0,0 +1,54 @@
function maxleb = Lebesgue2D(N, r, s, Nsamples, Nlevels)
V = Vandermonde2D(N, r, s);
lcoeffs = inv(V);
M = Nsamples;
% randomly sample lebesgue function
L1 = rand(M,1);
L2 = rand(M,1);
L3 = 1-L1-L2;
ids = find(L3>0);
L1 = L1(ids);
L2 = L2(ids);
L3 = L3(ids);
h = 1;
for cnt=1:Nlevels
f = lebfn2d(N, lcoeffs, L1, L2, L3);
[fsort, ids] = sort(-f);
ids = ids(1:(M/5));
L1 = L1(ids);
L2 = L2(ids);
L3 = L3(ids);
% now perturb again
h = h/2;
L1new = L1*ones(1, 20) + h*(2*rand(length(L1),20)-1);
L2new = L2*ones(1, 20) + h*(2*rand(length(L2),20)-1);
L3new = 1-L1new-L2new;
L1 = [L1(1:100);L1new(:)];
L2 = [L2(1:100);L2new(:)];
L3 = [L3(1:100);L3new(:)];
ids = find( (L1+L2+L3)<=1 & L1>=0 & L2>=0 & L3>=0);
L1 = L1(ids);
L2 = L2(ids);
L3 = L3(ids);
end
f = lebfn2d(N, lcoeffs, L1, L2, L3);
[fsort, ids] = sort(-f);
ids = ids(1);
maxleb = f(ids(1))
View
@@ -0,0 +1,15 @@
function f = lebfn2d(N, lcoeffs, L1, L2, L3)
X = -1*L2 + 1*L3 + -1*L1;
Y = -1*L2 + -1*L3 + 1*L1;
vdm = Vandermonde2D(N, X, Y);
fn = vdm*lcoeffs;
f = sum(abs(fn'));

0 comments on commit 50c09d1

Please sign in to comment.