Sunteți pe pagina 1din 4

/*Nombre del fichero: regresin_lineal.

c
Contenido: calcula una recta mediante el mtodo de regresin lineal.
Autor: David Nebra.
Fecha: 05/05/12.
*/
#include <stdio.h>
#include <math.h>
double suma (double *,int);
double suma_2 (double *,int);
double suma_xy (double *,double *,int);
double A (double,double,double,double,int);
double B (double,double,double,double,int);
void leer_lista_x (double *,int);
void leer_lista_y (double *,int);
void tabla (double [][5],int);
void def_tabla (double [][5],int, double *, double *);
double inc_A(double,double, double);
double suma_inc(int,double *, double *,double ,double);
double delta (int, double , double);
double inc_B (double, double, double);
int main()
{
int n;
double a,b,Inc_A,Inc_B;
printf("Cuantos datos hay (N)?:\n");
scanf("%d",&n);
double x[n];
double y[n];
leer_lista_x(x,n);
leer_lista_y(y,n);
double t[n+1][5];
def_tabla(t,n,x,y);
printf("\n\n");
printf("************************************************************************
****\n");
printf("X
Y
X^2
Y^2
X*Y\
n");
printf("________________________________________________________________________
____\n");
tabla(t,n);
printf("\n");
printf("************************************************************************
****\n\n");
a=A(suma(y,n),suma_2(x,n),suma(x,n),suma_xy(x,y,n),n);
b=B(suma_xy(x,y,n),suma(x,n),suma(y,n),suma_2(x,n),n);
printf("El valor de A es: %lf\n",a);
printf("El valor de B es: %lf\n\n",b);
Inc_A=inc_A(suma_inc(n,y,x,a,b), delta (n, suma_2(x,n),suma(x,n)), suma_2(x,n));
Inc_B=inc_B (suma_inc(n,y,x,a,b), delta (n, suma_2(x,n),suma(x,n)),n);

if(n>2)
{printf("La incertidumbre de A es: %lf\n",Inc_A);
printf("La incertidumbre de B es: %lf\n",Inc_B);
}
return 0;
}

void leer_lista_x (double *v,int n)


{
int i;
for (i=0;i<n;i++)
{
printf("Introduce el dato %d de X\n",i+1);
scanf("%lf",&v[i]);
}
}
void leer_lista_y (double *v,int n)
{
int i;
for (i=0;i<n;i++)
{
printf("Introduce el dato %d de Y\n",i+1);
scanf("%lf",&v[i]);
}
}
double suma (double *v,int n)
{
int i;
double suma=0;
for (i=0;i<n;i++)
{
suma=suma+v[i];
}
return suma;
}
double suma_2 (double *v,int n)
{
int i;
double suma=0;
for (i=0;i<n;i++)
{
suma=suma+v[i]*v[i];
}
return suma;
}
double suma_xy (double *x, double *y,int n)
{
int i;
double suma=0;
for (i=0;i<n;i++)
{

suma=suma+x[i]*y[i];
}
return suma;
}
double A (double y,double x2, double x, double xy,int n)
{
return (y*x2-x*xy)/(n*x2-pow(x,2));
}
double B(double xy, double x, double y, double x2, int n)
{
return (n*xy-x*y)/(n*x2-pow(x,2));
}
void tabla (double v[][5],int n)
{
int i,j;
for (i=0;i<n;i++)
{
printf("\n");
for (j=0;j<5;j++)
{
printf("%lf\t",v[i][j]);
}
}
printf("________________________________________________________________________
____\n");
for (j=0;j<5;j++)
{
printf("%lf\t",v[n][j]);
}
}
void def_tabla (double t[][5],int n,double x[],double y[])
{
int i;
for (i=0;i<n;i++)
{
t[i][0]=x[i];
}
t[n][0]=suma(x,n);
for (i=0;i<n;i++)
{
t[i][1]=y[i];
}
t[n][1]=suma(y,n);
for (i=0;i<n;i++)
{
t[i][2]=x[i]*x[i];
}
t[n][2]=suma_2(x,n);
for (i=0;i<n;i++)
{
t[i][3]=y[i]*y[i];
}
t[n][3]=suma_2(y,n);

for (i=0;i<n;i++)
{
t[i][4]=x[i]*y[i];
}
t[n][4]=suma_xy(x,y,n);
}
double suma_inc (int n,double *y, double *x,double A,double B)
{
int i;
double s=0;
for (i=0;i<n;i++)
{
s=s+pow((y[i]-A-B*x[i]),2);
}
return s/(n-2);
}
double delta (int n, double x2, double x)
{
return n*x2-pow(x,2);
}
double inc_A (double inc, double delta, double x2)
{
return sqrt((inc/delta)*x2);
}
double inc_B (double inc, double delta, double n)
{
return sqrt(n*inc/delta);
}

S-ar putea să vă placă și