lunes, 7 de noviembre de 2011

Programa para ajustar Recta por mínimos cuadrados y punto de corte [Código fuente] C++

Acá esta el Código fuente de un programa que había subido  ( solo el ejecutable)  anteriormente.


#include <iostream>
#include <conio.h>
#include <stdlib.h>
#define max 50

using namespace std;
//Funcion para Leer los datos
void leer(float *x ,float *y,int n)
 {int i;
  for(i=0;i<n;i++,x++)
{cout<<"Ingrese el valor de X n° "<<(i+1)<<": ";
cin>>*x;
system("cls");
}
  for(i=0;i<n;i++,y++)
{cout<<"Ingrese el valor de Y n° "<<(i+1)<<": ";
cin>>*y;
system("cls");
}
 }
//Funcion para calcular la Pendiente ajustada por minimos cuadrados 
void minimos_cuadrados(float *x,float *y,int n)
 {float k=0,t=0,w=0,k2=0,m;
  int i;
  //Efectuando las respectivas sumas y productos requeridos en la ecuacion
  for(i=0;i<n;i++,x++,y++)
{k+=*x;
t+=*y;
w+= (*x)*(*y);
k2+=(*x)*(*x);
}
  //Resolviendo la ecuacion de la Pendiente ajustada a minimos cuadrados
  m=(n*w-k*t)/(n*k2-k*k);
  cout<<"La pendiente ajustada por minimos cuadrados es m= "<<m<<endl;
 }
//Funcion para calcular el punto de corte
void punto(float *x,float *y,int n)
 {float k=0,t=0,w=0,k2=0,b;
  int i;
 //Efectuando las respectivas sumas y productos requeridos en la ecuacion 
  for(i=0;i<n;i++,x++,y++)
{k+=*x;
t+=*y;
w+= (*x)*(*y);
k2+=(*x)*(*x);
}
//Resolviendo la ecuacion para hallar el punto de corte por minimos cuadrados
  b=(t*k2-k*w)/(n*k2-k*k);
  cout<<"\nEl punto de corte por minimos cuadrados es b= "<<b<<endl;
 }
//Función Principal 
int main ()
{int n,i;
 char c;
 float x[max],y[max];
 cout<<"\t\t**PROGRAMA PARA AJUSTAR RECTA POR MINIMOS CUADRADOS**";
 cout<<"\t\t\t\t\tELABORADO POR: JUAN PASTOR RAMOS BOLIVAR"<<endl;
 cout<<"\t\t\t\tUDO-INGENIERIA EN COMPUTACION"<<endl;
 cout<<"\t\t\t\tTODOS LOS DERECHOS RESERVADOS" ;
 for(i=0;i<19;i++) cout<<endl;
 cout<<"\t\t\t\tPresione enter para continuar...";
 getch();
 system("cls");
do{
  do{
cout<<"Ingrese la cantidad de datos a procesar: ";
cin>>n;
system("cls");
if(n<2 || n>max)
cout<<"Ingrese un valor  entre [2,50]"<<endl;

}while(n<2 || n>max);

leer(x,y,n);
minimos_cuadrados(x,y,n);
punto(x,y,n);
do{
cout<<"\n¿Desea realizar otro ajuste por minimos cuadrados? pulse s o n..."<<endl;
c=getch();
system("cls");
 }while(c!='s' && c!='S' && c!='n' && c!='N');
  }while(c=='s' || c=='S');
  if (c=='n' || c=='N')
  return 0;
}
Captura de Ejecución:


El programa fue compilado en Dev-C++.

Saludos att: LordRamos.

5 comentarios:

  1. Ya revise el programa, no entendí muy bien como es la formula originalmente de mínimos cuadrados, de vdd que el uso de apuntadores es sencillo en este programa.

    ResponderEliminar
  2. Mas sencillo imposible... Esta bien como para los que están nuevos con apuntadores.

    ResponderEliminar
  3. Muy buen aporte...Intente hacerlo pero al final me rendi, no soy tan bueno. Hasta que llegue aqui.

    ResponderEliminar
  4. no tienes encuenta el error que hay?

    ResponderEliminar
  5. Aja Juan... Llegué a tu página desde google, buscando información sobre un algoritmo de mínimos cuadrados... Jajajaja, que casualidad... Que pequeño es el internet...Jajajaj

    ResponderEliminar