#include<iostream>
#include<string.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<iomanip>
using namespace std;
char opcion;
class Lagrange
{
private:
int n, i, j;
float *vecx, *vecy, *li, x, res, mult, Ev, Vv;
public:
Lagrange();
void guardado();
void organiza();
void Li();
void resultado();
};
Lagrange::Lagrange()
{
cout<<"\n\n\t\tPuntos conocidos = ";
cin>>n;
vecx = new float[n];
vecy = new float[n];
li = new float[n];
res = 0;
mult = 1;
}
void Lagrange::guardado()
{
cout<<"\n\n\n\t\tIngrese el valor de las x y f(x) correspondiente\n";
for(j=0; j<n; j++)
{
cout<<"\n\t\t\t\tx"<<j<<" = ";
cin>>vecx[j];
cout<<"\n\t\t\t\tf("<<j<<") = ";
cin>>vecy[j];
}
}
void Lagrange::Li()
{
cout<<"\n\n\t\tIngrese el valor de x a evaluar f(x) = ";
cin>>x;
for(j=0; j<n; j++)
{
for(i=0; i<n; i++)
{
if(j != i)
mult *= (x - vecx[i])/(vecx[j] - vecx[i]);
}
li[j] = mult;
mult = 1;
}
cout<<"\n\n\t\t\t\tx\tf(x)";
cout<<"\n\t\t\t\t";
for(j=0; j<n; j++)
{
cout<<vecx[j]<<"\t"<<vecy[j];
cout<<"\n\t\t\t\t";
}
}
void Lagrange::resultado()
{
cout<<"\n\n\n\t\tEl polinomio es la suma de L(x)*f(x)";
cout<<"\n\n\t\t\t\tL(x)"<<"\t\t"<<"f(x)"<<endl<<endl;
for(j=0; j<n; j++)
cout<<"\t\t\t\t"<<setprecision(4)<<li[j]<<"\t\t"<<vecy[j]<<endl;
for(j=0; j<n; j++)
{
res += (vecy[j]*li[j]);
}
cout<<"\n\n\t\t\tResultado: "<<setprecision(5)<<res;
cout<<"\n\n\t\t\tIngresa el valor verdadero: ";
cin>>Vv;
Ev = ((Vv - res)/Vv)*100;
cout<<"\n\n\t\t\tEl error verdadero es: "<<Ev<<" %";
}
void Lagrange::organiza()
{
guardado();
Li();
getch();
resultado();
getch();
}
int main()
{
do
{
cout<<"\n\n\n\n\n\t\t\t INTERPOLACION DE LAGRANGE";
cout<<endl<<endl<<"\n\n\n\t\t\t";
system("pause");
system("cls");
Lagrange a;
a.organiza();
system("cls");
cout<<"\n\n\tCalcular otra interpolacion de Lagrange (s/n)?"<<"\t";
cin>>opcion;
system("cls");
if(toupper(opcion)!='S')
{
cout<<endl<<endl<<"\n\n\n\t\t\t";
cout<<"PROGRAMA FINALIZADO";
getch();
}
}
while(toupper(opcion)=='S');
}
No hay comentarios:
Publicar un comentario