You are on page 1of 5

Instituto Politcnico Nacional.

Escuela Superior de Ingeniera Mecnica y Elctrica


Unidad Zacatenco

Seccin de Estudios de Posgrado e Investigacin

Programa para la resolucin de Mnimos Cuadrados.

Alumno: Eduardo Zavala Gonzlez

Cdigo fuente del programa para resolver mnimos cuadrados.


#include <iostream>
#include <math.h>
#include <stdio.h>
#include <iomanip>
#include <cstdlib>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
void leevect(float [50],int,char [5]);
void egauss(float [50][50],int,float [50]);
void escvect(float [50],int,char [5]);
void matxsumxxy(int,int,float [50],float [50],float [50],float [50],float [50][50]);
main()
{
float sumx[50],sumxy[50],x[50],y[50];
float a[50],b[50][50];
int m,n,nfa;
cout<<"
INSTITUTO POLITECNICO NACIONAL"<<endl;
cout<<"
ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA"<<endl;
cout<<"
SECCION DE ESTUDIOS DE POSGRADO E INVESTIGACION"<<endl;
cout<<"
PROGRAMA PARA LA SOLUCION DE MINIMOS CUADRADOS"<<endl;
cout<<"\n";
cout<<"\n";
cout<<"De cuantos valores esta conformado la tabla"<<endl;
cin>>m;
cout<<"Da los valores de X de la tabla: "<<endl;
leevect(x,m,"x");
cout<<"Da los valores de Y de la tabla: "<<endl;
leevect(y,m,"y");
cout<<"Da el grado del polinomio:"<<endl;
cin>>n;
system("pause");
matxsumxxy(m,n,x,y,sumx,sumxy,b);
cout<<"\n";
system("pause");
nfa=n+1;
egauss(b,nfa,a);
cout<<"\n";
cout<<"La solucion es:"<<endl;
cout<<"\n";
escvect(a,n+1,"a");
cout<<"fin del programa"<<endl;
}

void matxsumxxy(int m,int n,float x[50],float y[50],float sumx[50],float sumxy[50],float b[50][50])


{
int i,j,k;
int s;
s=n*2+1;
for(i=1;i<=s;i++)
{
sumx[i]=0.0;
for(j=1;j<=m;j++)
{
sumx[i]=sumx[i]+pow(x[j],i-1);
}
}
cout<<"\n";
escvect(sumx,s,"sumX");
for(i=1;i<=n+1;i++)
{
sumxy[i]=0.0;
for(j=1;j<=m;j++)
{
sumxy[i]=sumxy[i]+(y[j]*(pow(x[j],i-1)));
}
}
cout<<"\n";
escvect(sumxy,n+1,"sumXY");
for(i=1;i<=n+1;i++)
{
b[i][n+2]=sumxy[i];
}
for(i=1;i<=n+1;i++)
{
k=i;
for(j=1;j<=n+1;j++)
{
b[i][j]=sumx[k];
k=k+1;
}
}
}
void egauss(float a[50][50],int nfa,float vr[50])
{
int i,j,k,l,n1,n2,x,y,m;
int re,c;
float aux;
float temp;
n1=nfa-1;

n2=nfa+1;
for(i=1;i<=n1;i++)
{
aux=a[i][i];
if(fabs(aux)<0.001)
{
cout<<"a["<<i<<"]["<<i<<"]= "<<a[i][i]<<endl;
break;
}
for(j=1;j<=n2;j++)
a[i][j]=a[i][j]/aux;
for(k=i+1;k<=nfa;k++)
{
aux=a[k][i];
for(l=i;l<=n2;l++)
a[k][l]=a[k][l]-a[i][l]*aux;
}
}
vr[nfa]=a[nfa][nfa+1]/a[nfa][nfa];
for(i=1;i<=nfa-1;i++)
{
j=nfa-i;
k=j+1;
vr[j]=a[j][nfa+1];
for(l=k;l<=nfa;l++)
vr[j]=vr[j]-a[j][l]*vr[l];
}
}
void leevect(float x[50],int n,char s[5])
{
int i;
for(i=1;i<=n;i++)
{
cout<<s<<"["<<i<<"]= ";
cin>>x[i];
}
cout<<"\n";
}
void escvect(float a[50],int nf,char s[5])
{
int i;
for(i=1;i<=nf;i++)
cout<<s<<"["<<i<<"]= "<<a[i]<<endl;
cout<<"\n";
}

Resultados obtenidos por el programa mincuadrados.exe:


Datos de la tabla, para el valor X:

Datos de la tabla, para el valor de Y:

X[1]= 4
X[2]= 6
X[3]= 8
X[4]= 10
X[5]= 14
X[6]= 16
X[7]= 20
X[8]= 22
X[9]= 24
X[10]= 28

Y[1]= 30
Y[2]= 18
Y[3]= 22
Y[4]= 28
Y[5]= 14
Y[6]= 22
Y[7]= 16
Y[8]= 8
Y[9]= 20
Y[10]= 8

Valores de las sumas de X:

sumXY[1]= 186
sumXY[2]= 2432
sumXY[3]= 41776

sumX[1]= 10
sumX[2]= 152
sumX[3]= 2912
sumX[4]= 63056
sumX[5]= 1460290

Valores de la suma de XY:

resultados de la eliminacin de Gauss:


a[1]= 28.2835
a[2]= -0.605615
a[3]= -0.00164215

You might also like