metodos numericos

aztka
02 de Junio del 2005
ayuda alguien que mepueda proporcionar los codigos fuente del metodo de minimoscuadrados, el metodo de interpolacion de newton y el de runge kuta se loagradecere mucho gracis.

george
02 de Junio del 2005
yo los tengo si quieres mandam,e un correo de los programas que nesecites

minimos cuadrados

#include "stdafx.h"
#include "minimosCuadrados.h"
#include <iomanip.h>
#include <stdlib.h>
#include <iostream.h>
#include <math.h>

#include <stdio.h>
#include <conio.h>



MinimosCuadrados::MinimosCuadrados(double a, double b, double c)
: AproxPolNewton(a, b, c)
{;}

void MinimosCuadrados::manualMinimosCuadrados()
{
do
{


MinimosCuadradosLlenaTabla();
calculaMinimosCuadrados();
MinimosCuadradosLlenaEc();

for(int y=0;y<3;y++)
{
for(int u=0; u<=3;u++)
cout<<JacobisistemaEcuaciones[y][u]<<"t";
cout<<endl;
}


MinimosCuadradosMuestraEcuaciones();
for(int p=0; p<3;p++)
{
DivideRenglon(p);
DivideRenglones(p);
}
MinimosCuadradosMuestraEcuaciones();


/*cout<<"La ecuacion a evaluar es:n";
cout<<"f(x)="<<JacobisistemaEcuaciones[0][4] <<" + "<<JacobisistemaEcuaciones[1][4];
cout<<"x + "<<JacobisistemaEcuaciones[2][4]<<"x^2n";*/




MinimosCuadradosPunto();
}
while (JacobiotroCalculo());


}

void MinimosCuadrados::DivideRenglon(int a)
{

double divisor=JacobisistemaEcuaciones[a][a];
for(int k = 0; k<4; k++)
JacobisistemaEcuaciones[a][k]=(JacobisistemaEcuaciones[a][k]/divisor);
}

void MinimosCuadrados::DivideRenglones (int var)
{
double factor;
for (int l=0; l<3; l++)
{
if(l!=var)
{
factor = JacobisistemaEcuaciones[l][var];
for(int n=0; n<4; n++)
JacobisistemaEcuaciones[l][n]=JacobisistemaEcuaciones[l][n]-
JacobisistemaEcuaciones[var][n]*factor;
}
}
}








void MinimosCuadrados::MinimosCuadradosLlenaTabla()
{
char opcion;

for(int k=0;k<10;k++)
for(int l=0; l<10; l++)
MinCuadTab[k][l]=0;

cout<<"INTERPOLACION POR EL METODO DE "MINIMOS CUADRADOS"n";
cout<<"El grado de la ecuacion utilizada es de grado 2n";
cout<<"nA continuacion se pediran los valores de \'x\' Y f(x) de su tablan"
<<"n Introduzca el numero de puntos tabuladosn"
<<"?";
cin>>Jacobiecuaciones;
cout<<endl;



do
{
for(int i=0;i<Jacobiecuaciones;i++)//Ciclo para recorrer los renglones del arreglo
{

cout<<"DATOS DEL PUNTO "<<i<<endl<<endl;
cout<<"Introduzca el valor de \'x\' del punto"<<i<<endl
<<"?";
cin>>MinCuadTab[i][0];


cout<<"Introduzca el valor de \'f(x)\' del punto"<<i<<endl
<<"?";
cin>>MinCuadTab [i][1];

}

MinimosCuadradosImprimeTabla();


cout<<"La tabla de valores es correcto? (s/n)n"
<<"?";
cin>>opcion;
if(opcion!='n'&& opcion!='N' && opcion!='s' && opcion!='S')
{
do
{
cout<<"Opcion invalidaan"
<<"Introduzca una opcion validan"
<<"El sistema de ecuaciones es correcto? (s/n)n"
<<"?";
cin>>opcion;
}
while(opcion!='n' && opcion!='N' && opcion!='s' && opcion!='S');
}
}
while(opcion == 'n'||opcion == 'N');

}

void MinimosCuadrados::MinimosCuadradosPunto()
{
double temp1, temp2, temp3;
char opcion;

do
{
temp3=1;
cout<<"Introduzca el valor de \'x\' para el que desea hacer el calculo"<<endl
<<"?";
cin>>temp1;

temp2=JacobisistemaEcuaciones[0][3];

for(int i=1;i<3;i++)
{

temp2=temp2+JacobisistemaEcuaciones[i][3]*pow(temp1,i);
}

cout<<"El valor de f("<<temp1<<") = "<<temp2<<endl;

cout<<"nDesea calcular otro punto? (s/n)n"
<<"?";
cin>>opcion;
if(opcion!='n'&& opcion!='N' && opcion!='s' && opcion!='S')
{
do
{
cout<<"nOpcion invalidaan"
<<"Introduzca una opcion validan"
<<"Desea calcular otro punto? (s/n)n"
<<"?";
cin>>opcion;
}
while(opcion!='n' && opcion!='N' && opcion!='s' && opcion!='S');
}
}
while(opcion != 'n' && opcion != 'N');
}

void MinimosCuadrados::MinimosCuadradosImprimeTabla()
{

cout<<"nLa tabla obtenida con las datos proporcionados es la siguiente:nn"
<<'xc9';
for(int l=0;l<6;l++)
cout<<'xcd';

for(int m=0; m<2; m++)
{
cout<<'xcb';
for(int n=0;n<19;n++)
cout<<'xcd';
}
cout<<'xbb'<<endl
<<"xba Puntoxba"<<setw(20)<<"Valore de \'x\'xba"<<setw(20)<<"f(x)xba"
//<<setw(20)<<"f\'(x)xba"<<setw(20)<<"Epsilonxba"
<<endl
<<'xcc';
for(int i=0; i<6; i++)
cout<<"xcd";

for(int d=0; d<2; d++)
{
cout<<'xce';
for(int e=0;e<19;e++)
cout<<'xcd';
}
cout<<'xb9'
<<endl;

for(int j=0; j<Jacobiecuaciones; j++)
{
cout<<'xba'<<setw(6)<<j<<'xba';
cout<<setw(19)<<setiosflags(ios::fixed|ios::showpoint)
<<setprecision(6)<<MinCuadTab[j][0]<<'xba'
<<setw(19)<<setiosflags(ios::fixed|ios::showpoint)
<<setprecision(6)<<MinCuadTab[j][1]<<'xba';
cout<<endl;
}

cout<<'xc8';
for(int f=0; f<6; f++)
cout<<"xcd";

for(int g=0; g<2; g++)
{
cout<<'xca';
for(int h=0;h<19;h++)
cout<<'xcd';
}
cout<<'xbc'
<<endl;


}


void MinimosCuadrados::calculaMinimosCuadrados()
{
double temp=0;
for(int g=0;g<Jacobiecuaciones;g++)
temp=temp+(MinCuadTab[g][0]*MinCuadTab[g][1]);

MinCuadTab[Jacobiecuaciones][5]=temp;

for(int b=2;b<5;b++)
{
double temp1=0;
for(int a=0;a<Jacobiecuaciones;a++)
temp1=temp1+(pow(MinCuadTab[a][0],b));

MinCuadTab[Jacobiecuaciones][b]=temp1;
}

double temp2=0;
for(int c=0;c<Jacobiecuaciones;c++)
temp2=temp2+(MinCuadTab[c][1]*pow(MinCuadTab[c][0],2));

MinCuadTab[Jacobiecuaciones][6]=temp2;

temp2=0;
for(c=0;c<Jacobiecuaciones;c++)
temp2=temp2+(MinCuadTab[c][1]);

MinCuadTab[Jacobiecuaciones][1]=temp2;

temp2=0;
for(c=0;c<Jacobiecuaciones;c++)
temp2=temp2+(MinCuadTab[c][0]);

MinCuadTab[Jacobiecuaciones][0]=temp2;


}

void MinimosCuadrados::MinimosCuadradosMuestraEcuaciones()
{
cout<<"El sistema de ecuaciones es el siguiente:nn";
cout<<"t";
for(int k=0; k<3; k++)
cout<<"X"<<k+1<<"t";
cout<<"bnn";

for(int l=0;l<3;l++)
{
cout<<"Ec."<<l+1<<"t";
for(int m=0; m<=3;m++)
cout<<JacobisistemaEcuaciones[l][m]<<"t";
cout<<endl;
}
}


void MinimosCuadrados::MinimosCuadradosLlenaEc()
{
JacobisistemaEcuaciones[0][0]=Jacobiecuaciones;
JacobisistemaEcuaciones[1][0]=JacobisistemaEcuaciones[0][1]=
MinCuadTab[Jacobiecuaciones][0];
JacobisistemaEcuaciones[0][2]=JacobisistemaEcuaciones[1][1]=
JacobisistemaEcuaciones[2][0]=MinCuadTab[Jacobiecuaciones][2];
JacobisistemaEcuaciones[1][2]=JacobisistemaEcuaciones[2][1]=
MinCuadTab[Jacobiecuaciones][3];
JacobisistemaEcuaciones[2][2]=MinCuadTab[Jacobiecuaciones][4];
JacobisistemaEcuaciones[0][3]=MinCuadTab[Jacobiecuaciones][1];
JacobisistemaEcuaciones[1][3]=MinCuadTab[Jacobiecuaciones][5];
JacobisistemaEcuaciones[2][3]=MinCuadTab[Jacobiecuaciones][6];



}




******************************************************************************

aproximacion polinomial newton



#include "stdafx.h"
#include "aproxPolNewton.h"
#include <iomanip.h>
#include <stdlib.h>
#include <iostream.h>
#include <math.h>

AproxPolNewton::AproxPolNewton(double a, double b, double c)
: Lagrange(a, b, c)
{;}

void AproxPolNewton::manualAproxPolNewton()
{
do
{
int counter=0;
for(int i=0;i<10;i++)
for(int j=0; j<10; j++)
AproxPolNewtonDif[i][j]=0;

for(int k=0;k<10;k++)
for(int l=0; l<11; l++)
JacobisistemaEcuaciones[k][l]=0;

//GaussSeidelvaloresX1XaCeros();
AproxPolNewtonLlenaTabla();
calculaDifDiv();
imprimeDifDiv();
AproxPolNewtonPunto();
}
while (JacobiotroCalculo());

}
void AproxPolNewton::AproxPolNewtonLlenaTabla()
{
char opcion;

cout<<"INTERPOLACION POR EL METODO DE "APROXIMACION POLINOMIAL DE NEWTON"n";
cout<<"nA continuacion se pediran los valores de \'x\' Y f(x) de su tablan"
<<"n Introduzca el numero de puntos tabuladosn"
<<"?";
cin>>Jacobiecuaciones;
cout<<endl;

do
{
for(int i=0;i<Jacobiecuaciones;i++)//Ciclo para recorrer los renglones del arreglo
{

cout<<"DATOS DEL PUNTO "<<i<<endl<<endl;
cout<<"Introduzca el valor de \'x\' del punto"<<i<<endl
<<"?";
cin>>JacobisistemaEcuaciones[i][0];


cout<<"Introduzca el valor de \'f(x)\' del punto"<<i<<endl
<<"?";
cin>>JacobisistemaEcuaciones [i][Jacobiecuaciones];

}

AproxPolNewtonImprimeTabla();


cout<<"La tabla de valores es correcto? (s/n)n"
<<"?";
cin>>opcion;
if(opcion!='n'&& opcion!='N' && opcion!='s' && opcion!='S')
{
do
{
cout<<"Opcion invalidaan"
<<"Introduzca una opcion validan"
<<"El sistema de ecuaciones es correcto? (s/n)n"
<<"?";
cin>>opcion;
}
while(opcion!='n' && opcion!='N' && opcion!='s' && opcion!='S');
}
}
while(opcion == 'n'||opcion == 'N');

}

void AproxPolNewton::AproxPolNewtonPunto()
{
double temp1, temp2, temp3;
char opcion[30];

do
{
temp3=1;
cout<<"Introduzca el valor de \'x\' para el que desea hacer el calculo"<<endl
<<"?";
cin>>temp1;

temp2=JacobisistemaEcuaciones[0][Jacobiecuaciones];

for(int i=0;i<Jacobiecuaciones;i++)
{

temp3=temp3*(temp1-JacobisistemaEcuaciones[i][0]);
temp2=temp2+temp3*AproxPolNewtonDif[0][i];
}

cout<<"El valor de f("<<temp1<<") = "<<temp2<<endl;

cout<<"nDesea calcular otro punto? (s/n)n"
<<"?";
cin>>opcion;
if(opcion[0]!='n'&& opcion[0]!='N' && opcion[0]!='s' && opcion[0]!='S')
{
do
{
cout<<"nOpcion invalidaan"
<<"Introduzca una opcion validan"
<<"Desea calcular otro punto? (s/n)n"
<<"?";
cin>>opcion;
}
while(opcion[0]!='n' && opcion[0]!='N' && opcion[0]!='s' && opcion[0]!='S');
}
}
while(opcion[0] != 'n' && opcion [0]!= 'N');
}

void AproxPolNewton::AproxPolNewtonImprimeTabla()
{

cout<<"nLa tabla obtenida con las datos proporcionados es la siguiente:nn"
<<'xc9';
for(int l=0;l<6;l++)
cout<<'xcd';

for(int m=0; m<2; m++)
{
cout<<'xcb';
for(int n=0;n<19;n++)
cout<<'xcd';
}
cout<<'xbb'<<endl
<<"xba Puntoxba"<<setw(20)<<"Valore de \'x\'xba"<<setw(20)<<"f(x)xba"
//<<setw(20)<<"f\'(x)xba"<<setw(20)<<"Epsilonxba"
<<endl
<<'xcc';
for(int i=0; i<6; i++)
cout<<"xcd";

for(int d=0; d<2; d++)
{
cout<<'xce';
for(int e=0;e<19;e++)
cout<<'xcd';
}
cout<<'xb9'
<<endl;

for(int j=0; j<Jacobiecuaciones; j++)
{
cout<<'xba'<<setw(6)<<j<<'xba';
cout<<setw(19)<<setiosflags(ios::fixed|ios::showpoint)
<<setprecision(2)<<JacobisistemaEcuaciones[j][0]<<'xba'
<<setw(19)<<setiosflags(ios::fixed|ios::showpoint)
<<setprecision(2)<<JacobisistemaEcuaciones[j][Jacobiecuaciones]<<'xba';
cout<<endl;
}

cout<<'xc8';
for(int f=0; f<6; f++)
cout<<"xcd";

for(int g=0; g<2; g++)
{
cout<<'xca';
for(int h=0;h<19;h++)
cout<<'xcd';
}
cout<<'xbc'
<<endl;


}


void AproxPolNewton::calculaDifDiv()
{
for(int a=0;a<10;a++)
for(int b=0;b<10;b++)
AproxPolNewtonDif[a][b]=0;

for(int i=0;i<Jacobiecuaciones;i++)
{
AproxPolNewtonDif[i][0]=((JacobisistemaEcuaciones[i+1][Jacobiecuaciones]-
JacobisistemaEcuaciones[i][Jacobiecuaciones])/
(JacobisistemaEcuaciones[i+1][0]-JacobisistemaEcuaciones[i][0]));
}

for(int j=1;j<(Jacobiecuaciones-1);j++)
{
for(int k=0;k<Jacobiecuaciones;k++)
{
double temporal;
temporal=((AproxPolNewtonDif[k+1][j-1]-AproxPolNewtonDif[k][j-1])/
(JacobisistemaEcuaciones[k+j+1][0]-JacobisistemaEcuaciones[k][0]));
AproxPolNewtonDif[k][j]=temporal;
//cout<<temporal<<endl;
}


}

}

void AproxPolNewton::imprimeDifDiv()
{

cout<<"nLa tabla de diferencias divididas es la siguiente:nn"
<<'xc9';
for(int l=0;l<6;l++)
cout<<'xcd';

for(int m=0; m<(Jacobiecuaciones+1); m++)
{
cout<<'xcb';
for(int n=0;n<12;n++)
cout<<'xcd';
}
cout<<'xbb'<<endl
<<"xba Puntoxba"<<setw(13)<<"Valor de \'x\'xba"<<setw(13)<<"f(x)xba";
for(int f=3;f<(Jacobiecuaciones+2);f++)
cout<<f-2<<setw(12)<<" Ordenxba";

cout<<endl;
cout<<'xcc';

for(int i=0; i<6; i++)
cout<<"xcd";

for(int d=0; d<(Jacobiecuaciones+1); d++)
{
cout<<'xce';
for(int e=0;e<12;e++)
cout<<'xcd';
}
cout<<'xb9'
<<endl;

for(int j=0; j<Jacobiecuaciones; j++)
{
//for(int g=0; g<Jacobiecuaciones; g++)
{
cout<<'xba'<<setw(6)<<j<<'xba';
cout<<setw(12)<<setiosflags(ios::fixed|ios::showpoint)
<<setprecision(2)<<JacobisistemaEcuaciones[j][0]<<'xba'
<<setw(12)<<setiosflags(ios::fixed|ios::showpoint)
<<setprecision(2)<<JacobisistemaEcuaciones[j][Jacobiecuaciones]<<'xba';
for(int y=0; y<(Jacobiecuaciones-1); y++)
{
cout<<setw(12)<<setiosflags(ios::fixed|ios::showpoint)
<<setprecision(2)<<AproxPolNewtonDif[j][y]<<'xba';
}


}
cout<<endl;
}

cout<<'xc8';
for(f=0; f<6; f++)
cout<<"xcd";

for(int g=0; g<(Jacobiecuaciones+1); g++)
{
cout<<'xca';
for(int h=0;h<12;h++)
cout<<'xcd';
}
cout<<'xbc'
<<endl;


}
si nececitas otros programas mandane un mail [email protected]