miércoles, 5 de diciembre de 2012

MÍNIMOS CUADRADOS

En este método  es para encontrar digamos   un ajuste donde una familia de puntos coincida y se encuentren el la misma posición o alineados  en el siguiente figura  se puede apreciar mejor el concepto


Con esta gráfica se aprecia mejor el concepto que acabamos de mencionar notemos que la curva rojo es el ajuste que se buscara .

El código queda:


#include <iostream.h>
#include <conio.h>
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#define N 10
#include <stdio.h>

//--------------------------------------Minimos cuadrados-------------------------------------

//FUNCIONES DE MINIMOS CUADRADOS
  class registro
{
 
  private:
          int i,n;
  float xi[100],yi[100],xiyi[100],x2i[100];
  float sumxi,sumyi,sumxiyi,sumx2i,sumxi2,sumsr,sumst;
  float xprom,yprom,a1,a0,y,sr[100],st[100],sy,syx,r2;  
 
  public:
  void menu();
  void datos();
  void sumatorias();
  void promedio();
  void resultado();
  void coeficientes();
  void nmain();
};

void registro::datos()
{

cout<<endl<<" Ingrese el numero de datos: ";
cin>>n;      
clrscr();
for(i=0;i<n;i++)
{
clrscr();
cout<<endl<<" Dato "<<(i+1)<<" "<<"de"<<" "<<n<<endl;
cout<<endl<<" Ingrese el valor de Xi: ";
cin>>xi[i];
cout<<endl<<" Ingrese el valor de Yi: ";
cin>>yi[i];

}    
}




void registro::sumatorias()
{
 
clrscr();  
sumxi=0;
cout<<endl<<"\nSUMAS: ";  

cout<<endl<<endl<<" Xi:"<<endl;
for(i=0;i<n;i++)
{
cout<<endl<<xi[i];
}

for(i=0;i<n;i++)
{
sumxi=sumxi+xi[i];
}
cout<<endl<<"\nSUMA Xi = "<<sumxi;  

sumyi=0;
cout<<endl<<endl<<" Yi:"<<endl;

for(i=0;i<n;i++)
{
cout<<endl<<yi[i];
}

for(i=0;i<n;i++)
{
sumyi=sumyi+yi[i];
}
cout<<endl<<"SUMA Yi = "<<sumyi;

cout<<endl<<endl<<" Xi*Yi:"<<endl;

for(i=0;i<n;i++)
{
xiyi[i]=xi[i]*yi[i];
cout<<endl<<xiyi[i];
}

sumxiyi=0;
for(i=0;i<n;i++)
{
sumxiyi=sumxiyi+xi[i]*yi[i];
}
cout<<endl<<"SUMA Xi*Yi = "<<sumxiyi;

sumx2i=0;
cout<<endl<<endl<<" Xi^2:"<<endl;

for(i=0;i<n;i++)
{
x2i[i]=pow(xi[i],2);
cout<<endl<<x2i[i];
}
for(i=0;i<n;i++)
{
sumx2i=sumx2i+pow(xi[i],2);
}
cout<<endl<<" Xi^2 = "<<sumx2i;

sumxi2=pow(sumxi,2);
//cout<<endl<<" (sum Xi)^2 = "<<sumxi2;

}


void registro::promedio()
{
cout<<endl<<"\n PROMEDIO: ";
xprom=sumxi/n;
yprom=sumyi/n;
cout<<endl<<" Xprom. = "<<xprom;
cout<<endl<<" Yprom. = "<<yprom;    
}
void registro::coeficientes()
{
cout<<endl<<"\nCOEFICIENTES: ";
a1=(n*sumxiyi-sumxi*sumyi)/(n*sumx2i-sumxi2);
cout<<endl<<" a1 = "<<a1;

a0=yprom-a1*xprom;
cout<<endl<<" a0 = "<<a0;
cout<<endl<<"\nLA ECUACION ES: ";
//y=a0+a1*xprom;
cout<<endl<<"Y="<<a0<<"+"<<a1<<"*X"<<"+e";

   
}

void registro::resultado()
{
cout<<endl<<"\nSr: ";  
cout<<endl<<endl<<" Sr (Yi-a0-a1Xi)^2"<<endl;
for(i=0;i<n;i++)
{
sr[i]=pow(yi[i]-a0-a1*xi[i],2);
cout<<endl<<sr[i];
}

sumsr=0;
for(i=0;i<n;i++)
{
sumsr=sumsr+sr[i];
}
cout<<endl<<" Suma de Sr : "<<sumsr;

cout<<endl<<endl<<" St (Yi-Yprom)^2"<<endl;
for(i=0;i<n;i++)
{
st[i]=pow(yi[i]-yprom,2);
cout<<endl<<st[i];
}

sumst=0;
for(i=0;i<n;i++)
{
sumst=sumst+st[i];
}
cout<<endl<<" Suma St : "<<sumst;

cout<<endl;
sy=sqrt(sumst/(n-1));
cout<<endl<<" Sy = "<<sy;
cout<<endl;
cout<<endl<<"\nDESVIACION ESTANDAR: ";
syx=sqrt(sumsr/(n-2));
cout<<endl<<" Sy/x = "<<syx;
cout<<endl;
cout<<endl<<"\nCOEFICIENTE DE CORRELACION: ";
r2=(sumst-sumsr)/sumst;
cout<<endl<<" r^2 = "<<r2;

getch();
}
void registro::nmain()
{
cout<<"\n\t\t--------------METODO DE MINIMOS CUADRADOS-----------------\n";
datos();
sumatorias();
promedio();
coeficientes();
resultado();
}

int main()
{
clrscr();
registro obj;
obj.nmain();
getch();
}

Imágenes del programa:








No hay comentarios:

Publicar un comentario