Está en la página 1de 7

1.

- Programa en lenguaje C para verificar Interpolación Simple(Es muy similar a Lagrange y se puede
mejorar, inténtelo.):

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
float X[10],Y[10],x,N,D,y;
int n,i,j;
printf("***INTERPOLACION SIMPLE.***");
printf("\n\nIngresa el numero de puntos:");
scanf ("%d",&n);
printf("\nIngresa los puntos:\n");
for (i=0;i<n;i++)
{
printf("X[%d],Y[%d]:",i,i);
scanf ("%f,%f",&X[i],&Y[i]);
}
printf("\n\nIngresa el valor de x a calcular:");
scanf ("%f",&x);
y=0;
for(j=0;j<n;j++)
{
D=1;
N=1;
for(i=0;i<n;i++)
if (i!=j)
{
N=N*(x-X[i]);
D=D*(X[j]-X[i]);
}
printf ("\nEl valor de P[%d] es %.4f",j,N/D);
y=y+Y[j]*(N/D);
}
printf("\n\nEl resultado es (%.4f,%.4f).",x,y);
fflush(stdin);
printf("\nPresiona <ENTER> para terminar...");
getchar( );
}

2.- Programa en lenguaje C para verificar Interpolación de Lagrange:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
float X[10],Y[10],x,N,D,y;
int n,i,j;
printf("***INTERPOLACION DE LAGRANGE.***");
printf("\n\nIngresa el numero de puntos:");
scanf ("%d",&n);
printf("\nIngresa los puntos:\n");
for (i=0;i<n;i++)
{
printf("X[%d],Y[%d]:",i,i);
scanf ("%f,%f",&X[i],&Y[i]);
}
printf("\n\nIngresa el valor de x a calcular:");
scanf ("%f",&x);
y=0;
for(j=0;j<n;j++)
{
D=1;
N=1;
for(i=0;i<n;i++)
if (i!=j)
{
N=N*(x-X[i]);
D=D*(X[j]-X[i]);
}
printf ("\nEl valor de L[%d] es %.4f",j,N/D);
y=y+Y[j]*(N/D);
}
printf("\n\nEl resultado es (%.4f,%.4f).",x,y);
fflush(stdin);
printf("\nPresiona <ENTER> para terminar...");
getchar( );
}

3.- Programa en lenguaje C para verificar Interpolación de Newton(Diferencias divididas):

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
float X[100],Y[100][100],x,y,aux;
int n,i,j;
printf("***INTERPOLACION DE NEWTON MEDIANTE DIFERENCIAS DIVIDIDAS.***");
printf("\n\nIngresa el numero de puntos:");
scanf ("%d",&n);
printf("\nIngresa los puntos:\n");
for (i=0;i<n;i++)
{
printf("X[%d],Y[%d]:",i,i);
scanf ("%f,%f",&X[i],&Y[i][0]);
}
printf("\n\nIngresa el valor de x a calcular:");
scanf ("%f",&x);

//Calculo de las diferencias divididas


for (j=1;j<n;j++)
for (i=0;i<(n-j);i++)
Y[i][j]=(Y[i+1][j-1]-Y[i][j-1])/(X[i+j]-X[i]);

//Impresion de la Matriz de diferencias


printf ("\n\nValor de las diferencias divididas:\n");
for (i=0;i<n;i++)
{
for (j=0;j<(n-i);j++)
printf("%.2f ",Y[i][j]);
printf("\n");
}
//Calculo del resultado
y=Y[0][0];
for (i=1;i<(n-1);i++)
{
aux=1;
for (j=0;j<i;j++)
aux=aux*(x-X[j]);
y=y+aux*Y[0][i];
}
//Impresion de resultados
printf("\n\nEl resultado es (%.4f,%.4f).",x,y);
fflush(stdin);
printf("\nPresiona <ENTER> para terminar...");
getchar();
}

4.- /*Programa en C de ajuste de curvas por minimos cuadrados:*/

#include <stdio.h>

void PideDatos(int *Dat, int *Ord, float Val[][102]);

float Potencia(int n, float Num);

void PreparaSistema(int Ord, int Dat, float Sist[][102], float Val[][102]);

void ResuelveGauss(int Dim, float Sist[][102]);

void EscribeDatos(int Dim, float Sist[][102]);

int main(void)

{
int Datos,Orden,C;

float Valores[2][102],Sistema[102][102];

PideDatos(&Datos,&Orden,Valores);

PreparaSistema(Orden,Datos,Sistema,Valores);

printf("\n\n***El sistema a resolver es el siguiente:");

EscribeDatos(Orden,Sistema);

ResuelveGauss(Orden,Sistema);

printf("\n\n***El sistema resuelto:");

EscribeDatos(Orden,Sistema);

printf("\n\n***La Ecuacion del Polinomio ajustado por minimos Cuadrados***\n\n\tP(x)=");

for(C=1;C<=Orden;C++)

printf(" + (%f)X^%d",Sistema[C][Orden+1],C-1);

printf("\n");

return(0);

void PideDatos(int *Dat, int *Ord,float Val[][102])

int A,B;

printf("\n\n\n***METODO DE MINIMOS CUADRADOS***\n\n");

printf("\n***Introduce el numero de datos (Puntos):");

scanf("%d",&*Dat);

printf("\n\n\n***Introduce los valores de cada punto***\n");

for(A=1;A<=*Dat;A++)

printf(" ***Valores del Punto*** %d:\n",A);

printf(" X%d: ",A); scanf("%f",&Val[0][A]);

printf(" Y%d: ",A); scanf("%f",&Val[1][A]);

printf("\n\n\n***Introduce el orden del polinomio:");


scanf("%d",&B);

*Ord=B+1;

float Potencia(int n, float Num)

int A;

float res;

res=1;

for(A=1;A<=n;A++) res=res*Num;

return res;

void PreparaSistema(int Ord, int Dat, float Sist[][102], float Val[][102])

int A,B,C,Exp;

float suma,termino;

for(A=1;A<=Ord;A++) for(B=1;B<=Ord;B++)

suma=0;

Exp=A+B-2;

for(C=1;C<=Dat;C++)

termino=Val[0][C];

suma=suma+Potencia(Exp,termino);

Sist[A][B]=suma;

for(A=1;A<=Ord;A++)

suma=0;

Exp=A-1;
for(C=1;C<=Dat;C++)

termino=Val[0][C];

suma=suma+Val[1][C]*Potencia(Exp,termino);

Sist[A][Ord+1]=suma;

void ResuelveGauss(int Dim, float Sist[][102])

int NoCero,Col,C1,C2,A;

float Pivote,V1;

for(Col=1;Col<=Dim;Col++){

NoCero=0;A=Col;

while(NoCero==0){

if(Sist[A][Col]!=0){

NoCero=1;}

else A++;}

Pivote=Sist[A][Col];

for(C1=1;C1<=(Dim+1);C1++){

V1=Sist[A][C1];

Sist[A][C1]=Sist[Col][C1];

Sist[Col][C1]=V1/Pivote;}

for(C2=Col+1;C2<=Dim;C2++){

V1=Sist[C2][Col];

for(C1=Col;C1<=(Dim+1);C1++){

Sist[C2][C1]=Sist[C2][C1]-V1*Sist[Col][C1];}

}}

for(Col=Dim;Col>=1;Col--) for(C1=(Col-1);C1>=1;C1--){

Sist[C1][Dim+1]=Sist[C1][Dim+1]-Sist[C1][Col]*Sist[Col][Dim+1];
Sist[C1][Col]=0;

void EscribeDatos(int Dim, float Sist[][102])

int A,B;

printf("\n\n");

for(A=1;A<=Dim;A++){

for(B=1;B<=(Dim+1);B++){

printf("%7.2f",Sist[A][B]);

if(B==Dim) printf(" |");}

printf("\n");

printf("\n\n");

También podría gustarte