Go to the documentation of this file.
42 #include <gsl/gsl_math.h>
43 #include <gsl/gsl_complex_math.h>
44 #include <gsl/gsl_complex.h>
45 #include <gsl/gsl_poly.h>
46 #include <o2scl/constants.h>
47 #include <o2scl/err_hnd.h>
49 #ifndef DOXYGEN_NO_O2NS
67 virtual int solve_r(
const double a2,
const double b2,
const double c2,
68 double &
x1,
double &
x2)=0;
71 const char *
type() {
return "quadratic_real"; }
86 virtual int solve_r(
const double a2,
const double b2,
const double c2,
87 double &
x1,
double &
x2);
92 virtual int solve_rc(
const double a2,
const double b2,
const double c2,
93 std::complex<double> &
x1,
94 std::complex<double> &
x2)=0;
97 const char *
type() {
return "quadratic_real_coeff"; }
111 virtual int solve_r(
const double a2,
const double b2,
const double c2,
112 double &
x1,
double &
x2);
117 virtual int solve_rc(
const double a2,
const double b2,
const double c2,
118 std::complex<double> &
x1, std::complex<double> &
x2);
123 virtual int solve_c(
const std::complex<double> a2,
124 const std::complex<double> b2,
125 const std::complex<double> c2,
126 std::complex<double> &
x1, std::complex<double> &
x2)=0;
129 const char *
type() {
return "quadratic_complex"; }
146 virtual int solve_r(
const double a3,
const double b3,
const double c3,
147 const double d3,
double &
x1,
double &
x2,
151 const char *
type() {
return "cubic_real"; }
167 virtual int solve_r(
const double a3,
const double b3,
const double c3,
168 const double d3,
double &
x1,
double &
x2,
double &
x3);
175 virtual int solve_rc(
const double a3,
const double b3,
const double c3,
176 const double d3,
double &
x1, std::complex<double> &
x2,
177 std::complex<double> &
x3)=0;
180 const char *
type() {
return "cubic_real_coeff"; }
196 virtual int solve_r(
const double a3,
const double b3,
const double c3,
197 const double d3,
double &
x1,
double &
x2,
double &
x3);
204 virtual int solve_rc(
const double a3,
const double b3,
const double c3,
205 const double d3,
double &
x1, std::complex<double> &
x2,
206 std::complex<double> &
x3);
213 virtual int solve_c(
const std::complex<double> a3,
214 const std::complex<double> b3,
215 const std::complex<double> c3,
216 const std::complex<double> d3,
217 std::complex<double> &
x1, std::complex<double> &
x2,
218 std::complex<double> &
x3)=0;
221 const char *
type() {
return "cubic_complex"; }
238 virtual int solve_r(
const double a4,
const double b4,
const double c4,
239 const double d4,
const double e4,
240 double &
x1,
double &
x2,
241 double &
x3,
double &
x4)=0;
252 virtual double disc_r(
const double a,
const double b,
const double c,
253 const double d,
const double e);
256 const char *
type() {
return "quartic_real"; }
273 virtual int solve_r(
const double a4,
const double b4,
const double c4,
274 const double d4,
const double e4,
double &
x1,
275 double &
x2,
double &
x3,
double &
x4);
282 virtual int solve_rc(
const double a4,
const double b4,
const double c4,
283 const double d4,
const double e4,
284 std::complex<double> &
x1, std::complex<double> &
x2,
285 std::complex<double> &
x3,
286 std::complex<double> &
x4)=0;
289 const char *
type() {
return "quartic_real_coeff"; }
306 virtual int solve_r(
const double a4,
const double b4,
const double c4,
307 const double d4,
const double e4,
double &
x1,
309 double &
x3,
double &
x4);
316 virtual int solve_rc(
const double a4,
const double b4,
const double c4,
317 const double d4,
const double e4,
318 std::complex<double> &
x1, std::complex<double> &
x2,
319 std::complex<double> &
x3, std::complex<double> &
x4);
326 virtual int solve_c(
const std::complex<double> a4,
327 const std::complex<double> b4,
328 const std::complex<double> c4,
329 const std::complex<double> d4,
330 const std::complex<double> e4,
331 std::complex<double> &
x1,
332 std::complex<double> &
x2, std::complex<double> &
x3,
333 std::complex<double> &
x4)=0;
336 const char *
type() {
return "quartic_complex"; }
355 virtual int solve_rc(
int n,
const double co[],
356 std::complex<double> ro[])=0;
359 const char *
type() {
return "poly_real_coeff"; }
378 virtual int solve_c(
int n,
const std::complex<double> co[],
379 std::complex<double> ro[])=0;
382 virtual int polish_c(
int n,
const std::complex<double> co[],
383 std::complex<double> *ro)=0;
386 const char *
type() {
return "poly_complex"; }
422 virtual int solve_rc(
const double a3,
const double b3,
const double c3,
423 const double d3,
double &
x1,
424 std::complex<double> &
x2, std::complex<double> &
x3);
447 virtual int rrteq3(
double r,
double s,
double t,
double x[],
double &d);
450 const char *
type() {
return "cubic_real_coeff_cern"; }
466 virtual int solve_rc(
const double a4,
const double b4,
const double c4,
467 const double d4,
const double e4,
468 std::complex<double> &
x1, std::complex<double> &
x2,
469 std::complex<double> &
x3, std::complex<double> &
x4);
472 virtual int rrteq4(
double a,
double b,
double c,
double d,
473 std::complex<double> z[],
double &dc,
477 const char *
type() {
return "quartic_real_coeff_cern"; }
479 #ifndef DOXYGEN_INTERNAL
501 virtual int solve_rc(
const double a2,
const double b2,
const double c2,
502 std::complex<double> &
x1, std::complex<double> &
x2);
505 const char *
type() {
return "quadratic_real_coeff_gsl"; }
522 virtual int solve_rc(
const double a3,
const double b3,
const double c3,
523 const double d3,
double &
x1,
524 std::complex<double> &
x2, std::complex<double> &
x3);
527 const char *
type() {
return "cubic_real_coeff_gsl"; }
540 gsl_complex *z0, gsl_complex *z1,
574 virtual int solve_r(
const double a4,
const double b4,
const double c4,
575 const double d4,
const double e4,
double &
x1,
576 double &
x2,
double &
x3,
double &
x4);
579 const char *
type() {
return "quartic_real_gsl"; }
611 virtual int solve_r(
const double a4,
const double b4,
const double c4,
612 const double d4,
const double e4,
double &
x1,
614 double &
x3,
double &
x4);
617 const char *
type() {
return "quartic_real_gsl2"; }
638 virtual int solve_rc(
int n,
const double co[],
639 std::complex<double> ro[]);
643 virtual int solve_rc(
const double a3,
const double b3,
const double c3,
644 const double d3,
double &
x1,
645 std::complex<double> &
x2,
646 std::complex<double> &
x3);
650 virtual int solve_rc(
const double a2,
const double b2,
const double c2,
651 std::complex<double> &
x1,
652 std::complex<double> &
x2);
656 virtual int solve_rc(
const double a4,
const double b4,
const double c4,
657 const double d4,
const double e4,
658 std::complex<double> &
x1, std::complex<double> &
x2,
659 std::complex<double> &
x3, std::complex<double> &
x4);
662 const char *
type() {
return "poly_real_coeff_gsl"; }
666 #ifndef DOXYGEN_INTERNAL
669 gsl_poly_complex_workspace *
w2;
672 gsl_poly_complex_workspace *
w3;
675 gsl_poly_complex_workspace *
w4;
678 gsl_poly_complex_workspace *
wgen;
698 virtual int solve_c(
const std::complex<double> a2,
699 const std::complex<double> b2,
700 const std::complex<double> c2,
701 std::complex<double> &
x1, std::complex<double> &
x2);
704 const char *
type() {
return "quadratic_complex_std"; }
720 virtual int solve_c(
const std::complex<double> a3,
721 const std::complex<double> b3,
722 const std::complex<double> c3,
723 const std::complex<double> d3,
724 std::complex<double> &
x1, std::complex<double> &
x2,
725 std::complex<double> &
x3);
728 const char *
type() {
return "cubic_complex_std"; }
743 virtual int solve_r(
const double a4,
const double b4,
const double c4,
744 const double d4,
const double e4,
double &
x1,
745 double &
x2,
double &
x3,
double &
x4);
748 const char *
type() {
return "quartic_real_simple"; }
769 virtual int solve_c(
const std::complex<double> a4,
770 const std::complex<double> b4,
771 const std::complex<double> c4,
772 const std::complex<double> d4,
773 const std::complex<double> e4,
774 std::complex<double> &
x1,
775 std::complex<double> &
x2,
776 std::complex<double> &
x3,
777 std::complex<double> &
x4);
780 const char *
type() {
return "quartic_complex_simple"; }
782 #ifndef DOXYGEN_NO_O2NS
793 #ifndef DOXYGEN_NO_O2NS
Solve a cubic polynomial with complex coefficients and complex roots [abstract base].
virtual int solve_r(const double a2, const double b2, const double c2, double &x1, double &x2)
Solves the polynomial giving the two solutions and .
virtual int solve_rc(int n, const double co[], std::complex< double > ro[])=0
Solve the n-th order polynomial.
const char * type()
Return a string denoting the type ("cubic_complex")
const char * type()
Return a string denoting the type ("cubic_real")
const char * type()
Return a string denoting the type ("poly_complex")
virtual int solve_c(const std::complex< double > a2, const std::complex< double > b2, const std::complex< double > c2, std::complex< double > &x1, std::complex< double > &x2)=0
Solves the complex polynomial giving the two complex solutions and .
virtual int rrteq4(double a, double b, double c, double d, std::complex< double > z[], double &dc, int &mt)
The CERNLIB-like interface.
Solve a general polynomial with real coefficients and complex roots [abstract base].
const char * type()
Return a string denoting the type ("quartic_complex")
const char * type()
Return a string denoting the type ("quartic_real")
const char * type()
Return a string denoting the type ("cubic_real_coeff_cern")
Solve a cubic with real coefficients and complex roots (CERNLIB)
virtual int solve_rc(int n, const double co[], std::complex< double > ro[])
Solve a generic polynomial given n+1 coefficients.
virtual int solve_rc(const double a2, const double b2, const double c2, std::complex< double > &x1, std::complex< double > &x2)=0
Solves the polynomial giving the two complex solutions and .
virtual int solve_r(const double a4, const double b4, const double c4, const double d4, const double e4, double &x1, double &x2, double &x3, double &x4)
Solves the polynomial giving the four solutions , , , and .
Solve a cubic polynomial with real coefficients and complex roots [abstract base].
cubic_complex_std cub_obj
The object to solve for the associated cubic.
gsl_poly_complex_workspace * w2
Workspace for quadratic polynomials.
virtual int solve_rc(const double a3, const double b3, const double c3, const double d3, double &x1, std::complex< double > &x2, std::complex< double > &x3)
Solves the polynomial giving the real solution and two complex solutions and .
const char * type()
Return a string denoting the type ("quartic_complex_simple")
Solve a quadratic polynomial with complex coefficients and complex roots [abstract base].
Solve a cubic with real coefficients and complex roots (GSL)
Solve a general polynomial with complex coefficients [abstract base].
Solve a quartic with real coefficients and real roots (GSL)
bool improve_scale
Improve algorithm for poorly-scaled roots (default true)
virtual int rrteq3(double r, double s, double t, double x[], double &d)
The CERNLIB-like interface.
virtual int solve_c(int n, const std::complex< double > co[], std::complex< double > ro[])=0
Solve the n-th order polynomial.
The main O<span style='position: relative; top: 0.3em; font-size: 0.8em'>2</span>scl O$_2$scl names...
virtual int solve_rc(const double a4, const double b4, const double c4, const double d4, const double e4, std::complex< double > &x1, std::complex< double > &x2, std::complex< double > &x3, std::complex< double > &x4)
Solves the polynomial giving the four complex solutions , , , and .
virtual int solve_rc(const double a3, const double b3, const double c3, const double d3, double &x1, std::complex< double > &x2, std::complex< double > &x3)
Solves the polynomial giving the real solution and two complex solutions , and .
const char * type()
Return a string denoting the type ("quartic_real_coeff_cern")
const char * type()
Return a string denoting the type ("quadratic_real_coeff_gsl")
static const double x4[22]
const char * type()
Return a string denoting the type ("cubic_real_coeff_gsl")
double cube_root_tol
A tolerance for determining the proper cube root (default )
const char * type()
Return a string denoting the type ("quadratic_complex")
Solve a quartic with real coefficients and complex roots (CERNLIB)
virtual int solve_rc(const double a2, const double b2, const double c2, std::complex< double > &x1, std::complex< double > &x2)
Solves the polynomial giving the two complex solutions and .
Solve a quadratic with real coefficients and complex roots (GSL)
double cube_root_tol
A tolerance for determining the proper cube root (default )
virtual int solve_rc(const double a4, const double b4, const double c4, const double d4, const double e4, std::complex< double > &x1, std::complex< double > &x2, std::complex< double > &x3, std::complex< double > &x4)
Solves the polynomial giving the four complex solutions , , , and .
virtual int solve_rc(const double a2, const double b2, const double c2, std::complex< double > &x1, std::complex< double > &x2)
Solves the polynomial giving the two complex solutions and .
static const double x2[5]
virtual int solve_rc(const double a4, const double b4, const double c4, const double d4, const double e4, std::complex< double > &x1, std::complex< double > &x2, std::complex< double > &x3, std::complex< double > &x4)=0
Solves the polynomial giving the four complex solutions , , , and .
Solve a quartic polynomial with complex coefficients and complex roots [abstract base].
Solve a quartic with real coefficients and real roots.
const char * type()
Return a string denoting the type ("quadratic_real_coeff")
virtual int solve_r(const double a3, const double b3, const double c3, const double d3, double &x1, double &x2, double &x3)=0
Solves the polynomial giving the three solutions , , and .
virtual int solve_r(const double a2, const double b2, const double c2, double &x1, double &x2)=0
Solves the polynomial giving the two solutions and .
virtual int solve_r(const double a4, const double b4, const double c4, const double d4, const double e4, double &x1, double &x2, double &x3, double &x4)
Solves the polynomial giving the four solutions , , , and .
virtual int solve_c(const std::complex< double > a3, const std::complex< double > b3, const std::complex< double > c3, const std::complex< double > d3, std::complex< double > &x1, std::complex< double > &x2, std::complex< double > &x3)
Solves the complex polynomial giving the three complex solutions , , and .
virtual int solve_r(const double a4, const double b4, const double c4, const double d4, const double e4, double &x1, double &x2, double &x3, double &x4)
Solves the polynomial giving the four real solutions , , , and .
static const double x1[5]
gsl_poly_complex_workspace * w4
Workspace for quartic polynomials.
virtual int solve_c(const std::complex< double > a4, const std::complex< double > b4, const std::complex< double > c4, const std::complex< double > d4, const std::complex< double > e4, std::complex< double > &x1, std::complex< double > &x2, std::complex< double > &x3, std::complex< double > &x4)=0
Solves the complex polynomial giving the four complex solutions , , , and .
virtual int solve_r(const double a4, const double b4, const double c4, const double d4, const double e4, double &x1, double &x2, double &x3, double &x4)
Solves the polynomial giving the four real solutions , , , and .
cubic_real_coeff_cern cub_obj
The object to solve for the associated cubic.
const char * type()
Return a string denoting the type ("quartic_real_simple")
virtual int solve_r(const double a4, const double b4, const double c4, const double d4, const double e4, double &x1, double &x2, double &x3, double &x4)
Solves the polynomial giving the four solutions , , , and .
Solve a quartic polynomial with real coefficients and real roots [abstract base].
gsl_poly_complex_workspace * wgen
Workspace for general polynomials.
virtual int solve_c(const std::complex< double > a2, const std::complex< double > b2, const std::complex< double > c2, std::complex< double > &x1, std::complex< double > &x2)
Solves the complex polynomial giving the two complex solutions and .
const char * type()
Return a string denoting the type ("quadratic_complex_std")
Solve a cubic polynomial with real coefficients and real roots [abstract base].
Solve a quartic with complex coefficients and complex roots.
Solve a quadratic with complex coefficients and complex roots.
const char * type()
Return a string denoting the type ("poly_real_coeff_gsl")
const char * type()
Return a string denoting the type ("quadratic_real")
virtual int polish_c(int n, const std::complex< double > co[], std::complex< double > *ro)=0
Polish the roots.
Solve a quadratic polynomial with real coefficients and real roots [abstract base].
double eps
Numerical tolerance (default )
virtual int solve_c(const std::complex< double > a3, const std::complex< double > b3, const std::complex< double > c3, const std::complex< double > d3, std::complex< double > &x1, std::complex< double > &x2, std::complex< double > &x3)=0
Solves the complex polynomial giving the three complex solutions , , and .
virtual int solve_rc(const double a3, const double b3, const double c3, const double d3, double &x1, std::complex< double > &x2, std::complex< double > &x3)=0
Solves the polynomial giving the real solution and two complex solutions and .
Solve a general polynomial with real coefficients (GSL)
virtual double disc_r(const double a, const double b, const double c, const double d, const double e)
Compute the discriminant.
const char * type()
Return a string denoting the type ("cubic_real_coeff")
const char * type()
Return a string denoting the type ("quartic_real_gsl")
double cube_root_tol
A tolerance for determining the proper cube root (default )
const char * type()
Return a string denoting the type ("cubic_complex_std")
const char * type()
Return a string denoting the type ("quartic_real_gsl2")
virtual int solve_r(const double a3, const double b3, const double c3, const double d3, double &x1, double &x2, double &x3)
Solves the polynomial giving the three solutions , , and .
const char * type()
Return a string denoting the type ("poly_real_coeff")
double delta
Numerical tolerance (default )
Solve a quartic polynomial with real coefficients and complex roots [abstract base].
Solve a cubic with complex coefficients and complex roots.
virtual int solve_r(const double a2, const double b2, const double c2, double &x1, double &x2)
Solves the polynomial giving the two solutions and .
const char * type()
Return a string denoting the type ("quartic_real_coeff")
virtual int solve_rc(const double a3, const double b3, const double c3, const double d3, double &x1, std::complex< double > &x2, std::complex< double > &x3)
Solves the polynomial giving the real solution and two complex solutions and .
Solve a quartic with real coefficients and real roots (GSL)
Solve a quadratic polynomial with real coefficients and complex roots [abstract base].
virtual int solve_r(const double a4, const double b4, const double c4, const double d4, const double e4, double &x1, double &x2, double &x3, double &x4)=0
Solves the polynomial giving the four solutions , , , and .
int gsl_poly_complex_solve_cubic2(double a, double b, double c, gsl_complex *z0, gsl_complex *z1, gsl_complex *z2)
An alternative to gsl_poly_complex_solve_cubic()
virtual int solve_r(const double a3, const double b3, const double c3, const double d3, double &x1, double &x2, double &x3)
Solves the polynomial giving the three solutions , , and .
virtual int solve_c(const std::complex< double > a4, const std::complex< double > b4, const std::complex< double > c4, const std::complex< double > d4, const std::complex< double > e4, std::complex< double > &x1, std::complex< double > &x2, std::complex< double > &x3, std::complex< double > &x4)
Solves the complex polynomial giving the four complex solutions , , , and .
gsl_poly_complex_workspace * w3
Workspace for cubic polynomials.
int gen_size
The size of the workspace wgen.
static const double x3[11]
Documentation generated with Doxygen. Provided under the
GNU Free Documentation License (see License Information).