You are on page 1of 3

#include<stdio.

h>
#include<conio.h>
#include<math.h>
#include<iostream>
#include<cstdlib>
#include<iomanip>
using namespace std;
int main(){
//PUEDE MEJORARSE
int a,b,c,d,e,f,g,h,i,j,k,l,m,n,p,o;
float xinterpol,yinterpolada=0;
float productosNum,productosDen;
int anw;
float x[50],y[50],z[50];
for(int awz=0;awz<51;awz++) z[awz]=1;

cout<<"Metodo de interpolacion de lagrange \n"<<"�cuantos datos son?, maximo


5: ";
cin>>a;
for(c=0;c<a;c++){
cout<<"punto x: ";
cin>>x[c];
cout<<"punto y: ";
cin>>y[c];
}
cout<<"�que grado desea calcular? \n debe ser menor que el numero de datos,
grado maximo 4: ";
cin>>b;
//denominador de lagrange
for(d=0;d<b;d++){
for(e=0;e<b;e++){
if(d!=e){
z[d]=z[d]*(x[d]-x[e]);
}
}
}
// numerador de la formula de lagrange, obtencion del polinomio

if(b==1){
cout<<"polinomio de lagrange"<<endl;
cout<<y[0]<<"/"<<z[0]<<" (x-"<<x[1]<<") +"<<y[1]<<"/"<<z[1]<<"
(x-"<<x[0]<<")";

}
else if(b==2){
cout<<"polinomio de lagrange"<<endl;
f=-x[1]-x[2];
cout<<"L0(x)= x^2+["<<f<<"] + "<<x[1]*x[2]<<endl;

g=-x[0]-x[2];
cout<<"L1(x)= x^2+["<<g<<"] + "<<x[0]*x[2]<<endl;

h=-x[0]-x[1];
cout<<"L2(x)= x^2+["<<h<<"] + "<<x[0]*x[1]<<endl;

for(i=0;i<=b;i++)cout<<y[i]<<"/"<<z[i]<<" L"<<i<<"(x)"<<setw(15);
}
else if(b==3){
cout<<"polinomio de lagrange"<<endl;
f=-x[1]-x[2]-x[3];
j=x[1]*x[2]+x[1]*x[3]+x[3]*x[2];
cout<<"L0(x)= x^3+["<<f<<"] x^2 + "<<j<<" x -
["<<x[1]*x[2]*x[3]<<"]"<<endl;
g=-x[0]-x[2]-x[3];
k=x[0]*x[2]+x[0]*x[3]+x[3]*x[2];
cout<<"L1(x)= x^3+["<<g<<"] x^2 + "<<k<<" x -
["<<x[0]*x[2]*x[3]<<"]"<<endl;
l=x[0]*x[1]+x[0]*x[3]+x[3]*x[1];
h=-x[1]-x[0]-x[3];
cout<<"L2(x)= x^3+["<<h<<"] x^2 + "<<l<<" x -
["<<x[0]*x[1]*x[3]<<"]"<<endl;
m=-x[1]-x[2]-x[0];
n=x[0]*x[1]+x[0]*x[2]+x[1]*x[2];
cout<<"L3(x)= x^3+["<<m<<"] x^2 + "<<n<<" x -
["<<x[0]*x[2]*x[1]<<"]"<<endl;

for(i=0;i<=b;i++)cout<<y[i]<<"/"<<z[i]<<" L"<<i<<"(x)"<<setw(15);
}
else if(b==4){
cout<<"L0(x)= (x-["<<x[1]<<"])*(x-["<<x[2]<<"])*(x-["<<x[3]<<"])*(x-
["<<x[4]<<"])"<<endl;
cout<<"L1(x)= (x-["<<x[0]<<"])*(x-["<<x[2]<<"])*(x-["<<x[3]<<"])*(x-
["<<x[4]<<"])"<<endl;
cout<<"L2(x)= (x-["<<x[0]<<"])*(x-["<<x[1]<<"])*(x-["<<x[3]<<"])*(x-
["<<x[4]<<"])"<<endl;
cout<<"L3(x)= (x-["<<x[0]<<"])*(x-["<<x[1]<<"])*(x-["<<x[2]<<"])*(x-
["<<x[4]<<"])"<<endl;
cout<<"L4(x)= (x-["<<x[0]<<"])*(x-["<<x[1]<<"])*(x-["<<x[2]<<"])*(x-
["<<x[3]<<"])"<<endl;
for(i=0;i<=b;i++)cout<<y[i]<<"/"<<z[i]<<" L"<<i<<"(x)"<<setw(15);
}
else cout<<"error"<<endl;
//evaluacion a n grado y n+1 datos
cout<<"�deseas evauluarlo? "<<endl;
cout<<" si-1, No-2: ";
cin>>anw;
if(anw==1){
//do{
cout<<" \n para que valor de x vas a evaluar? ";
cin>>xinterpol;
//}
//while(xinterpol<x[1]||xinterpol>x[n]);
//empieza la formula de lagrange
for(p=0;p<=b;p++){
productosNum=1;
productosDen=1;

for(o=0;o<=b;o++){
if(p !=o){
productosNum=productosNum*(xinterpol-x[o]);
productosDen=productosDen*(x[p]-x[o]);
}
}

yinterpolada=yinterpolada+(productosNum/productosDen)*y[p];

}
cout<<"\n la X interpolada es: "<<yinterpolada<<endl;
cout<<"fin"<<endl;

getch();
return 0;
}
else{

cout<<"fin"<<endl;
getch();
return 0;
}

You might also like