A paper has appeared as arXiv:2102.09502v1 by P. D. Dragnev, A. R. Legg, and R. Orive, called "On the best uniform polynomial approximation to the checkmark function." The problem considered in this paper is degree $n$ best polynomial approximation of the function $f(x) = |x-\alpha|$ on $[-1,1]$. The authors ask, how does the error $E_n(\alpha)$ depend on $\alpha$?

With Chebfun we can compute $E_n(\alpha)$ in a few lines of code. We do this here for $n = 1, 2, \dots , 7$.

tic
x = chebfun('x');
f = @(a) abs(x-a);
p = @(a,n) minimax(f(a),n);
e = @(a,n) norm(p(a,n)-f(a),inf);
chebfuneps 1e-6, splitting on
E = [];
for n = 1:7
en = chebfun(@(a) e(a,n),[0,1]);
en = newDomain(join(flipud(en),en),[-1 1]);
E = [E en];
end
chebfuneps factory, splitting off

Here is a plot for $n = 2$ and $3$, which matches Figure 1 of the paper.

red = [.9 0 0]; blue = [0 0 .9];
ax = axes; ax.ColorOrder = [red; blue]; hold on
plot(E(:,2:3)), grid on
xlabel('\alpha'), ylabel('E_n(\alpha)')
title('n = 2 and 3')

As a numerical check, let us look at the breakpoints in the curve for $n=3$:

[val,pos] = min(E(:,3),'local')
val =
-0.000001852321553
0.076583110838880
0.076583110838880
-0.000001852321553
pos =
-1.000000000000000
-0.487847794735245
0.487847794735245
1.000000000000000


Higher precision calculation suggests that they lie near $\pm 0.4804754$ and with an error of about $0.0763434$.

Here we plot all seven curves to match Figure 2 of Dragnev, et al.

close, ax = axes; ax.ColorOrder = [blue; red]; hold on
plot(E), grid on
xlabel('\alpha'), ylabel('E_n(\alpha)')
title('n = 1,2,...,7'), ylim([0 .5]), hold off

Unfortunately, although all this is very compact and natural for Chebfun, it is quite slow, because of the need to sample a function with "splitting on" that itself can only be evaluated slowly with the minimax command. This is why the Chebfun tolerance was loosened above to 1e-6. Here is the time required for this example:

toc
Elapsed time is 122.492424 seconds.