bug-gsl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-gsl] Possible bug in Hessenberg-Triangular Reduction.


From: Miguel García Torres
Subject: Re: [Bug-gsl] Possible bug in Hessenberg-Triangular Reduction.
Date: Fri, 23 Sep 2011 17:34:28 +0200

I would like to say thanks to all of you to have a look at this issue!

Regards,

MiguelGT


2011/9/23 Patrick Alken <address@hidden>

> I just had a chance to look at this and agree with Brian's earlier
> response. Your test program satisfies the relations
>
>
> A = U H V^T
> B = U R V^T
>
> so the routine is working correctly for that case. This decomposition may
> not be unique which is why you may see a different result in that book you
> referenced.
>
> Patrick
>
>
> On 09/02/2011 10:19 PM, Miguel García Torres wrote:
>
>> Hi, the information about the possible bug is
>>
>> [*] The version number of GSL: 1.15
>> [*] The hardware and operating system: Intel(R) Core(TM)2 Duo CPU
>> P9600
>>  @ 2.66GHz 8GB RAM, Linux (Ubuntu karmic)
>> [*] The compiler used, including version number and compilation options:
>> gcc
>> 4.4.3 options:-lgsl -lgslcblas
>> [*] A description of the bug behavior
>>
>> I have tried to port the  Hessenberg-Triangular Reduction from gsl to
>> Java.
>> However I found some wrong outputs. I sent an email to gsl-help and told
>> me the it could be a bug in the code:
>>
>> 1) In GSL-help, Juan Pablo told me that Looking up the book Matrix
>>     Computation, 3rd  Ed.,  Alg. 7.7.1 and page 380, he found is an
>> example
>>     of the Hessenberg-Triangular Reduction. The values of matrices match
>>     all but A. The right output A should be
>>
>>     [ -2.5849 1.5413 2.4221]
>>     [-9.7631 0.0874 1.9239 ]
>>     [0.0000 2.7233 -.7612 ]
>>
>>    The output I get with GSL is
>>
>>     [-2.58492131056598850591 -1.10096376512636062728
>> -2.20192753025272169864]
>>     [9.76310308345568600430  -0.06246341106135822052
>> 1.93636574290210594640]
>>     [-0.00000000000000044409 -1.94524474299697525126
>> 1.18406201747641981470]
>>
>> 2) When I tried ti run the Hessenberg-Triangular Reduction for the
>> following
>> matrices:
>>    A =
>>         [1 2 1 2]
>>         [3 4 3 4]
>>         [1 2 1 2]
>>         [3 4 3 4]
>>
>>    B =
>>         [5  6  5  6]
>>         [7  8  7  8]
>>         [5  6  5  6]
>>         [7  8  7  8]
>>
>>       I get different output depending on the machine precision. When it
>> has
>> to calculate the
>>       givens rotation (create_givens) in gsl_linalg_hesstri_decomp
>> function,
>> values are
>>       very small (~10-15) and so I get vry different outputs for different
>> machines. Should
>>      this thing be controlled?
>>
>> [*] A short program which exercises the bug
>>
>>
>> include<stdio.h>
>> #include<stdlib.h>
>> #include<gsl/gsl_math.h>
>> #include<gsl/gsl_vector.h>
>> #include<gsl/gsl_matrix.h>
>> #include<gsl/gsl_blas.h>
>> #include<gsl/gsl_eigen.h>
>> #include<gsl/gsl_linalg.h>
>>
>>
>> void test_hesstri();
>> void print_matrix(gsl_matrix *);
>>
>> int main (void) {
>>   test_hesstri();
>>
>>   return 0;
>> }
>>
>> void test_hesstri() {
>>   int n = 3;
>>   gsl_matrix *A = gsl_matrix_alloc(n, n);
>>   gsl_matrix *B = gsl_matrix_alloc(n, n);
>>
>>
>>   gsl_matrix_set(A, 0, 0, 10);
>>   gsl_matrix_set(A, 0, 1, 1);
>>   gsl_matrix_set(A, 0, 2, 2);
>>   gsl_matrix_set(A, 1, 0, 1);
>>   gsl_matrix_set(A, 1, 1, 2);
>>   gsl_matrix_set(A, 1, 2, -1);
>>   gsl_matrix_set(A, 2, 0, 1);
>>   gsl_matrix_set(A, 2, 1, 1);
>>   gsl_matrix_set(A, 2, 2, 2);
>>
>>
>>   gsl_matrix_set(B, 0, 0, 1);
>>   gsl_matrix_set(B, 0, 1, 2);
>>   gsl_matrix_set(B, 0, 2, 3);
>>   gsl_matrix_set(B, 1, 0, 4);
>>   gsl_matrix_set(B, 1, 1, 5);
>>   gsl_matrix_set(B, 1, 2, 6);
>>   gsl_matrix_set(B, 2, 0, 7);
>>   gsl_matrix_set(B, 2, 1, 8);
>>   gsl_matrix_set(B, 2, 2, 9);
>>
>>   gsl_matrix *U = gsl_matrix_alloc(n, n);
>>   gsl_matrix *V = gsl_matrix_alloc(n, n);
>>
>>   gsl_vector *work = gsl_vector_alloc(n);
>>
>>   gsl_linalg_hesstri_decomp(A, B, U, V, work);
>>
>>   printf("::::::::::::::::::::::**:::::::::::::::::\n");
>>   printf("[D]Matriz A:\n");
>>   print_matrix(A);
>>   printf("[D]Matriz B:\n");
>>   print_matrix(B);
>>   printf("[D]Matriz U:\n");
>>   print_matrix(U);
>>   printf("[D]Matriz V:\n");
>>   print_matrix(V);
>> }
>>
>> void print_matrix(gsl_matrix *A) {
>>   int i, j;
>>
>>   for (i = 0; i<  A->size1; i++) {
>>     for (j = 0; j<  A->size2; j++) {
>>       printf("\t%.8f", gsl_matrix_get(A, i, j));
>>     }
>>     printf("\n");
>>   }
>> }
>>
>>
>>
>> Thanks you,
>>
>> MiguelGT
>> ______________________________**_________________
>> Bug-gsl mailing list
>> address@hidden
>> https://lists.gnu.org/mailman/**listinfo/bug-gsl<https://lists.gnu.org/mailman/listinfo/bug-gsl>
>>
>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]