Univariate S2FunHarmonic

Contents

Defining a S2FunHarmonic

Definition via function values

At first you need some vertices

nodes = equispacedS2Grid('points', 1e5);
nodes = nodes(:);

Next you define function values for the vertices

y = smiley(nodes);

Now the actual command to get sF1 of type S2FunHarmonic

sF1 = interp(nodes, y, 'harmonicApproximation')
 
sF1 = S2FunHarmonic  
 bandwidth: 224
 antipodal: true

For the same result you could also run S2FunHarmonic.approximation(nodes, y) and give some additional options (see here).

Definition via function handle

If you have a function handle for the function you could create a S2FunHarmonic via quadrature. At first lets define a function handle which takes vector3d as an argument and returns double:

f = @(v) 0.1*(v.theta+sin(8*v.x).*sin(8*v.y));

Now you can call the quadrature command to get sF2 of type S2FunHarmonic

sF2 = S2FunHarmonic.quadrature(f, 'bandwidth', 50)
 
sF2 = S2FunHarmonic  
 bandwidth: 50

Definition via Fourier-coefficients

If you already know the Fourier-coefficients, you can simply hand them as a column vector to the constructor of S2FunHarmonic

fhat = rand(25, 1);
sF3 = S2FunHarmonic(fhat)
 
sF3 = S2FunHarmonic  
 bandwidth: 4

Operations

The idea of S2Fun is to calculate with functions like Matlab does with vectors and matrices.

Basic arithmetic operations

addition/subtraction

sF1+sF2; sF1+2;
sF1-sF2; sF2-4;

multiplication/division

sF1.*sF2; 2.*sF1;
sF1./(sF2+1); 2./sF2; sF2./4;

power

sF1.^sF2; 2.^sF1; sF2.^4;

absolute value of a function

abs(sF1);

min/max

calculates the local min/max of a single function

[minvalue, minnodes] = min(sF1);
[maxvalue, maxnodes] = max(sF1);

min/max of two functions in the pointwise sense

min(sF1, sF2);

Other operations

calculate the $L^2$-norm, which is only the $l^2$-norm of the Fourier-coefficients

norm(sF1);

calculate the mean value of a function

mean(sF1);

calculate the surface integral value of a function

sum(sF1);

rotate a function

r = rotation('Euler', [pi/4 0 0]);
rotate(sF1, r);

symmetrise a given function

cs = crystalSymmetry('6/m');
sFs = symmetrise(sF1, cs);

Gradient

Calculate the gradient as a function G of type S2VectorFieldHarmonic

G = grad(sF1);

The direct evaluation of the gradient is faster and returns vector3d

nodes = vector3d.rand(100);
grad(sF1, nodes);

Visualization

There are different ways to visualize a S2FunHarmonic

The default plot-command

plot(sF1);

nonfilled contour plot

contour(sF1, 'LineWidth', 2);

color plot without contours

pcolor(sF1);

3D plot which you can rotate around

plot3d(sF2);

3D plot where the radius of the sphere is transformed according to the function values

surf(sF2);

Plot the intersection of the surf plot with a plane with normal vector v

plotSection(sF2, zvector);

plotting the Fourier coefficients

plotSpektra(sF1);
set(gca,'FontSize', 20);