Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Profesor: Ing. Lpez Garca Jorge Luis Grupo: 13 Equipo: E-5 Integrantes: Coquis Romero Christopher Escobedo Solares Ricardo David Guzmn Rojas Ricardo Tonatiuh Romero Romero No Martn
[2]
6. Ejecutar el programa para cargar desde un archivo de texto los valores para la siguiente tabla y comprobar el resultado a mano para X=2.
NOTA: la solucin en el ejemplo del pdf de la prctica de la red para el polinomio de tercer orden es incorrecta, para X=0.2 resulta f2(x)=2.6399987. Detalles de entrega por equipo: impreso con un solo cdigo fuente completo con todas las opciones, cada lnea comentada de las agregadas por el alumno y capturas de pantalla de ejecucin para la tabla original del ejemplo (para x=0.2) y para las otras dos tablas con los datos solicitados en la portada.
[3] #include <stdio.h> //libreria #include <stdlib.h> //libreria int cuenta_renglones(FILE *archi); //declaracion de funciones void cargar_archivo(FILE *archi, double *x, double *fx); //declaracion de funciones int main (int argc, char *argv[]) //funcion principal { int i=0; //delcaracion de variable // double x[4]={0.1, 0.4, 0.7, 1}; // double fx[4]={2.31, 3.36, 4.59, 6}; double x0=0,x1=0,x2=0,x3=0,f1=0,f2=0,f3=0; //delcaracion de variable double X; //delcaracion de variable printf("\tDame el valor de X que quieres interpolar\n"); //pide al usuario el valor a interpolar scanf("%lf",&X); //lo guarda en una variable FILE *archivo=NULL; //apuntador a un archivo double *x=NULL; //delcaracion de variable apuntadora double *fx=NULL; //delcaracion de variable apuntadora int renglones=0; //delcaracion de variable renglones=cuenta_renglones(archivo); //asignacion de valor a una funcion printf("%d", renglones); //imprime un mensaje en la pantalla x=(double *)calloc(renglones,sizeof(double)); //asignacion de memoria denamica fx=(double *)calloc(renglones,sizeof(double)); //asignacion de memoria denamica cargar_archivo(archivo, x, fx); //lamado a una funcion printf("Metodo de Lagrange para interpolacion numerica \n\n"); //imprime en la pantalla printf("\nLa tabla de datos es: \n\n"); //imprime en la pantalla printf("\n%10s %10s\n\n","x","f(x)"); //imprime en la pantalla for(i=0;i<4;i++) //ciclo for { printf("%10f %10f\n",x[i],fx[i]); //imprime en la pantalla } printf("\nLa formula del polinomio de 1er orden es: \n\n"); //imprime en la pantalla printf("\nf1(X)= (X-x1)/(x0-x1)*f(x0) + (X-x0)/(x1-x0)*f(x1)\n\n"); //imprime en la pantalla x0= x[0]; //asignacion de valor x1= x[1]; //asignacion de valor f1 = (X-x1)/(x0-x1)*fx[0] + (X-x0)/(x1-x0)*fx[1]; printf("\nValores usados: X= %f \t x0= %f \t x1= %f\n\n",X,x0,x1); //imprime en la pantalla printf("f1= %f\n\n",f1); //imprime en la pantalla
printf("\nLa formula del polinomio de 2do orden es: \n\n"); //imprime en la pantalla
[4] printf("\nf2(X)= (((X-x1)*(X-x2))/((x0-x1)*(x0-x2)))*f(x0) + (((X-x0)*(X-x2))/((x1-x0)*(x1x2)))*f(x1) + (((X-x0)*(X-x1))/((x2-x0)*(x2-x1)))*f(x2)\n\n"); //imprime en la pantalla x0= x[0]; //asignacion de valor x1= x[1]; //asignacion de valor x2= x[2]; //asignacion de valor f2 = (((X-x1)*(X-x2))/((x0-x1)*(x0-x2)))*fx[0] + (((X-x0)*(X-x2))/((x1-x0)*(x1-x2)))*fx[1] + (((X-x0)*(X-x1))/((x2-x0)*(x2-x1)))*fx[2]; printf("\nValores usados: X= %f \t x0= %f \t x1= %f \t x2= %f\n\n",X,x0,x1,x2); //imprime en la pantalla printf("f2= %f\n\n",f2); //imprime en la pantalla
printf("\nLa formula del polinomio de 3er orden es: \n\n"); //imprime en la pantalla printf("\nf3(X)= (((X-x1)*(X-x2)*(X-x3))/((x0-x1)*(x0-x2)*(x0-x3)))*f(x0) + (((X-x0)*(Xx2)*(X-x3))/((x1-x0)*(x1-x2)*(x1-x3)))*f(x1) + (((X-x0)*(X-x1)*(X-x3))/((x2-x0)*(x2-x1)*(x2x3)))*f(x2) + (((X-x0)*(X-x1)*(X-x2))/((x3-x0)*(x3-x1)*(x3-x2)))*f(x3) \n\n"); //imprime en la pantalla x0= x[0]; //asignacion de valor x1= x[1]; //asignacion de valor x2= x[2]; //asignacion de valor x3= x[3]; //asignacion de valor f3 = (((X-x1)*(X-x2)*(X-x3))/((x0-x1)*(x0-x2)*(x0-x3)))*fx[0] + (((X-x0)*(X-x2)*(X-x3))/((x1x0)*(x1-x2)*(x1-x3)))*fx[1] + (((X-x0)*(X-x1)*(X-x3))/((x2-x0)*(x2-x1)*(x2-x3)))*fx[2] + (((Xx0)*(X-x1)*(X-x2))/((x3-x0)*(x3-x1)*(x3-x2)))*fx[3]; printf("\nValores usados: X= %f x0= %f x1= %f x2= %f x3= %f\n\n",X,x0,x1,x2,x3); //imprime en la pantalla printf("f3= %f\n\n",f3); //imprime en la pantalla
getchar(); //congela la pantalla getchar(); //congela la pantalla return 0; //regresa un valor } int cuenta_renglones(FILE *archi) //funcion { char c='\0'; //delcaracion de variable int reng=0; //delcaracion de variable if(!(archi=fopen("tabla.txt","r"))) //validacion de archivo { printf("Error"); //imprime en la pantalla getchar(); //congela la pantalla exit(0); //Sale del prgrama } else { while(feof(archi)==0){ c=fgetc(archi); //asignacion de valor if (c=='\n')
[5] reng++; //variable contadora } } return reng+1; //regresa el numero de renglones mas uno } void cargar_archivo(FILE *archi, double *x, double *fx) //funcion { int cont=0; //delcaracion de variable if(!(archi=fopen("tabla.txt","r"))) //validacion de archivo { printf("ERROR"); //imprime en la pantalla getchar(); //congela la pantalla exit(0); //Sale del programa } else { while(feof(archi)==0) Validacion de fin de archivo { fscanf(archi, "%lf %lf", &x[cont], &fx[cont]); //guarda los valores del archivo cont++; //variable contadora } } }
[6]
[7]
[8]