bugGNU Octave - Bugs: bug #49232, Complex pinv giving incorrect...

 
 

bug #49232: Complex pinv giving incorrect results

Submitted by:  Ceral Paquet <octavebugs>
Submitted on:  Fri 30 Sep 2016 04:33:50 PM UTC  
 
Category: LibrariesSeverity: 5 - Blocker
Priority: 5 - NormalItem Group: Regression
Status: FixedAssigned to: None
Originator Name: Open/Closed: Closed
Release: 4.2.0-rc2Operating System: GNU/Linux

Add a New Comment(Rich Markup)
   

You are not logged in

Please log in, so followups can be emailed to you.

 

(Jump to the original submission Jump to the original submission)

Thu 06 Oct 2016 06:28:25 AM UTC, comment #8:

Sorry for the noise (svd.cc not having changed). Seems that my tortoise-hg misled me here...

Thanks for the patch.

Hartmut <hardy>
Thu 06 Oct 2016 03:41:26 AM UTC, comment #7:

I checked in the following changeset:

http://hg.savannah.gnu.org/hgweb/octave/rev/ee0df00e12d6

Closing report as fixed.

John W. Eaton <jwe>
Project Administrator
Thu 06 Oct 2016 03:05:28 AM UTC, comment #6:

Hartmut, are you sure you are looking at the 4.0.3 sources? In that version, there are four *SVD.cc files, one each for float, float complex, double, and double complex. In the complex versions, hermitian was used. This looks like a problem that I introduced when I converted these to use templates. Always using hermitian should be fine in the new template version.

John W. Eaton <jwe>
Project Administrator
Wed 05 Oct 2016 09:45:12 PM UTC, comment #5:

So why did this work correctly in Octave-4.0.3? This older version has the very same two lines of code, using "transpose()", doesn't it?

Has the functionality of "transpose" changed inbetween Octave 4.0.3 and 4.2.0-rc2? Could this have even wider effects?

Hartmut <hardy>
Wed 05 Oct 2016 08:00:46 PM UTC, comment #4:

In ./octave-4.2.0-rc2/liboctave/numeric/svd.cc

Line 401-402:

if (! (jobv == 'N' || jobv == 'O'))
right_sm = right_sm.transpose ();

Replace with:

if (! (jobv == 'N' || jobv == 'O'))
right_sm = right_sm.hermitian ();

That seems to fix it.

Ceral Paquet <octavebugs>
Wed 05 Oct 2016 07:26:45 PM UTC, comment #3:

It looks like the root cause is that V is being wrongly conjugated in svd in Octave.

[U S V] = svd(A);

Octave:

>> U * S * conj(V)'

ans =

1.00000000000000 + 5.00000000000000i 2.00000000000000 + 6.00000000000000i
3.00000000000000 + 7.00000000000000i 4.00000000000000 + 8.00000000000000i

Matlab:

>> U * S * V'

ans =

0.999999999999999 + 5.000000000000000i 1.999999999999999 + 6.000000000000004i
2.999999999999998 + 7.000000000000000i 3.999999999999998 + 8.000000000000002i

Ceral Paquet <octavebugs>
Fri 30 Sep 2016 10:09:51 PM UTC, comment #2:

I can confirm the results in the original submission. With 4.0.3 I get the first answer (only 0.5s) twice. With 4.2.0-rc2 I get the incorrect second answer for the pinv command. My compilation was on Ubuntu 14.04 with standard options (only --disable-docs).

Hartmut <hardy>
Fri 30 Sep 2016 06:29:46 PM UTC, comment #1:

Compiled it again with ./configure and I get the same result.

Ceral Paquet <octavebugs>
Fri 30 Sep 2016 04:33:50 PM UTC, original submission:

I just compiled 4.2-rc2 with enable-64 and OpenBLAS-0.2.16

./configure LD_LIBRARY_PATH=/opt/OpenBLAS/lib CPPFLAGS=-I/opt/OpenBLAS/include LDFLAGS=-L/opt/OpenBLAS/lib --enable-64

It seems that complex svd is broken.

>> A=[1 2;3 4]+i*[5 6;7 8];
>> b=[1;1];
>> A\b

ans =

-0.50000 + 0.50000i
0.50000 - 0.50000i

>> pinv(A)*b

ans =

-0.50000 + 0.50000i
0.41415 - 0.57313i

Sorry I haven't had a chance to recompile with other setups but this was all working under Octave 4.0.1... which I unfortunately deleted after 4.2 compiled.

Ceral Paquet <octavebugs>

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach File(s):
   
   
Comment:
   

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -unavailable- added by jwe (Posted a comment)
  • -unavailable- added by hardy (Posted a comment)
  • -unavailable- added by octavebugs (Submitted the item)
  •  

    Do you think this task is very important?
    If so, you can click here to add your encouragement to it.
    This task has 0 encouragements so far.

    Only project members can vote.

     

    Please enter the title of George Orwell's famous dystopian book (it's a date):

     

     

    Follow 5 latest changes.

    Date Changed By Updated Field Previous Value => Replaced By
    Thu 06 Oct 2016 03:41:26 AM UTCjweStatusNone=>Fixed
      Open/ClosedOpen=>Closed
    Thu 06 Oct 2016 03:05:28 AM UTCjweCategoryNone=>Libraries
      Severity3 - Normal=>5 - Blocker
      Item GroupNone=>Regression

    Back to the top


    Powered by Savane 3.1-cleanup1