#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define PI 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067



double epan(x)
double x;
{
double y;
if (x*x<1) y=3*(1-x*x)/4;
else y=0;
return y;
}



double gauss(x)
double x;
{
double y;
y=exp(-x*x/2)/sqrt(2*PI);
return y;
}



void freq_w(double x[][1], double nbx[1][1], double w[][1], double fct[][1])
{
register int i;
register int rx=nbx[0][0];
register double sumw;

sumw=0;
for(i=0;i<rx;i++) {
sumw=sumw+w[i][0];
fct[i][0]=0;
}

fct[0][0]=w[0][0]/sumw;
for(i=1;i<rx;i++) {
fct[i][0]=fct[i-1][0]+w[i][0]/sumw;
}
}




void kernel_epan_w(double x[][1], double y[][1], double nbx[1][1], double hh[1][1], double nbp[1][1], double xx[][1], double fct[][1])
{
register int i,j;
register int n=nbx[0][0];
register double first=x[0][0];
register double last=x[n-1][0];
register double h=hh[0][0];
register double sumw;

for(j=0;j<nbp[0][0];j++) {
xx[j][0]=0;
fct[j][0]=0;
sumw=0;
xx[j][0]=first+j*(last-first)/(nbp[0][0]-1);
for(i=0;i<n;i++) {
fct[j][0] = fct[j][0] + gauss((xx[j][0]-x[i][0])/h)*y[i][0]/(n*h);
sumw=sumw + epan((xx[j][0]-x[i][0])/h)/(n*h);
}
fct[j][0] = fct[j][0] / sumw;
}
}



void kernel_gauss_w(double x[][1], double y[][1], double nbx[1][1], double hh[1][1], double nbp[1][1], double xx[][1], double fct[][1])
{
register int i,j;
register int n=nbx[0][0];
register double first=x[0][0];
register double last=x[n-1][0];
register double h=hh[0][0];
register double sumw;

for(j=0;j<nbp[0][0];j++) {
xx[j][0]=0;
fct[j][0]=0;
sumw=0;
xx[j][0]=first+j*(last-first)/(nbp[0][0]-1);
for(i=0;i<n;i++) {
fct[j][0] = fct[j][0] + gauss((xx[j][0]-x[i][0])/h)*y[i][0]/(n*h);
sumw=sumw + gauss((xx[j][0]-x[i][0])/h)/(n*h);
}
fct[j][0] = fct[j][0] / sumw;
}
}
