[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
lapack 4.0 and octave
From: |
marco atzeri |
Subject: |
lapack 4.0 and octave |
Date: |
Sat, 24 Dec 2011 19:49:56 +0100 |
User-agent: |
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20111105 Thunderbird/8.0 |
Hi All,
there is any one testing the last dev with lapack-4.0 ?
I am building lapack-4.0 cygwin package and testing it,
and I found that octave "make check" aborts on qr.cc tests.
No such problem with previous lapack 3.2.2.
-------------------------------------------------------------------
octave:2> test /pub/hg/octave/src/DLD-FUNCTIONS/qr.cc verbose
>>>>> /pub/hg/octave/src/DLD-FUNCTIONS/qr.cc
***** test
a = [0, 2, 1; 2, 1, 2];
[q, r] = qr (a);
[qe, re] = qr (a, 0);
assert (q * r, a, sqrt (eps));
assert (qe * re, a, sqrt (eps));
***** test
a = [0, 2, 1; 2, 1, 2];
[q, r, p] = qr (a); # not giving right dimensions. FIXME
[qe, re, pe] = qr (a, 0);
assert (q * r, a * p, sqrt (eps));
assert (qe * re, a(:, pe), sqrt (eps));
***** test
a = [0, 2; 2, 1; 1, 2];
[q, r] = qr (a);
[qe, re] = qr (a, 0);
assert (q * r, a, sqrt (eps));
assert (qe * re, a, sqrt (eps));
***** test
a = [0, 2; 2, 1; 1, 2];
[q, r, p] = qr (a);
[qe, re, pe] = qr (a, 0);
assert (q * r, a * p, sqrt (eps));
assert (qe * re, a(:, pe), sqrt (eps));
***** error <Invalid call to qr> qr ();
***** error <Invalid call to qr> qr ([1, 2; 3, 4], 0, 2);
***** function retval = __testqr (q, r, a, p)
tol = 100*eps (class(q));
retval = 0;
if (nargin == 3)
n1 = norm (q*r-a);
n2 = norm (q'*q-eye(columns(q)));
retval = (n1 < tol && n2 < tol);
else
n1 = norm (q'*q-eye(columns(q)));
retval = (n1 < tol);
if (isvector (p))
n2 = norm (q*r-a(:,p));
retval = (retval && n2 < tol);
else
n2 = norm (q*r - a*p);
retval = (retval && n2 < tol);
endif
endif
***** endfunction
***** test
t = ones (24, 1);
j = 1;
if false # eliminate big matrix tests
a = rand(5000,20);
[q,r]=qr(a,0); t(j++) = __testqr(q,r,a);
[q,r]=qr(a',0); t(j++) = __testqr(q,r,a');
[q,r,p]=qr(a,0); t(j++) = __testqr(q,r,a,p);
[q,r,p]=qr(a',0); t(j++) = __testqr(q,r,a',p);
a = a+1i*eps;
[q,r]=qr(a,0); t(j++) = __testqr(q,r,a);
[q,r]=qr(a',0); t(j++) = __testqr(q,r,a');
[q,r,p]=qr(a,0); t(j++) = __testqr(q,r,a,p);
[q,r,p]=qr(a',0); t(j++) = __testqr(q,r,a',p);
endif
a = [ ones(1,15); sqrt(eps)*eye(15) ];
[q,r]=qr(a); t(j++) = __testqr(q,r,a);
[q,r]=qr(a'); t(j++) = __testqr(q,r,a');
[q,r,p]=qr(a); t(j++) = __testqr(q,r,a,p);
[q,r,p]=qr(a'); t(j++) = __testqr(q,r,a',p);
a = a+1i*eps;
[q,r]=qr(a); t(j++) = __testqr(q,r,a);
[q,r]=qr(a'); t(j++) = __testqr(q,r,a');
[q,r,p]=qr(a); t(j++) = __testqr(q,r,a,p);
[q,r,p]=qr(a'); t(j++) = __testqr(q,r,a',p);
a = [ ones(1,15); sqrt(eps)*eye(15) ];
[q,r]=qr(a,0); t(j++) = __testqr(q,r,a);
[q,r]=qr(a',0); t(j++) = __testqr(q,r,a');
[q,r,p]=qr(a,0); t(j++) = __testqr(q,r,a,p);
[q,r,p]=qr(a',0); t(j++) = __testqr(q,r,a',p);
a = a+1i*eps;
[q,r]=qr(a,0); t(j++) = __testqr(q,r,a);
[q,r]=qr(a',0); t(j++) = __testqr(q,r,a');
[q,r,p]=qr(a,0); t(j++) = __testqr(q,r,a,p);
[q,r,p]=qr(a',0); t(j++) = __testqr(q,r,a',p);
a = [
611 196 -192 407 -8 -52 -49 29
196 899 113 -192 -71 -43 -8 -44
-192 113 899 196 61 49 8 52
407 -192 196 611 8 44 59 -23
-8 -71 61 8 411 -599 208 208
-52 -43 49 44 -599 411 208 208
-49 -8 8 59 208 208 99 -911
29 -44 52 -23 208 208 -911 99
];
[q,r] = qr(a);
assert(all (t) && norm(q*r-a) < 5000*eps);
** On entry to DORGLQ parameter number 5 had an illegal value
Aborted
----------------------------------------------------------------------
Before looking on what is different between the two lapack version,
I will appreciate to know if 4.0 is working fine with octave on other
platforms or it is a problem also for someone else.
Regards
Marco
- lapack 4.0 and octave,
marco atzeri <=