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