help-gsl
[Top][All Lists]
Advanced

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

[Help-gsl] Finding roots of polynomial - how?


From: Anders Misfeldt
Subject: [Help-gsl] Finding roots of polynomial - how?
Date: Wed, 12 Jan 2005 23:32:47 +0100
User-agent: Mozilla Thunderbird 1.0 (X11/20041207)

Hi,

I'm trying to find out how to find the roots of a 2nd degree polynomial using the Brent routine in GSL. When I run my program I get:

gsl: brent.c:74: ERROR: endpoints do not straddle y=0
Default GSL error handler invoked.
Aborted

What am I doing wrong (the code is written below)? How can I write out all the different roots?

Anders

CODE:
#include <stdio.h>
#include <gsl/gsl_errno.h>
#include <gsl/gsl_math.h>
#include <gsl/gsl_roots.h>

struct quadratic_params {
  double beta1,beta2,beta3;
};

double quadratic (double x, void *params) {
  struct quadratic_params *p
    = (struct quadratic_params *) params;
  double beta1 = p->beta1;
  double beta2 = p->beta2;
  double beta3 = p->beta3;
  return beta1*x*x+beta2*x+beta3;
}

int main (void) {
  int status;
  int iter = 0, max_iter = 1000;
  const gsl_root_fsolver_type *T;
  gsl_root_fsolver *s;
  double r = 0;
  double x_lo = -10.0, x_hi = 10.0;
  gsl_function F;
  F.function = &quadratic;
  T = gsl_root_fsolver_brent;
  s = gsl_root_fsolver_alloc (T);
  struct quadratic_params beta = {1.0 , -2.0, -3.0};
  F.params = &beta;
  gsl_root_fsolver_set (s, &F, x_lo, x_hi);
  do {
    iter++;
    status = gsl_root_fsolver_iterate (s);
    r = gsl_root_fsolver_root (s);
    x_lo = gsl_root_fsolver_x_lower (s);
    x_hi = gsl_root_fsolver_x_upper (s);
    status = gsl_root_test_interval (x_lo, x_hi,0, 0.001);
  }
  while (status == GSL_CONTINUE && iter < max_iter);
  printf("%g \n",r);
  return status;
}




reply via email to

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