source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/qtfm/test/test_svd.m @ 37

Last change on this file since 37 was 37, checked in by (none), 14 years ago

Added original make3d

File size: 6.1 KB
Line 
1% Test code for the quaternion svd function.
2
3% Copyright © 2006 Stephen J. Sangwine and Nicolas Le Bihan.
4% See the file : Copyright.m for further details.
5
6T = 1e-10;
7
8% This is quite a long script because of the need to test the
9% function with square, wide and tall arrays, and with 1, 2 or
10% 3 output parameters, and with normal and economy decompositions.
11
12% Square array.
13
14display('svd on real quaternions ...')
15display('svd on square array ...')
16
17A = quaternion(randn(5,5),randn(5,5),randn(5,5),randn(5,5));
18
19% Normal decomposition.
20
21[U, B, V] = svd(A);
22compare(U*B*V', A, T,  'quaternion/svd failed test 1A')
23
24[U, B] = svd(A);
25compare(U*B*V', A, T,  'quaternion/svd failed test 1B')
26
27S = svd(A);
28compare(S, diag(B), T, 'quaternion/svd failed test 1C')
29
30% Economy (0) decomposition.
31
32[U, B, V] = svd(A,0);
33compare(U*B*V', A, T,  'quaternion/svd failed test 2A')
34
35[U, B] = svd(A,0);
36compare(U*B*V', A, T,  'quaternion/svd failed test 2B')
37
38S = svd(A,0);
39compare(S, diag(B), T, 'quaternion/svd failed test 2C')
40
41% Economy (''econ'') decomposition.
42
43[U, B, V] = svd(A,'econ');
44compare(U*B*V', A, T,  'quaternion/svd failed test 3A')
45
46[U, B] = svd(A,'econ');
47compare(U*B*V', A, T,  'quaternion/svd failed test 3B')
48
49S = svd(A,'econ');
50compare(S, diag(B), T, 'quaternion/svd failed test 3C')
51
52% Wide array.
53
54display('svd on wide   array ...')
55
56A = quaternion(randn(5,7),randn(5,7),randn(5,7),randn(5,7));
57
58% Normal decomposition.
59
60[U, B, V] = svd(A);
61compare(U*B*V', A, T,  'quaternion/svd failed test 4A')
62
63[U, B] = svd(A);
64compare(U*B*V', A, T,  'quaternion/svd failed test 4B')
65
66S = svd(A);
67compare(S, diag(B), T, 'quaternion/svd failed test 4C')
68
69% Economy (0) decomposition.
70
71[U, B, V] = svd(A,0);
72compare(U*B*V', A, T,  'quaternion/svd failed test 5A')
73
74[U, B] = svd(A,0);
75compare(U*B*V', A, T,  'quaternion/svd failed test 5B')
76
77S = svd(A,0);
78compare(S, diag(B), T, 'quaternion/svd failed test 5C')
79
80% Economy (''econ'') decomposition.
81
82[U, B, V] = svd(A,'econ');
83compare(U*B*V', A, T,  'quaternion/svd failed test 6A')
84
85[U, B] = svd(A,'econ');
86compare(U*B*V', A, T,  'quaternion/svd failed test 6B')
87
88S = svd(A,'econ');
89compare(S, diag(B), T, 'quaternion/svd failed test 6C')
90
91% Tall array.
92
93display('svd on tall   array ...')
94
95A = A.';
96
97% Normal decomposition.
98
99[U, B, V] = svd(A);
100compare(U*B*V', A, T,  'quaternion/svd failed test 7A')
101
102[U, B] = svd(A);
103compare(U*B*V', A, T,  'quaternion/svd failed test 7B')
104
105S = svd(A);
106compare(S, diag(B), T, 'quaternion/svd failed test 7C')
107
108% Economy (0) decomposition.
109
110[U, B, V] = svd(A,0);
111compare(U*B*V', A, T,  'quaternion/svd failed test 8A')
112
113[U, B] = svd(A,0);
114compare(U*B*V', A, T,  'quaternion/svd failed test 8B')
115
116S = svd(A,0);
117compare(S, diag(B), T, 'quaternion/svd failed test 8C')
118
119% Economy (''econ'') decomposition.
120
121[U, B, V] = svd(A,'econ');
122compare(U*B*V', A, T,  'quaternion/svd failed test 9A')
123
124[U, B] = svd(A,'econ');
125compare(U*B*V', A, T,  'quaternion/svd failed test 9B')
126
127S = svd(A,'econ');
128compare(S, diag(B), T, 'quaternion/svd failed test 9C')
129
130% Now repeat the whole lot with complex data ........
131
132T = 1e-8; % The error margin for complex data is much more
133          % relaxed than for real data, because the results
134          % are not so accurate.
135
136% Square array.
137
138display('svd on complex quaternions ...')
139display('svd on square array ...')
140
141A = quaternion(complex(randn(5,5),randn(5,5)),...
142               complex(randn(5,5),randn(5,5)),...
143               complex(randn(5,5),randn(5,5)),...
144               complex(randn(5,5),randn(5,5)));
145
146% Normal decomposition.
147
148[U, B, V] = svd(A);
149compare(U*B*V', A, T,  'quaternion/svd failed test 10A')
150
151[U, B] = svd(A);
152compare(U*B*V', A, T,  'quaternion/svd failed test 10B')
153
154S = svd(A);
155compare(S, diag(B), T, 'quaternion/svd failed test 10C')
156
157% Economy (0) decomposition.
158
159[U, B, V] = svd(A,0);
160compare(U*B*V', A, T,  'quaternion/svd failed test 11A')
161
162[U, B] = svd(A,0);
163compare(U*B*V', A, T,  'quaternion/svd failed test 11B')
164
165S = svd(A,0);
166compare(S, diag(B), T, 'quaternion/svd failed test 11C')
167
168% Economy (''econ'') decomposition.
169
170[U, B, V] = svd(A,'econ');
171compare(U*B*V', A, T,  'quaternion/svd failed test 12A')
172
173[U, B] = svd(A,'econ');
174compare(U*B*V', A, T,  'quaternion/svd failed test 12B')
175
176S = svd(A,'econ');
177compare(S, diag(B), T, 'quaternion/svd failed test 12C')
178
179% Wide array.
180
181display('svd on wide   array ...')
182
183A = quaternion(complex(randn(5,7),randn(5,7)),...
184               complex(randn(5,7),randn(5,7)),...
185               complex(randn(5,7),randn(5,7)),...
186               complex(randn(5,7),randn(5,7)));
187
188% Normal decomposition.
189
190[U, B, V] = svd(A);
191compare(U*B*V', A, T,  'quaternion/svd failed test 13A')
192
193[U, B] = svd(A);
194compare(U*B*V', A, T,  'quaternion/svd failed test 13B')
195
196S = svd(A);
197compare(S, diag(B), T, 'quaternion/svd failed test 13C')
198
199% Economy (0) decomposition.
200
201[U, B, V] = svd(A,0);
202compare(U*B*V', A, T,  'quaternion/svd failed test 14A')
203
204[U, B] = svd(A,0);
205compare(U*B*V', A, T,  'quaternion/svd failed test 14B')
206
207S = svd(A,0);
208compare(S, diag(B), T, 'quaternion/svd failed test 14C')
209
210% Economy (''econ'') decomposition.
211
212[U, B, V] = svd(A,'econ');
213compare(U*B*V', A, T,  'quaternion/svd failed test 15A')
214
215[U, B] = svd(A,'econ');
216compare(U*B*V', A, T,  'quaternion/svd failed test 15B')
217
218S = svd(A,'econ');
219compare(S, diag(B), T, 'quaternion/svd failed test 15C')
220
221% Tall array.
222
223display('svd on tall   array ...')
224
225A = A.';
226
227% Normal decomposition.
228
229[U, B, V] = svd(A);
230compare(U*B*V', A, T,  'quaternion/svd failed test 16A')
231
232[U, B] = svd(A);
233compare(U*B*V', A, T,  'quaternion/svd failed test 16B')
234
235S = svd(A);
236compare(S, diag(B), T, 'quaternion/svd failed test 16C')
237
238% Economy (0) decomposition.
239
240[U, B, V] = svd(A,0);
241compare(U*B*V', A, T,  'quaternion/svd failed test 17A')
242
243[U, B] = svd(A,0);
244compare(U*B*V', A, T,  'quaternion/svd failed test 17B')
245
246S = svd(A,0);
247compare(S, diag(B), T, 'quaternion/svd failed test 17C')
248
249% Economy (''econ'') decomposition.
250
251[U, B, V] = svd(A,'econ');
252compare(U*B*V', A, T,  'quaternion/svd failed test 18A')
253
254[U, B] = svd(A,'econ');
255compare(U*B*V', A, T,  'quaternion/svd failed test 18B')
256
257S = svd(A,'econ');
258compare(S, diag(B), T, 'quaternion/svd failed test 18C')
259
260clear A U B V S
Note: See TracBrowser for help on using the repository browser.