File indexing completed on 2024-05-12 03:47:51
0001 /* 0002 File : nsl_fit.h 0003 Project : LabPlot 0004 Description : NSL (non)linear fitting functions 0005 -------------------------------------------------------------------- 0006 SPDX-FileCopyrightText: 2016 Stefan Gerlach <stefan.gerlach@uni.kn> 0007 SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 #ifndef NSL_FIT_H 0011 #define NSL_FIT_H 0012 0013 #define NSL_FIT_MODEL_CATEGORY_COUNT 5 0014 typedef enum { nsl_fit_model_basic, nsl_fit_model_peak, nsl_fit_model_growth, nsl_fit_model_distribution, nsl_fit_model_custom = 99 } nsl_fit_model_category; 0015 0016 #define NSL_FIT_MODEL_BASIC_COUNT 5 0017 typedef enum { 0018 nsl_fit_model_polynomial, 0019 nsl_fit_model_power, 0020 nsl_fit_model_exponential, 0021 nsl_fit_model_inverse_exponential, 0022 nsl_fit_model_fourier 0023 } nsl_fit_model_type_basic; 0024 extern const char* nsl_fit_model_basic_pic_name[]; 0025 #define NSL_FIT_MODEL_PEAK_COUNT 6 0026 typedef enum { 0027 nsl_fit_model_gaussian, 0028 nsl_fit_model_lorentz, 0029 nsl_fit_model_sech, 0030 nsl_fit_model_logistic, 0031 nsl_fit_model_voigt, 0032 nsl_fit_model_pseudovoigt1 0033 } nsl_fit_model_type_peak; 0034 extern const char* nsl_fit_model_peak_pic_name[]; 0035 #define NSL_FIT_MODEL_GROWTH_COUNT 8 0036 typedef enum { 0037 nsl_fit_model_atan, 0038 nsl_fit_model_tanh, 0039 nsl_fit_model_algebraic_sigmoid, 0040 nsl_fit_model_sigmoid, 0041 nsl_fit_model_erf, 0042 nsl_fit_model_hill, 0043 nsl_fit_model_gompertz, 0044 nsl_fit_model_gudermann 0045 } nsl_fit_model_type_growth; 0046 extern const char* nsl_fit_model_growth_pic_name[]; 0047 0048 extern const char* nsl_fit_model_category_name[]; 0049 extern const char* nsl_fit_model_basic_name[]; 0050 extern const char* nsl_fit_model_peak_name[]; 0051 extern const char* nsl_fit_model_growth_name[]; 0052 extern const char* nsl_fit_model_basic_equation[]; 0053 extern const char* nsl_fit_model_peak_equation[]; 0054 extern const char* nsl_fit_model_growth_equation[]; 0055 0056 #define NSL_FIT_WEIGHT_TYPE_COUNT 8 0057 typedef enum { 0058 nsl_fit_weight_no, /* w = 1 */ 0059 nsl_fit_weight_instrumental, /* w = 1/c^2 (Gaussian, Given errors): default */ 0060 nsl_fit_weight_direct, /* w = c */ 0061 nsl_fit_weight_inverse, /* w = 1/c */ 0062 nsl_fit_weight_statistical, /* w = 1/y (Poisson) */ 0063 nsl_fit_weight_statistical_fit, /* w = 1/Y (Poisson) */ 0064 nsl_fit_weight_relative, /* w = 1/y^2 (Variance) */ 0065 nsl_fit_weight_relative_fit, /* w = 1/Y^2 (Variance) */ 0066 } nsl_fit_weight_type; 0067 extern const char* nsl_fit_weight_type_name[]; 0068 0069 #define NSL_FIT_ALGORITHM_COUNT 2 0070 typedef enum { 0071 nsl_fit_algorithm_lm, /* Levenberg-Marquardt */ 0072 nsl_fit_algorithm_ml, /* Maximum Likelihood */ 0073 } nsl_fit_algorithm; 0074 extern const char* nsl_fit_algorithm_name[]; 0075 0076 /* convert unbounded variable x to bounded variable where bounds are [min, max] */ 0077 double nsl_fit_map_bound(double x, double min, double max); 0078 /* convert bounded variable x to unbounded variable where bounds are [min, max] */ 0079 double nsl_fit_map_unbound(double x, double min, double max); 0080 0081 /* model parameter derivatives */ 0082 /* basic */ 0083 double nsl_fit_model_polynomial_param_deriv(double x, int j, double weight); 0084 double nsl_fit_model_power1_param_deriv(unsigned int param, double x, double a, double b, double weight); 0085 double nsl_fit_model_power2_param_deriv(unsigned int param, double x, double b, double c, double weight); 0086 double nsl_fit_model_exponentialn_param_deriv(unsigned int param, double x, const double* p, double weight); 0087 double nsl_fit_model_inverse_exponential_param_deriv(unsigned int param, double x, double a, double b, double weight); 0088 double nsl_fit_model_fourier_param_deriv(unsigned int param, unsigned int degree, double x, double w, double weight); 0089 /* peak */ 0090 double nsl_fit_model_gaussian_param_deriv(unsigned int param, double x, double a, double s, double mu, double weight); 0091 double nsl_fit_model_lorentz_param_deriv(unsigned int param, double x, double a, double s, double t, double weight); 0092 double nsl_fit_model_sech_param_deriv(unsigned int param, double x, double a, double s, double mu, double weight); 0093 double nsl_fit_model_logistic_param_deriv(unsigned int param, double x, double a, double s, double mu, double weight); 0094 double nsl_fit_model_voigt_param_deriv(unsigned int param, double x, double a, double mu, double s, double g, double weight); 0095 double nsl_fit_model_pseudovoigt1_param_deriv(unsigned int param, double x, double a, double eta, double w, double mu, double weight); 0096 /* growth */ 0097 double nsl_fit_model_atan_param_deriv(unsigned int param, double x, double a, double mu, double s, double weight); 0098 double nsl_fit_model_tanh_param_deriv(unsigned int param, double x, double a, double mu, double s, double weight); 0099 double nsl_fit_model_algebraic_sigmoid_param_deriv(unsigned int param, double x, double a, double mu, double s, double weight); 0100 double nsl_fit_model_sigmoid_param_deriv(unsigned int param, double x, double a, double mu, double k, double weight); 0101 double nsl_fit_model_erf_param_deriv(unsigned int param, double x, double a, double mu, double s, double weight); 0102 double nsl_fit_model_hill_param_deriv(unsigned int param, double x, double a, double n, double s, double weight); 0103 double nsl_fit_model_gompertz_param_deriv(unsigned int param, double x, double a, double b, double c, double weight); 0104 double nsl_fit_model_gudermann_param_deriv(unsigned int param, double x, double a, double mu, double s, double weight); 0105 /* distributions */ 0106 double nsl_fit_model_gaussian_tail_param_deriv(unsigned int param, double x, double A, double s, double a, double mu, double weight); 0107 double nsl_fit_model_exponential_param_deriv(unsigned int param, double x, double a, double l, double mu, double weight); 0108 double nsl_fit_model_laplace_param_deriv(unsigned int param, double x, double a, double s, double mu, double weight); 0109 double nsl_fit_model_exp_pow_param_deriv(unsigned int param, double x, double a, double s, double b, double mu, double weight); 0110 double nsl_fit_model_poisson_param_deriv(unsigned int param, double x, double a, double l, double weight); 0111 double nsl_fit_model_lognormal_param_deriv(unsigned int param, double x, double a, double b, double mu, double weight); 0112 double nsl_fit_model_gamma_param_deriv(unsigned int param, double x, double a, double k, double t, double weight); 0113 double nsl_fit_model_flat_param_deriv(unsigned int param, double x, double A, double b, double a, double weight); 0114 double nsl_fit_model_rayleigh_param_deriv(unsigned int param, double x, double a, double s, double weight); 0115 double nsl_fit_model_rayleigh_tail_param_deriv(unsigned int param, double x, double a, double s, double mu, double weight); 0116 double nsl_fit_model_landau_param_deriv(unsigned int param, double x, double weight); 0117 double nsl_fit_model_chi_square_param_deriv(unsigned int param, double x, double a, double n, double weight); 0118 double nsl_fit_model_students_t_param_deriv(unsigned int param, double x, double a, double n, double weight); 0119 double nsl_fit_model_fdist_param_deriv(unsigned int param, double x, double a, double n1, double n2, double weight); 0120 double nsl_fit_model_beta_param_deriv(unsigned int param, double x, double A, double a, double b, double weight); 0121 double nsl_fit_model_pareto_param_deriv(unsigned int param, double x, double A, double a, double b, double weight); 0122 double nsl_fit_model_weibull_param_deriv(unsigned int param, double x, double a, double k, double l, double mu, double weight); 0123 double nsl_fit_model_gumbel1_param_deriv(unsigned int param, double x, double a, double s, double mu, double b, double weight); 0124 double nsl_fit_model_gumbel2_param_deriv(unsigned int param, double x, double A, double a, double b, double mu, double weight); 0125 double nsl_fit_model_binomial_param_deriv(unsigned int param, double x, double A, double p, double n, double weight); 0126 double nsl_fit_model_negative_binomial_param_deriv(unsigned int param, double k, double A, double p, double n, double weight); 0127 double nsl_fit_model_pascal_param_deriv(unsigned int param, double k, double A, double p, double n, double weight); 0128 double nsl_fit_model_geometric_param_deriv(unsigned int param, double k, double A, double p, double weight); 0129 double nsl_fit_model_hypergeometric_param_deriv(unsigned int param, double k, double A, double n1, double n2, double t, double weight); 0130 double nsl_fit_model_logarithmic_param_deriv(unsigned int param, double k, double A, double p, double weight); 0131 0132 double nsl_fit_model_maxwell_param_deriv(unsigned int param, double x, double a, double s, double weight); 0133 double nsl_fit_model_sech_dist_param_deriv(unsigned int param, double x, double a, double s, double mu, double weight); 0134 double nsl_fit_model_levy_param_deriv(unsigned int param, double x, double a, double g, double mu, double weight); 0135 double nsl_fit_model_frechet_param_deriv(unsigned int param, double x, double A, double g, double s, double mu, double weight); 0136 0137 #endif /* NSL_FIT_H */