source: trunk/src/tps_eval_dxy.m @ 458

Last change on this file since 458 was 434, checked in by sommeria, 12 years ago

corrections in the use of get_field
test_tps introduced, to test thin plate shell functions
tps-eval_dxy corrected (bug on the calculation of the derivatives fixed)

File size: 2.0 KB
1%'tps_eval_dxy': calculate the derivatives of thin plate spline (tps) interpolation at a set of points (limited to the 2D case)
3% function [DMX,DMY] = tps_eval_dxy(dsites,ctrs)
6%     DMX: Mx(N+3) matrix representing the contributions to the X
7%     derivatives at the M sites from unit sources located at each of the N
8%     centers, + 3 columns representing the contribution of the linear gradient part.
9%     DMY: idem for Y derivatives
11% INPUT:
12%   dsites: M x s matrix of interpolation site coordinates (s=space dimension=2 here)
13%   ctrs: N x s matrix of centre coordinates (initial data)
15% related functions:
16% tps_coeff, tps_eval
18  function [DMX,DMY] = tps_eval_dxy(dsites,ctrs)
19  %%  matrix declarations
20  [M,s] = size(dsites); [N,s] = size(ctrs);
21  Dsites=zeros(M,N);
22  DM = zeros(M,N);
23 % DMXY = zeros(M,N+1+s);
25  %% Accumulate sum of squares of coordinate differences
26  % The ndgrid command produces two MxN matrices:
27  %   Dsites, consisting of N identical columns (each containing
28  %       the d-th coordinate of the M interpolation sites)
29  %  Ctrs, consisting of M identical rows (each containing
30  %       the d-th coordinate of the N centers)
32[Dsites,Ctrs] = ndgrid(dsites(:,1),ctrs(:,1));%d coordinates of interpolation points (Dsites) and initial points (Ctrs)
33DX=Dsites-Ctrs;% set of x wise distances between sites and centres
34[Dsites,Ctrs] = ndgrid(dsites(:,2),ctrs(:,2));%d coordinates of interpolation points (Dsites) and initial points (Ctrs)
35DY=Dsites-Ctrs;% set of y wise distances between sites and centres
36DM = DX.*DX + DY.*DY;% add d component squared
38 %% calculate matrix of tps derivatives
39DM(DM~=0) = log(DM(DM~=0))+1; %=2 log(r)+1 derivative of the tps r^2 log(r)
41DMX=[DX.*DM zeros(M,1)  ones(M,1) zeros(M,1)];% effect of mean gradient
42DMY=[DY.*DM zeros(M,1)  zeros(M,1) ones(M,1)];% effect of mean gradient
Note: See TracBrowser for help on using the repository browser.