bug-gsl
[Top][All Lists]
Advanced

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

Re: [Bug-gsl] Bug in gsl_poly_complex_solve() producing inaccurate roots


From: salman
Subject: Re: [Bug-gsl] Bug in gsl_poly_complex_solve() producing inaccurate roots of polynomials
Date: Tue, 11 Dec 2007 12:23:42 -0600
User-agent: Thunderbird 2.0.0.9 (Macintosh/20071031)

Hi Brian,

Here is a program that reproduces the results:

#include <stdio.h>
#include <gsl_poly.h>

int main(int argc, char **argv) {
    int i;
    double coeffs[4]={1, -5, -25, 125};
    double roots[6];
    gsl_poly_complex_workspace *u = gsl_poly_complex_workspace_alloc(4);
    gsl_poly_complex_solve(coeffs, 4, u, roots);
    gsl_poly_complex_workspace_free(u);
    for(i=0; i<3; i++)
        printf("\t %.5f, %.5f\n", roots[i], roots[2*i+1]);
    printf("\t------------\n");
    coeffs[0]=1; coeffs[1]=-1; coeffs[2]=-5; coeffs[3]=125;
    gsl_poly_complex_workspace *w = gsl_poly_complex_workspace_alloc(4);
    gsl_poly_complex_solve(coeffs, 4, w, roots);
    gsl_poly_complex_workspace_free(w);
    for(i=0; i<3; i++)
        printf("\t %.5f, %.5f\n", roots[i], roots[2*i+1]);
}

The output of the program is:

         0.20000, 0.00000
         0.00000, -0.00000
         0.20000, 0.00000
        ------------
         -0.20000, 0.00000
         0.00000, 0.16000
         0.12000, -0.16000

But the first polynomial's roots are 0.2, 0.2, and -0.2. The second polynomial has roots 0.2, 0.12+0.16*i, and 0.12-0.16*i.

I'm running Ubuntu with kernel 2.6.20-16-386 Version 2 and GSL 1.8-3. I compiled using g++ 4.1.2-1. Is there any other info you need?

Brian Gough wrote:
At Mon, 10 Dec 2007 16:41:31 -0600 (CST),
salman wrote:

I am using gsl_poly_complex_solve() to determine the roots of some basic polynomials. The results I am getting are fairly off from the correct roots. Here is the relevant section of the code (deg_L is the degree of the polynomial I am considering):

   gsl_poly_complex_workspace *u=gsl_poly_complex_workspace_alloc(deg_L+1);
   gsl_poly_complex_solve(coeffs, deg_L+1, u, roots);
   gsl_poly_complex_workspace_free(u);
   for(i=0; i<deg_L; i++)
     printf("\t %.5f, %.5f\n", roots[i], roots[2*i+1]);


Thanks for your email.  Please can you send a complete example program
so we can reproduce the problem.  Also, details of which version of
GSL you are using and operating system etc.





reply via email to

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