# Problem 1.7

basic meshfree interpolation with Gaussian RBFs

## (a) interpolation

% constructing the interpolant
f = @(x) 4*x.*(1-x);
phi = @(ep,r) exp(-(ep*r).^2); ep = 1;
N = 5;
X = linspace(0,1,N)';
y = f(X);
D = phi(ep, distm(X,X));
c = D\y;
% evaluating it
M = 50;
X_eval = linspace(0,1,M)';
D_eval = phi(ep,distm(X_eval,X));
y_eval = D_eval*c;
% plotting the function and its interpolant
clf; plot(X,0,'bo',X_eval,f(X_eval)); hold on
plot(X_eval,y_eval,'rx-'); xlabel('x'); ylabel('f,P_f')


## (b) comparison with euclidean basis functions

ep = 12;
M = 1000;
X_eval = linspace(0,1,M)';
N = logspace(1,2.8,20);
for k=1:20,
X = linspace(0,1,N(k))';
y = f(X);
D1 = distm(X,X); c1 = D1\y;
D2 = phi(ep,distm(X,X)); c2 = D2\y;
D_eval1 = distm(X_eval,X);
D_eval2 = phi(ep,distm(X_eval,X));
err_1(k) = norm(D_eval1*c1 - f(X_eval))/sqrt(M);
err_2(k) = norm(D_eval2*c2 - f(X_eval))/sqrt(M);
end
clf; loglog(N,err_1,'o-',N,err_2,'ro-');
xlabel('N'); ylabel('errors'); legend('euclidean distance RBFs','Gaussian RBFs')

Warning: Matrix is close to singular or
inaccurate. RCOND =  3.474898e-17.
Warning: Matrix is close to singular or
inaccurate. RCOND =  1.407670e-17.
Warning: Matrix is close to singular or
inaccurate. RCOND =  5.075618e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  2.028118e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  8.507393e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  3.709260e-20.
Warning: Matrix is close to singular or
inaccurate. RCOND =  1.202834e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  4.077956e-20.
Warning: Matrix is close to singular or
inaccurate. RCOND =  3.166924e-20.
Warning: Matrix is close to singular or
inaccurate. RCOND =  2.474070e-20.
Warning: Matrix is close to singular or
inaccurate. RCOND =  6.424456e-20.
Warning: Matrix is close to singular or
inaccurate. RCOND =  4.611902e-20.


## (c) error of Gaussian RBF interpolant in dependence of the shape parameter

N = 2^5; X = linspace(0,1,N)';
Dp = distm(X,X);
y = f(X);
X_eval = linspace(0,1,200)';
Dp_eval = distm(X_eval,X);
ep = logspace(-1,1.4,40);
for k = 1:40,
D = phi(ep(k),Dp);
c = D\y;
D_eval = phi(ep(k),Dp_eval);
err(k) = norm(D_eval*c - f(X_eval))/sqrt(M);
end
clf; semilogy(ep,err,'o-');
xlabel('\epsilon'); ylabel('error');

Warning: Matrix is close to singular or
inaccurate. RCOND =  1.370040e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  3.131817e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  3.574753e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  4.025069e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  1.113248e-20.
Warning: Matrix is close to singular or
inaccurate. RCOND =  9.176172e-20.
Warning: Matrix is close to singular or
inaccurate. RCOND =  2.530126e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  8.833138e-20.
Warning: Matrix is close to singular or
inaccurate. RCOND =  1.490829e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  2.393086e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  3.052386e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  3.709531e-20.
Warning: Matrix is close to singular or
inaccurate. RCOND =  2.976987e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  5.095278e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  1.794570e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  4.792528e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  1.101763e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  1.012590e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  2.308580e-20.
Warning: Matrix is close to singular or
inaccurate. RCOND =  1.794831e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  2.542761e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  1.090377e-18.
Warning: Matrix is close to singular or
inaccurate. RCOND =  6.881811e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  1.569937e-18.
Warning: Matrix is close to singular or
inaccurate. RCOND =  1.167608e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  5.569164e-19.
Warning: Matrix is close to singular or
inaccurate. RCOND =  1.849779e-18.
Warning: Matrix is close to singular or