-
Notifications
You must be signed in to change notification settings - Fork 0
/
testfun2Snavi.m
112 lines (74 loc) · 2.79 KB
/
testfun2Snavi.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
function f = testfun2Snavi(x,y,z,kk)
% INPUT
% x,y,z cartesian coordinates on the sphere to evaluate functions
% kk index for one of the test functions
%
% OUTPUT
% f resulting function values
% This program contains the test functions for the navigator example
% Odd numbers: original function
% Even numbers: rotated function
switch kk
case 1 % Two gaussians
f = exp(-3*((x).^2 + y.^2+(z-1).^2))+exp(-4*((x-1/sqrt(2)).^2 + (y+1/sqrt(2)).^2+(z).^2));
case 2 % The rotated two gaussians
a1 = 1.4;
a2 = 0.2;
a3 = 0.9;
D1 = [cos(a1) -sin(a1) 0; sin(a1) cos(a1) 0; 0 0 1];
D2 = [1 0 0; 0 cos(a2) -sin(a2); 0 sin(a2) cos(a2)];
D3 = [cos(a3) 0 -sin(a3); 0 1 0; sin(a3) 0 cos(a3)];
p = [x,y,z]*D1*D2*D3;
x = p(:,1); y = p(:,2); z = p(:,3);
f = exp(-3*((x).^2 + y.^2+(z-1).^2))+exp(-4*((x-1/sqrt(2)).^2 + (y+1/sqrt(2)).^2+(z).^2));
case 3 % The cross
f = max(exp(-40*x.^2).*exp(-8*(z-1).^2),exp(-40*y.^2).*exp(-8*(z-1).^2));
case 4 % The rotated cross
a1 = -0.4;
a2 = 0.9;
a3 = -0.3;
D1 = [cos(a1) -sin(a1) 0; sin(a1) cos(a1) 0; 0 0 1];
D2 = [1 0 0; 0 cos(a2) -sin(a2); 0 sin(a2) cos(a2)];
D3 = [cos(a3) 0 -sin(a3); 0 1 0; sin(a3) 0 cos(a3)];
p = [x,y,z]*D1*D2*D3;
x = p(:,1); y = p(:,2); z = p(:,3);
f = max(exp(-40*x.^2).*exp(-8*(z-1).^2),exp(-40*y.^2).*exp(-8*(z-1).^2));
case 5 % A spherical harmonic
K = [8,4];
[ph,th,R] = cart2sph(x,y,z);
th = pi/2-th;
ph = mod(ph,2*pi);
Ymn = legendre(K(1),cos(th));
f = Ymn(K(2)+1,:)';
f = f.*cos(K(2)*ph)/1850;
case 6 % The rotated spherical harmonic
K = [8,4];
a1 = 0.15;
a2 = 0.35;
a3 = 0.35;
D1 = [cos(a1) -sin(a1) 0; sin(a1) cos(a1) 0; 0 0 1];
D2 = [1 0 0; 0 cos(a2) -sin(a2); 0 sin(a2) cos(a2)];
D3 = [cos(a3) 0 -sin(a3); 0 1 0; sin(a3) 0 cos(a3)];
p = [x,y,z]*D1*D2*D3;
x = p(:,1); y = p(:,2); z = p(:,3);
[ph,th,R] = cart2sph(x,y,z);
th = pi/2-th;
ph = mod(ph,2*pi);
Ymn = legendre(K(1),cos(th));
f = Ymn(K(2)+1,:)';
f = f.*cos(K(2)*ph)/1850;
case 7
f = cos(1-exp(-4*x.*y)-sin(7*z));
case 8
a1 = 0.4;
a2 = 0.2;
a3 = 0.3;
D1 = [cos(a1) -sin(a1) 0; sin(a1) cos(a1) 0; 0 0 1];
D2 = [1 0 0; 0 cos(a2) -sin(a2); 0 sin(a2) cos(a2)];
D3 = [cos(a3) 0 -sin(a3); 0 1 0; sin(a3) 0 cos(a3)];
p = [x,y,z]*D1*D2*D3;
x = p(:,1); y = p(:,2); z = p(:,3);
f = cos(1-exp(-4*x.*y)-sin(7*z));
otherwise
error('There is no function associated to this number');
end