linear_algebra plugged.
[scilab.git] / scilab / modules / linear_algebra / tests / unit_tests / svd.dia.ref
1
2 // =============================================================================
3
4 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
5
6 // Copyright (C) ????-2008 - INRIA
7
8 //
9
10 //  This file is distributed under the same license as the Scilab package.
11
12 // =============================================================================
13
14 function r=Err(x)
15   r=norm(x,1)
16 endfunction
17 rand('normal')
18
19 //==========================================================================
20
21 //==============================     svd      ============================== 
22
23 //==========================================================================
24
25 //Empty matrix
26
27 A=[];
28
29 [U,S,V]=svd(A);
30
31 if U<>[]|V<>[]|S<>[] then bugmes();quit;end
32
33 S=svd(A);
34
35 if S<>[] then bugmes();quit;end
36
37 [U,S,V]=svd(A,"e");
38
39 if U<>[]|V<>[]|S<>[] then bugmes();quit;end
40
41 S=svd(A,"e");
42
43 if S<>[] then bugmes();quit;end
44
45 //Matrix with inf or nan
46
47 if execstr('svd([%inf 1;2 3])','errcatch')==0 then bugmes();quit;end
48
49 if execstr('svd([1 %nan;2 3])','errcatch')==0 then bugmes();quit;end
50
51 if execstr('svd([%inf %i;2 3])','errcatch')==0 then bugmes();quit;end
52
53 if execstr('svd([%i %i;%nan 3])','errcatch')==0 then bugmes();quit;end
54
55 //Small dimension
56
57 //---------------
58
59 A=rand(3,5);
60
61 Ac=A+%i*rand(A);
62
63 //Real Case
64
65 [U,S,V]=svd(A);
66
67 if Err(U*S*V'-A)>200*%eps then bugmes();quit;end
68
69 if Err(svd(A)-diag(S))> 200*%eps then bugmes();quit;end
70
71 [U,S,V]=svd(A,"e");
72
73 if Err(U*S*V'-A)>200*%eps then bugmes();quit;end
74
75 A=A';
76
77 [U,S,V]=svd(A);
78
79 if Err(U*S*V'-A)>200*%eps then bugmes();quit;end
80
81 if Err(svd(A)-diag(S))> 200*%eps then bugmes();quit;end
82
83 [U,S,V]=svd(A,"e");
84
85 if Err(U*S*V'-A)>200*%eps then bugmes();quit;end
86
87 //Complex Case
88
89 [U,S,V]=svd(Ac);
90
91 if Err(U*S*V'-Ac)>200*%eps then bugmes();quit;end
92
93 if Err(svd(Ac)-diag(S))> 200*%eps then bugmes();quit;end
94
95 [U,S,V]=svd(Ac,"e");
96
97 if Err(U*S*V'-Ac)>200*%eps then bugmes();quit;end
98
99 Ac=Ac';
100
101 [U,S,V]=svd(Ac);U*S*V'-Ac;
102
103 if Err(U*S*V'-Ac)>200*%eps then bugmes();quit;end
104
105 if Err(svd(Ac)-diag(S))> 200*%eps then bugmes();quit;end
106
107 [U,S,V]=svd(Ac,"e");
108
109 if Err(U*S*V'-Ac)>200*%eps then bugmes();quit;end
110
111 //Large dimension
112
113 //---------------
114
115 A=rand(150,60);
116
117 Ac=A+rand(A)*%i;
118
119 //Real Case
120
121 [U,S,V]=svd(A);
122
123 if Err(U*S*V'-A)>10000*%eps then bugmes();quit;end
124
125 if Err(svd(A)-diag(S))> 10000*%eps then bugmes();quit;end
126
127 [U,S,V]=svd(A,"e");
128
129 if Err(U*S*V'-A)>10000*%eps then bugmes();quit;end
130
131 A=A';
132
133 [U,S,V]=svd(A);
134
135 if Err(U*S*V'-A)>10000*%eps then bugmes();quit;end
136
137 if Err(svd(A)-diag(S))> 10000*%eps then bugmes();quit;end
138
139 [U,S,V]=svd(A,"e");
140
141 if Err(U*S*V'-A)>10000*%eps then bugmes();quit;end
142
143 //Complex Case
144
145 [U,S,V]=svd(Ac);
146
147 if Err(U*S*V'-Ac)>10000*%eps then bugmes();quit;end
148
149 if Err(svd(Ac)-diag(S))> 10000*%eps then bugmes();quit;end
150
151 [U,S,V]=svd(Ac,"e");
152
153 if Err(U*S*V'-Ac)>10000*%eps then bugmes();quit;end
154
155 Ac=Ac';
156
157 [U,S,V]=svd(Ac);U*S*V'-Ac;
158
159 if Err(U*S*V'-Ac)>10000*%eps then bugmes();quit;end
160
161 if Err(svd(Ac)-diag(S))> 10000*%eps then bugmes();quit;end
162
163 [U,S,V]=svd(Ac,"e");
164
165 if Err(U*S*V'-Ac)>10000*%eps then bugmes();quit;end
166
167 //==========================================================================
168
169 //==============================     svd part II     ======================= 
170
171 //==========================================================================
172
173 //Empty matrix
174
175 if svd([])<>[] then bugmes();quit;end
176
177 if svd([],"e")<>[] then bugmes();quit;end
178
179 [U,S,V]=svd([]);
180
181 if U<>[]|S<>[]  then bugmes();quit;end
182
183 [U,S,V]=svd([]);
184
185 if U<>[]|S<>[]|V<>[]  then bugmes();quit;end
186
187 [U,S,V,rk]=svd([]);
188
189 if U<>[]|S<>[]|V<>[]|rk<>0  then bugmes();quit;end
190
191 [U,S,V,rk]=svd([],%eps);
192
193 if U<>[]|S<>[]|V<>[]|rk<>0  then bugmes();quit;end
194
195 if execstr('[U,S,V,rk]=svd([],'"e'")','errcatch') == 0 then bugmes();quit;end
196
197 //Small dimension
198
199 //Real Case Fat
200
201 A=rand(3,5);
202
203 S=svd(A);
204
205 if or(S<0) then bugmes();quit;end
206
207 if gsort(S)<>S  then bugmes();quit;end
208
209 [U,S1,V]=svd(A);
210
211 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
212
213 if Err(U'*U-eye())>10*%eps  then bugmes();quit;end
214
215 [U1,S1,V]=svd(A,"e");
216
217 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
218
219 if Err(U1'*U1-eye())>200*%eps  then bugmes();quit;end
220
221 [U1,S1,V]=svd(A);
222
223 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
224
225 if Err(U'*U-eye())>200*%eps  then bugmes();quit;end
226
227 if Err(U1*S1*V'-A) >200*%eps  then bugmes();quit;end
228
229 [U1,S1,V1]=svd(A,"e");
230
231 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
232
233 if Err(U-U1)>10*%eps  then bugmes();quit;end
234
235 if Err(U1*S1*V1'-A) >200*%eps  then bugmes();quit;end
236
237 [U1,S1,V1,rk]=svd(A);
238
239 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
240
241 if Err(U-U1)>200*%eps  then bugmes();quit;end
242
243 if Err(V-V1) >200*%eps  then bugmes();quit;end
244
245 if rk<>3 then bugmes();quit;end
246
247 //Real Case Tall
248
249 A=rand(5,3);
250
251 S=svd(A);
252
253 if or(S<0) then bugmes();quit;end
254
255 if gsort(S)<>S  then bugmes();quit;end
256
257 [U,S1,V]=svd(A);
258
259 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
260
261 if Err(U'*U-eye())>200*%eps  then bugmes();quit;end
262
263 [U1,S1,V]=svd(A,"e");
264
265 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
266
267 if Err(U1'*U1-eye())>200*%eps  then bugmes();quit;end
268
269 [U1,S1,V]=svd(A);
270
271 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
272
273 if Err(U'*U-eye())>200*%eps  then bugmes();quit;end
274
275 if Err(U1*S1*V'-A) >200*%eps  then bugmes();quit;end
276
277 [U1,S1,V1]=svd(A,"e");
278
279 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
280
281 if size(U1,2)<>3 then bugmes();quit;end
282
283 if Err(U1*S1*V1'-A) >200*%eps  then bugmes();quit;end
284
285 [U1,S1,V1,rk]=svd(A);
286
287 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
288
289 if Err(U-U1)>200*%eps  then bugmes();quit;end
290
291 if Err(V-V1) >200*%eps  then bugmes();quit;end
292
293 if rk<>3 then bugmes();quit;end
294
295 //Complex Case Fat
296
297 A=rand(3,5)+%i*rand(3,5);
298
299 S=svd(A);
300
301 if or(S<0) then bugmes();quit;end
302
303 if gsort(S)<>S  then bugmes();quit;end
304
305 [U,S1,V]=svd(A);
306
307 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
308
309 if Err(U'*U-eye())>200*%eps  then bugmes();quit;end
310
311 [U1,S1,V]=svd(A,"e");
312
313 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
314
315 if Err(U1'*U1-eye())>200*%eps  then bugmes();quit;end
316
317 [U1,S1,V]=svd(A);
318
319 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
320
321 if Err(U'*U-eye())>200*%eps  then bugmes();quit;end
322
323 if Err(U1*S1*V'-A) >30*%eps  then bugmes();quit;end
324
325 [U1,S1,V1]=svd(A,"e");
326
327 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
328
329 if Err(U-U1)>200*%eps  then bugmes();quit;end
330
331 if Err(U1*S1*V1'-A) >200*%eps  then bugmes();quit;end
332
333 [U1,S1,V1,rk]=svd(A);
334
335 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
336
337 if Err(U-U1)>200*%eps  then bugmes();quit;end
338
339 if Err(V-V1) >200*%eps  then bugmes();quit;end
340
341 if rk<>3 then bugmes();quit;end
342
343 //Complex Case Tall
344
345 A=rand(5,3)+%i*rand(5,3);
346
347 S=svd(A);
348
349 if or(S<0) then bugmes();quit;end
350
351 if gsort(S)<>S  then bugmes();quit;end
352
353 [U,S1,V]=svd(A);
354
355 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
356
357 if Err(U'*U-eye())>200*%eps  then bugmes();quit;end
358
359 [U1,S1,V]=svd(A,"e");
360
361 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
362
363 if Err(U1'*U1-eye())>200*%eps  then bugmes();quit;end
364
365 [U1,S1,V]=svd(A);
366
367 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
368
369 if Err(U'*U-eye())>200*%eps  then bugmes();quit;end
370
371 if Err(U1*S1*V'-A) >200*%eps  then bugmes();quit;end
372
373 [U1,S1,V1]=svd(A,"e");
374
375 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
376
377 if size(U1,2)<>3 then bugmes();quit;end
378
379 if Err(U1*S1*V1'-A) >200*%eps  then bugmes();quit;end
380
381 [U1,S1,V1,rk]=svd(A);
382
383 if Err(S-diag(S1))>200*%eps  then bugmes();quit;end
384
385 if Err(U-U1)>200*%eps  then bugmes();quit;end
386
387 if Err(V-V1) >200*%eps  then bugmes();quit;end
388
389 if rk<>3 then bugmes();quit;end
390
391 //Large dimension
392
393 //Real Case Fat
394
395 A=rand(30,50);
396
397 S=svd(A);
398
399 if or(S<0) then bugmes();quit;end
400
401 if gsort(S)<>S  then bugmes();quit;end
402
403 [U,S1,V]=svd(A);
404
405 if Err(S-diag(S1))>1000*%eps  then bugmes();quit;end
406
407 if Err(U'*U-eye())>1000*%eps  then bugmes();quit;end
408
409 [U1,S1,V]=svd(A,"e");
410
411 if Err(S-diag(S1))>1000*%eps  then bugmes();quit;end
412
413 if Err(U1'*U1-eye())>1000*%eps  then bugmes();quit;end
414
415 [U1,S1,V]=svd(A);
416
417 if Err(S-diag(S1))>1000*%eps  then bugmes();quit;end
418
419 if Err(U'*U-eye())>1000*%eps  then bugmes();quit;end
420
421 if Err(U1*S1*V'-A) >1000*%eps  then bugmes();quit;end
422
423 [U1,S1,V1]=svd(A,"e");
424
425 if Err(S-diag(S1))>1000*%eps  then bugmes();quit;end
426
427 if Err(U-U1)>10*%eps  then bugmes();quit;end
428
429 if Err(U1*S1*V1'-A) >1000*%eps  then bugmes();quit;end
430
431 [U1,S1,V1,rk]=svd(A);
432
433 if Err(S-diag(S1))>1000*%eps  then bugmes();quit;end
434
435 if Err(U-U1)>5000*%eps  then bugmes();quit;end
436
437 if Err(V-V1) >5000*%eps  then bugmes();quit;end
438
439 if rk<>30 then bugmes();quit;end
440
441 //Real Case Tall
442
443 A=rand(50,30);
444
445 S=svd(A);
446
447 if or(S<0) then bugmes();quit;end
448
449 if gsort(S)<>S  then bugmes();quit;end
450
451 [U,S1,V]=svd(A);
452
453 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
454
455 if Err(U'*U-eye())>5000*%eps  then bugmes();quit;end
456
457 [U1,S1,V]=svd(A,"e");
458
459 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
460
461 if Err(U1'*U1-eye())>5000*%eps  then bugmes();quit;end
462
463 [U1,S1,V]=svd(A);
464
465 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
466
467 if Err(U'*U-eye())>5000*%eps  then bugmes();quit;end
468
469 if Err(U1*S1*V'-A) >5000*%eps  then bugmes();quit;end
470
471 [U1,S1,V1]=svd(A,"e");
472
473 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
474
475 if size(U1,2)<>30 then bugmes();quit;end
476
477 if Err(U1*S1*V1'-A) >5000*%eps  then bugmes();quit;end
478
479 [U1,S1,V1,rk]=svd(A);
480
481 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
482
483 if Err(U-U1)>5000*%eps  then bugmes();quit;end
484
485 if Err(V-V1) >5000*%eps  then bugmes();quit;end
486
487 if rk<>30 then bugmes();quit;end
488
489 //Complex Case Fat
490
491 A=rand(30,50)+%i*rand(30,50);
492
493 S=svd(A);
494
495 if or(S<0) then bugmes();quit;end
496
497 if gsort(S)<>S  then bugmes();quit;end
498
499 [U,S1,V]=svd(A);
500
501 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
502
503 if Err(U'*U-eye())>5000*%eps  then bugmes();quit;end
504
505 [U1,S1,V]=svd(A,"e");
506
507 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
508
509 if Err(U1'*U1-eye())>5000*%eps  then bugmes();quit;end
510
511 [U1,S1,V]=svd(A);
512
513 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
514
515 if Err(U'*U-eye())>5000*%eps  then bugmes();quit;end
516
517 if Err(U1*S1*V'-A) >5000*%eps  then bugmes();quit;end
518
519 [U1,S1,V1]=svd(A,"e");
520
521 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
522
523 if Err(U-U1)>5000*%eps  then bugmes();quit;end
524
525 if Err(U1*S1*V1'-A) >5000*%eps  then bugmes();quit;end
526
527 [U1,S1,V1,rk]=svd(A);
528
529 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
530
531 if Err(U-U1)>5000*%eps  then bugmes();quit;end
532
533 if Err(V-V1) >5000*%eps  then bugmes();quit;end
534
535 if rk<>30 then bugmes();quit;end
536
537 //Complex Case Tall
538
539 A=rand(50,30)+%i*rand(50,30);
540
541 S=svd(A);
542
543 if or(S<0) then bugmes();quit;end
544
545 if gsort(S)<>S  then bugmes();quit;end
546
547 [U,S1,V]=svd(A);
548
549 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
550
551 if Err(U'*U-eye())>5000*%eps  then bugmes();quit;end
552
553 [U1,S1,V]=svd(A,"e");
554
555 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
556
557 if Err(U1'*U1-eye())>5000*%eps  then bugmes();quit;end
558
559 [U1,S1,V]=svd(A);
560
561 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
562
563 if Err(U'*U-eye())>5000*%eps  then bugmes();quit;end
564
565 if Err(U1*S1*V'-A) >5000*%eps  then bugmes();quit;end
566
567 [U1,S1,V1]=svd(A,"e");
568
569 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
570
571 if size(U1,2)<>30 then bugmes();quit;end
572
573 if Err(U1*S1*V1'-A) >5000*%eps  then bugmes();quit;end
574
575 [U1,S1,V1,rk]=svd(A);
576
577 if Err(S-diag(S1))>5000*%eps  then bugmes();quit;end
578
579 if Err(U-U1)>5000*%eps  then bugmes();quit;end
580
581 if Err(V-V1) >5000*%eps  then bugmes();quit;end
582
583 if rk<>30 then bugmes();quit;end
584