00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef XSH_UTILS_POLYNOMIAL_H
00028 #define XSH_UTILS_POLYNOMIAL_H
00029
00030
00031
00032
00033
00034
00035 #include <cpl.h>
00036
00037
00038
00039
00040
00041 typedef struct _polynomial polynomial ;
00042
00043
00044
00045
00046
00047
00048 polynomial *xsh_polynomial_new(const cpl_polynomial *pol);
00049 polynomial *xsh_polynomial_new_zero(int dim);
00050 polynomial *xsh_polynomial_duplicate(const polynomial *p);
00051
00052
00053 polynomial *xsh_polynomial_convert_from_table(cpl_table *t);
00054 polynomial *xsh_polynomial_collapse(const polynomial *p, int varno, double value);
00055 polynomial * xsh_polynomial_fit_1d(const cpl_vector * x_pos,
00056 const cpl_vector * values,
00057 const cpl_vector * sigmas,
00058 int poly_deg,
00059 double * mse);
00060 polynomial *xsh_polynomial_fit_2d(const cpl_bivector * xy_pos,
00061 const cpl_vector * values,
00062 const cpl_vector * sigmas,
00063 int poly_deg1,
00064 int poly_deg2,
00065 double * mse,
00066 double * red_chisq,
00067 polynomial ** variance);
00068
00069 polynomial *xsh_polynomial_add_2d(const polynomial *p1, const polynomial *p2);
00070
00071 int xsh_polynomial_get_degree(const polynomial *p);
00072
00073 void xsh_polynomial_delete(polynomial **p);
00074 void xsh_polynomial_delete_const(const polynomial **p);
00075
00076 cpl_table *xsh_polynomial_convert_to_table(const polynomial *p);
00077 int xsh_polynomial_get_dimension(const polynomial *p);
00078 void xsh_polynomial_dump(const polynomial *p, FILE *stream);
00079 cpl_error_code xsh_polynomial_shift(polynomial *p, int varno, double shift);
00080 cpl_error_code xsh_polynomial_rescale(polynomial *p, int varno, double scale);
00081 double xsh_polynomial_get_coeff_1d(const polynomial *p, int degree);
00082 double xsh_polynomial_get_coeff_2d(const polynomial *p,
00083 int degree1, int degree2);
00084 double xsh_polynomial_evaluate_1d(const polynomial *p, double x);
00085 double xsh_polynomial_evaluate_2d(const polynomial *p, double x1, double x2);
00086 double xsh_polynomial_solve_1d(const polynomial *p, double value,
00087 double guess, int multiplicity);
00088 double xsh_polynomial_solve_2d(const polynomial *p, double value,
00089 double guess, int multiplicity,
00090 int varno, double x_value);
00091 double xsh_polynomial_derivative_1d(const polynomial *p, double x);
00092 double xsh_polynomial_derivative_2d(const polynomial *p, double x1,
00093 double x2, int varno);
00094 cpl_error_code xsh_polynomial_derivative(polynomial *p, int varno);
00095
00096 #endif