Last Update: Oct. 4, 2007
/***********************************************/
/* T.Kouya's GSL sample program collection */
/* Solving Algebraic Equations */
/* Written by Tomonori Kouya */
/* */
/* Version 0.01: 2007-10-01 */
/***********************************************/
#include <stdio.h>
#include <gsl/gsl_complex.h>
#include <gsl/gsl_poly.h>
int main(void)
{
int i;
double coef[128], sol[128];
gsl_complex csol[128];
/* Solve Linear and Quadratic Equations */
printf("Solve Quadratic Equations\n");
/* (1) 3 * x - 2 = 0 */
gsl_poly_solve_quadratic(0.0, 3.0, -2.0, &sol[0], NULL);
printf("x = %g\n", sol[0]);
/* (2) 2 * x^2 - 3 * x - 5 = 0 */
gsl_poly_solve_quadratic(2.0, -3.0, -5.0, &sol[0], &sol[1]);
printf("x1, x2 = %g, %g\n", sol[0], sol[1]);
/* (3) 3 * x^2 - 5 * x + 9 = 0 */
gsl_poly_complex_solve_quadratic(3.0, -5.0, 9.0, &csol[0], &csol[1]);
printf("re(x1), im(x1) = %g, %g\n", GSL_REAL(csol[0]), GSL_IMAG(csol[0]));
printf("re(x2), im(x2) = %g, %g\n", GSL_REAL(csol[1]), GSL_IMAG(csol[1]));
/* Solve Cubic Equation */
printf("\nSolve Monic Cubic Equation\n");
/* x^3 + 2 * x^2 + 3 * x + 4 = 0 */
gsl_poly_complex_solve_cubic(2.0, 3.0, 4.0, &csol[0], &csol[1], &csol[2]);
for(i = 0; i < 3; i++)
printf("re(x%d), im(x%d) = %g, %g\n", i, i, GSL_REAL(csol[i]), GSL_IMAG(csol[i]));
return 0;
}
$ ./2and3rd_degree_eq Solve Quadratic Equations x = 0.666667 x1, x2 = -1, 2.5 re(x1), im(x1) = 0.833333, -1.51841 re(x2), im(x2) = 0.833333, 1.51841 Solve Monic Cubic Equation re(x0), im(x0) = -1.65063, 0 re(x1), im(x1) = -0.174685, -1.54687 re(x2), im(x2) = -0.174685, 1.54687