#include <stdio.
h>
#include <stdlib.h>
#include <locale.h>
int n, e, r, corregir;
char f[50];
float x[100], y[100], xf, l, t;
float lagrange(float x[], float y[], int n, float xf);
int main() {
setlocale(LC_ALL, "");
printf("Método de la interpolacion de Lagrange \n\n");
printf("Escuela: Instituto Politécnico Nacional - IPN\n");
printf("Plantel: Escuela Superior de Ingeniería Mécanica y Eléctrica\n" );
printf("Carrera: Ingeniería Mécanica y Eléctrica\n");
printf("Materia: Metodos Numéricos\n");
printf("Fecha:31/10/2023\n");
printf("Boleta:2023350\n");
printf("Alumno: Alvarez Cruz Daniel Adalberto \n");
printf("Porf:Alfaro Martinez Adrian Dario\n\n");
printf("Hola, bienvenido. Este programa realiza la interpolación de Lagrange.\
n\n");
scanf("%[^\n]", &f);
system("cls");
do {
system("cls");
printf("%s, ingresa el número de puntos [X_k, f(X_k)] que deseas
interpolar: k = ", f);
scanf("%d", &n);
printf("\nDatos de X_k\n");
for (int z = 0; z < n; z++) {
printf("Ingrese el valor %i: ", z + 1);
scanf("%f", &x[z]);
}
printf("\n");
printf("\nDatos de f(X_k)\n");
for (int z = 0; z < n; z++) {
printf("Ingrese el valor %i: ", z + 1);
scanf("%f", &y[z]);
}
do {
printf("\nValores de la interpolación\n\n");
printf("\tX | f(X)\n\t....................\n");
t = 1;
while (t <= 10) {
l = lagrange(x, y, n, t);
printf("\t%.3f | %.3f\n", t, l);
t++;
}
printf("\nIngresa el valor especifico a interpolar: X_i= ");
scanf("%f", &xf);
l = lagrange(x, y, n, xf);
printf("\nEl punto interpolado es [%.3f, %.3f]\n", xf, l);
printf("\nQuieres corregir los datos introducidos?\n\n1.- Si\t2.- No\n\
nOpcion: ");
scanf("%i", &corregir);
if (corregir == 1) {
continue;
}
printf("\nQuieres interpolar otro valor con los mismos datos?\n\n1.-
Si\t2.- No\n\nOpcion: ");
scanf("%i", &e);
} while (e == 1);
printf("\nQuieres realizar otra interpolacion con datos diferentes?\n\n1.-
Si\t2.- No\n\nOpcion: ");
scanf("%i", &r);
} while (r == 1);
printf("\nAdios");
return 0;
}
float lagrange(float x[], float y[], int n, float xf) {
int i, j;
float aux1[100], aux2[100], ix = 0;
for (i = 0; i < n; i++) {
aux1[i] = 1;
aux2[i] = 1;
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (j != i) {
aux1[i] = aux1[i] * (xf - x[j]);
aux2[i] = aux2[i] * (x[i] - x[j]);
}
}
ix = ix + y[i] * (aux1[i] / aux2[i]);
}
return ix;
}