[Top][All Lists]
[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 = β
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;
}
- [Help-gsl] Finding roots of polynomial - how?,
Anders Misfeldt <=