Você está na página 1de 4

#include<stdio.

h>
#include<stdlib.h>
#include<math.h>
int main()
{
//=========================
//Defindo as variavis.
//=========================
double x[100], f[100], a[100], M[100][100], fator,sum;
int i,j,k,n,p,o,g,l;
//=========================
//Determinando o grau do polinmio.
//=========================
printf("Quantos elementos cada grupo da sua tabela tem.\n");
scanf("%d", &l);
//Grau do polinomio
n=l-1;
printf("O grau do Polinomio da interpolao eh %d.\n", n);
//Dimenso do problema.
g=n+1;

//=========================
//Lendo os valores de x.
//=========================
printf("Atribua os valores de x\n");
for(i=0; i<=n;i++){
printf("Elemento %d \n", i);
scanf("%lf",&x[i]);
}
//=========================
//Lendo os valores de f.
//=========================
printf("Atribua os valores de f\n");
for(i=0;i<=n;i++){
printf("Elemento %d \n", i);
scanf("%lf",&f[i]);
}
//=========================
//Determinando a Matriz de Vandermond

//=========================
for(i=0;i<=n;i++){
for(j=0;j<=n;j++){
if(j<=n){
M[i][j]=pow(x[i],j);
}
}
}
//=========================
//Imprimindo a Matriz de Vandermond
//=========================
//----------------------------------------------------------printf("Matriz de Vandermond\n\n");
//----------------------------------------------------------for(i=0;i<=n;i++){
for(j=0;j<=n;j++){
printf("%lf ",M[i][j]);
}
printf("= %lf \n", f[i]);
}
//----------------------------------------------------------printf("\nImprimindo os passos da eliminao de Gauss\n\n");
//----------------------------------------------------------//=========================
//Determinando os coeficientes.
//=========================
// Parte A: Eliminacao -----------------------------------------// Nessa secao do algoritmo, fazemos uma serie de operacoes
// lineares sobre a matriz (troca da ordem das equacoes,
// multiplicacao de uma equacao por uma constante nao nula,
// adicao de equacoes, etc.) de modo sistematico, ate que
// o sistema "triangularize" e o sistema resultante possa ser
// resolvido por substituicoes retroativas
for(k=0; k<=g-2; k++) // os ices comecam em zero no C++
{
for(i=k+1; i<=g-1; i++)
{
fator = M[i][k]/M[k][k];
for(j=k+1;j<=g-1;j++)
{
// transformando "M"
M[i][j] = M[i][j] - (fator*M[k][j]);

}
// transformando "f" (matriz aumentada)
f[i] = f[i] - (fator * f[k]);
//zerando antes da diagonal para formar um triang. sup.
M[i][k] = 0.0f;
}
// Esse bloco imprime na tela as matrizes aumentadas ---------// intermediarias a cada passo das transformacoes lineares
for(o=0; o<=g-1; o++) // varre todas as linhas
{
printf("|");
for(p=0; p<=g-1; p++) // varre todas as colunas
{
printf(" %lf ",M[o][p]) ;
}
printf ("%lf | \n", f[o]);
}
printf("\n");
}
//----------------------------------------------------------printf("\nObtendo os coeficientes do Polinomio.\n\n");
//----------------------------------------------------------// Parte B: Retrossubstituicao ---------------------------------// Nessa secao do algoritmo ja temos um sistema triangular, agora
// vamos do fim para o comeco trocando os valores de x ate
// resolver o sistema completo
// o primeiro (que eh o ultimo) fazemos fora do laco
a[g-1]=f[g-1]/M[g-1][g-1];
// dentro do laco fazemos agora do penultimo ate o prim.
for(i=g-2; i>=0; i--)
{
sum = 0.0f;
for(j=i+1; j<=g-1; j++)
{
sum = sum + M[i][j] * a[j];
}
// passando para o outro lado e achando a(i)
a[i] = (f[i] - sum)/M[i][i];
}
for(i=0; i<=g-1; i++) // imprimindo na tela os resultados
{
printf("a(%i) = %lf \n", i, a[i]);
}

return(0);
system("PAUSE");
}

Você também pode gostar