Main Page | Data Structures | File List | Data Fields | Globals

ukr.h

Go to the documentation of this file.
00001 
00023 #ifndef __UKR_H
00024 #define __UKR_H
00025 
00027 typedef enum {
00028    UKR_KERNEL_UNKNOWN=0,      
00029    UKR_KERNEL_GAUSSIAN=1,     
00030    UKR_KERNEL_SPARSE=100,     
00031    UKR_KERNEL_QUARTIC=102,    
00032    UKR_KERNEL_TRIWEIGHT=103   
00033 } UKR_Kernel;
00034 
00036 typedef enum {
00037    UKR_LOSS_UNKNOWN=-1,    
00038    UKR_LOSS_L2=0,          
00039    UKR_LOSS_HUBER=1,       
00040    UKR_LOSS_EPS2=2,        
00041    UKR_LOSS_EPS=3          
00042 } UKR_Loss;
00043 
00045 typedef struct {
00046    const double *X;        
00047    const double *Y;        
00048    const double *G;        
00049    int q;                  
00050    int d;                  
00051    int N;                  
00052    const int *MaskIs;      
00053    const int *MaskJs;      
00054    const double *epsilon;  
00055    int epsM;               
00056    int epsN;               
00057    UKR_Kernel kernel;      
00058    UKR_Loss lossFunction;  
00059    double eta;             
00060 } UKR_Model;
00061 
00063 typedef struct {
00064    const double *y;        
00065    const double *KyY;      
00066    double Kyy;             
00067    int *ir;                
00068    int *nz;                
00069    double *b;              
00070    double *p;              
00071    double *fm;             
00072    double *J;              
00073    double *GJ;             
00074 } UKR_G_Struct;
00075 
00076 #ifdef __cplusplus
00077 extern "C" {
00078 #endif /* __cplusplus */
00079 
00087 typedef double (*Ukr_bp_dists_sparse)(int,const double *,double *,double *,int *,int *,int,const int*,int);
00088 
00095 typedef double (*Ukr_bp_dists_full)(int,const double *,double *,double *,int,const int*,int);
00096 
00103 Ukr_bp_dists_sparse ukr_get_kernel_sparse(UKR_Kernel kernel);
00104 
00110 Ukr_bp_dists_full ukr_get_kernel_full(UKR_Kernel kernel);
00111 
00118 double ukr_f(double *f,const double *x,UKR_Model model);
00119 
00128 double ukr_fJ(double *f,double *J,const double *x,UKR_Model model);
00129 
00146 double ukr_bp_dists_gaussian(int M,const double *dist,double *b,double *p,int numExclude,const int *exclude,int normalize);
00147 
00167 double ukr_bp_dists_quartic(int M,const double *dist,double *b,double *p,int *ir,int *nz,int numExclude,const int *exclude,int normalize);
00168 
00172 double ukr_bp_dists_triweight(int M,const double *dist,double *b,double *p,int *ir,int *nz,int numExclude,const int *exclude,int normalize);
00173 
00182 double ukr_loss_function(int col, double *yr,const double *y,UKR_Model model);
00183 
00188 UKR_Kernel ukr_kernel_by_name(const char *name);
00189 
00194 UKR_Loss ukr_loss_by_name(const char *name);
00195 
00206 double ukr_errgrad(double *grad,UKR_Model model,int forceCV);
00207 
00220 double ukr_errgrad_scale(double *grad,const double *s,UKR_Model model,int forceCV);
00221 
00222 int ukr_dens_penalty(double *pen,double *grad,UKR_Model model);
00223 int ukr_densvar_penalty(double *pen,double *grad,UKR_Model model);
00224 
00225 int ukr_aux_dens_penalty_sparse(double *pen,double *grad,UKR_Model model);
00226 int ukr_aux_dens_penalty_full(double *pen,double *grad,UKR_Model model);
00227 int ukr_aux_densvar_penalty_sparse(double *pen,double *grad,UKR_Model model);
00228 int ukr_aux_densvar_penalty_full(double *pen,double *grad,UKR_Model model);
00229 
00230 double ukr_aux_errgrad_sparse(double *grad,UKR_Model model,int forceCV);
00231 double ukr_aux_errgrad_full(double *grad,UKR_Model model,int forceCV);
00232 double ukr_aux_errgrad_scale_sparse(double *grad,const double *s,UKR_Model model,int forceCV);
00233 double ukr_aux_errgrad_scale_full(double *grad,const double *s,UKR_Model model,int forceCV);
00234 double ukr_aux_M(int col,double *M,double *B,double *tmp_d,UKR_Model model);
00235 double ukr_aux_M_sp(int col,double *M,const double *B,const int *ir,int nz,double *tmp_d,UKR_Model model);
00236 void ukr_aux_R(double *R,const double *B,const double *P,const double *M,int n);
00237 void ukr_aux_addXv_sp(double *u,const double *X,const double *v,const int *ir,int nz,int q);
00238 void ukr_aux_add_xvT_sp(double *U,const double *x,const double *v,const int *ir,int nz,int q);
00239 void ukr_aux_addXv(double *u,const double *X,const double *v,int q,int N);
00240 void ukr_aux_add_xvT(double *U,const double *x,const double *v,int q,int N);
00241 void ukr_aux_subX_diag(double *grad, const double *X, const double *sumR, int q, int N);
00242 void ukr_aux_scaleX(double *sX,double *XX,const double *X,const double *s,int q,int N);
00243 
00244 /* Auxiliary functions used for calculating f(x;X) and its Jacobian, as well as the Jacobian of b(x;X) */
00245 void ukr_aux_Jb_sparse(double *J,const double *b,const double *p,const double *x,const int *ir,int nnz,UKR_Model model);
00246 void ukr_aux_Jb_full(double *J,const double *b,const double *p,const double *x,UKR_Model model);
00247 void ukr_aux_f_sparse(double *f,const double *b,const int *ir,int nz,UKR_Model model);
00248 void ukr_aux_f_full(double *f,const double *b,UKR_Model model);
00249 void ukr_aux_Jf_sparse(double *Jf,const double *b,const double *p,const double *x,const int *ir,int nnz,UKR_Model model);
00250 void ukr_aux_Jf_full(double *Jf,const double *b,const double *p,const double *x,UKR_Model model);
00251 
00252 int ukr_aux_alloc_g_struct(UKR_Model model, UKR_G_Struct *gs);
00253 void ukr_aux_free_g_struct(UKR_G_Struct gs);
00254 
00255 double ukr_g_congrad(double *g,const double *x,UKR_Model model, UKR_G_Struct gs);
00256 double ukr_g_errgradhess(double *g,double *H,const double *x,UKR_Model model, UKR_G_Struct ukr_gs,int bp_ready);
00257 void ukr_aux_normalize_gs(UKR_Model model, UKR_G_Struct ukr_gs);
00258 
00259 #ifdef __cplusplus
00260 }
00261 #endif /* __cplusplus */
00262 
00263 #endif

Generated on Fri Aug 25 18:00:11 2006 for UKR Toolbox by  doxygen 1.4.3