2 namespace interpolation{
153 copy = general.interpolation.KernelInterpol;
157 copy.kexp= this.kexp;
161 function [matrix<double>ai , matrix<double>nbase , usedcenteridx ] =
interpolate(fxi) {
165 c = zeros(size(fxi,1),N);
169 usedcenteridx = zeros(1,N);
171 res = sum(fresidual.^2,1);
172 [~, maxidx] = max(res);
173 col = this.kexp.getKernelMatrixColumn(maxidx);
174 tN = col - NV(:,1:m-1)*NV(maxidx,1:m-1)^
t;
175 tNnorm = sqrt(col(maxidx)-sumNsq(maxidx));
176 if max(res./fxin) < this.
RelTol || ~isreal(tNnorm) || tNnorm <= 0
182 c(:,m) = fresidual(:,maxidx)./tNnorm;
183 fresidual = fresidual - c(:,m)*(NV(:,m))^t;
184 sumNsq = sumNsq + (NV(:,m).^2)^t;
185 usedcenteridx(m) = maxidx;
187 usedcenteridx = usedcenteridx(1:m);
191 usedcenteridx =
sort(usedcenteridx,
" ascend ");
192 nbase = nbase(usedcenteridx,:);
193 if length(usedcenteridx) < N && nargout < 3
194 error(
" Less basis translates required than given, but their indices are not considered as output. Please receive the 'used' output and select the indicated subset as centers. ");
198 ai = (this.K\fxi
" ) ";
221 this.K= kexp.getKernelMatrix;
276 ke = kernels.KernelExpansion;
278 ke.Kernel= kernels.GaussKernel(.5);
279 internal_test(x,fx,
false);
280 internal_test(x,fx,
true);
282 internal_test(x,ones(size(x))*5,
false);
283 internal_test(x,ones(size(x))*5,
true);
285 ke.Kernel= kernels.InvMultiquadrics(-1.4,2);
286 internal_test(x,fx,
true);
287 internal_test(x,fx,
false);
289 ke.Kernel= kernels.InvMultiquadrics(-4,5);
290 internal_test(x,fx,
true);
291 internal_test(x,fx,
false);
294 fx = [fx; x.^3.*sin(.4*x)];
295 internal_test(x,fx,
true);
296 internal_test(x,fx,
false);
300 function internal_test(x,fx,lu)
304 ki = general.interpolation.KernelInterpol;
307 ki.UseNewtonBasis= lu;
310 [ke.Ma, ke.Base] = ki.interpolate(fxi);
312 fsvr = ke.evaluate(x);
314 h = pm.nextPlot(
" xx ",sprintf(
" Interpolation test with kernel %s, newton=%d ",
class(ke.Kernel),lu));
317 plot(h,x,fx(
k,:),
" r ");
319 plot(h,x,fsvr(
k,:),
" b-- ");
321 plot(h,xi,fxi(
k,:),
" .r ");
338 ke = kernels.KernelExpansion;
339 ke.Kernel= kernels.GaussKernel(1);
340 testfun = @(x)sinc(x) * 2 .*sin(3*x);
341 ke.Kernel= kernels.InvMultiquadrics(-1,1);
343 ki = general.interpolation.KernelInterpol;
345 hsteps = [.5:.25:2 2:2:10];
346 err = zeros(size(hsteps));
347 for n = 1:length(hsteps)
349 xi = range(1):h:range(2);
350 xi = xi + rand(size(xi))*max(xi)/100+.1;
353 x = range(1):h/realprec:range(2);
358 [ke.Ma, ke.Base, used] = ki.interpolate(fxi);
359 ke.Centers.xi= xi(:,used);
360 fint = ke.evaluate(x);
362 ax = pm.nextPlot([
" step " n],sprintf(
" h=%g ",h),
" x ",
" fx ");
363 plot(ax,xi,fxi,
" r. ",x,fx,
" r ",x,fint,
" b ");
364 err(n) = max(abs(fx-fint));
367 ax = pm.nextPlot(
" errors ",
" Error development over h sizes ",
" 1/h ",
" errors ");
369 semilogy(ax,hsteps,exp(log(h)./h),
" b ",hsteps,exp(-1./h),
" b-- ",hsteps,err,
" r ");
370 legend(ax,
" exp(log(h)/h) ",
" exp(-1/h) ",
" ||f-sfx||_\infty ");
Provides kernel interpolation.
Base class for any KerMor class.
static function test_KernelInterpolation()
Performs a test of this class.
sort
ort the handle objects in any array in ascending or descending order.
double RelTol
Maximum relative error tolerance (L2 in function dimension) over the given training data...
function registerProps(varargin)
Call this method at any class that defines DPCM observed properties.
PlotManager: Small class that allows the same plots generated by some script to be either organized a...
logical MultiTargetComputation
A flag that indicates to users if the coefficient computation method is capable of using a matrix of ...
function [ matrix< double > ai , matrix< double > nbase , usedcenteridx ] = interpolate(fxi)
Computes the kernel expansion coefficients .
static const SUCCESS
Algorithm terminated otherwisely successful.
logical LeaveOpen
Flag indicating if the plots should be left open once the PlotManager is deleted (as variable) ...
KerMorObject()
Constructs a new KerMor object.
logical UseNewtonBasis
Flag that indicates whether to apply the Newton basis for stable interpolation . Using this interpol...
Interface for kernel expansion coefficient computation.
function [ rowvec ci , integer svidx , sf ] = computeKernelCoefficients(rowvec< double > fxi, unused1)
Implementation of the kernels.ICoeffComp interface.
static function test_KernelInterpolationError()
static function rowvec< double > n = L2(matrix< double > x)
Returns the discrete norm for each column vector in x.
FileMatrix: File-based matrix which stores sets of columns in separate files.
Norm: Static class for commonly used norms on sets of vectors.
function init(kernels.KernelExpansion kexp)
% IKernelCoeffComp interface members Initializes the interpolation
KernelExpansion: Base class for state-space kernel expansions.
StopFlag: Flags that algorithms can use to specify the reason for their termination.