Buscar

Calculo Numerico

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Desenvolvido por Fabrício Aguiar 
Cálculo Numérico - Implementações em C 
 
//CONVERSOR BASE DECIMAL 
 
#include<stdio.h> 
#include<stdlib.h> 
 
#define TRUE 1 
#define FALSE 0 
#define MAX 100 
 
int main(void){ 
 
 int quociente,resto,divisor,dividendo,i,j,vet[MAX],teste; 
 printf("\n\n ------ Conversor de base decimal para uma base qualquer ------\n\n\n\n"); 
 printf("Digite o numero: "); 
 scanf("%ld",&dividendo); 
printf("Digite a base a ser convertida: "); 
 scanf("%ld",&divisor); 
 
 teste = TRUE; 
 
 i = 0; 
 while(teste){ 
 resto = dividendo % divisor; 
 quociente = dividendo/divisor; 
 vet[i] = resto; 
 
 dividendo = quociente; 
 i++; 
 
 if(quociente == 0){ 
 teste = FALSE; 
 vet[i] = 1; 
 } 
 } 
 for(j = i-1; j >= 0; j--){ /*impressão do último para o primeiro*/ 
 printf(" %d", vet[j]); 
 } 
 
 printf("\n\n"); 
 system("pause"); 
 return 0; 
} 
 
 
_________________________________________________________________ 
 
// MÉTODOS NUMÉRICOS 
 
 
#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 
 
int menu(void); 
void bissecao(float a, float b, float c); 
void posicaofalsa(float a, float b, float c); 
void pontofixo(float a, float b, float c, float x0); 
void newton(float a, float b, float c, float x0); 
void secante(float a, float b, float c, float x0, float x1); 
 
float polinomio(float); 
float derivada(float); 
float quici(float); 
float mod(float); 
//função x³-x-1 
 
main(){ 
 int opc; 
 float a,b,e,x,fx,d,h,x0,x1; 
 
 
 do{ 
 opc = menu(); 
 switch(opc){ 
 case 1: 
 printf("\nMETODO DA BISSECAO:\n\n"); 
 printf("Entre com a: ",a); 
 scanf("%f",&a); 
 printf("Entre com b: ",b); 
 scanf("%f",&b); 
 printf("Entre com a precisao: ",e); 
 scanf("%f",&e); 
 d=b-a; 
 if (d<e){ 
 x= a+b; 
 x=x/2; 
 fx= polinomio(x); 
 printf(" \nx= %f e f(x)= %f",x,fx); 
 } 
 bissecao(a,b,e); 
 
 break; 
 case 2: 
 printf("\nMETODO DA POSICAO FALSA:\n\n"); 
 printf("Entre com a: ",a); 
 scanf("%f",&a); 
 printf("Entre com b: ",b); 
 scanf("%f",&b); 
 printf("Entre com a precisao: ",e); 
 scanf("%f",&e); 
 d=b-a; 
 if (d<e){ 
 x= a+b; 
 x=x/2; 
 fx= polinomio(x); 
 printf(" \nx= %f e f(x)= %f",x,fx); 
 } 
 posicaofalsa(a,b,e); 
 break; 
 case 3: 
 printf("\nMETODO DO PONTO FIXO:\n\n"); 
 printf("Q(x) = (x+1)^1/3\n\n"); 
 printf("Entre com a: ",a); 
 scanf("%f",&a); 
 printf("Entre com b: ",b); 
 scanf("%f",&b); 
 printf("Entre com a precisao: ",e); 
 scanf("%f",&e); 
 printf("Entre com o x0: ",x0); 
 scanf("%f",&x0); 
 h=polinomio(x0); 
 h=mod(h); 
 if (h<e){ 
 x= x0; 
 fx= polinomio(x); 
 printf(" \nx= %f e f(x)= %f",x,fx); 
 } 
 pontofixo(a,b,e,x0); 
 break; 
 case 4: 
 printf("\nMETODO DE NEWTON:\n\n"); 
 printf("Entre com a: ",a); 
 scanf("%f",&a); 
 printf("Entre com b: ",b); 
 scanf("%f",&b); 
 printf("Entre com a precisao: ",e); 
 scanf("%f",&e); 
 printf("Entre com o x0: ",x0); 
 scanf("%f",&x0); 
 h=polinomio(x0); 
 h=mod(h); 
 if (h<e){ 
 x= x0; 
 fx= polinomio(x); 
 printf(" \nx= %f e f(x)= %f",x,fx); 
 } 
 newton(a,b,e,x0); 
 break; 
 case 5: 
 printf("Entre com a: ",a); 
 scanf("%f",&a); 
 printf("Entre com b: ",b); 
 scanf("%f",&b); 
 printf("Entre com a precisao: ",e); 
 scanf("%f",&e); 
 printf("Entre com o x0: ",x0); 
 scanf("%f",&x0); 
 printf("Entre com o x1: ",x1); 
 scanf("%f",&x1); 
 h=polinomio(x0); 
 h=mod(h); 
 if (h<e){ 
 x= x0; 
 fx= polinomio(x); 
 printf(" \nx= %f e f(x)= %f",x,fx); 
 } 
 secante(a,b,e,x0,x1); 
 break; 
 case 6: 
 system("funcao.pdf"); 
 break; 
 case 7: 
 printf("Encerrando o programa.\n\n"); 
 break; 
 default: 
 printf("Opcao invalida.\n<Enter>" ); 
 fflush(stdin); 
 getchar(); 
 break; 
 } 
 }while(opc!=7); 
} 
 
int menu(void){ 
 int ret; 
 printf("\n\n\n"); 
 printf("===== f(x)= X^3 - X - 1 =====\n\n\n"); 
 printf("[1] - bissecao\n"); 
 printf("[2] - posicao falsa\n"); 
 printf("[3] - pontofixo \n"); 
 printf("[4] - newton\n"); 
 printf("[5] - secante\n"); 
 printf("[6] - grafico\n"); 
 printf("[7] - Sair\n"); 
 printf("\n\nEntre com a opcao: "); 
 fflush(stdin); 
 scanf("%d",&ret); 
 return ret; 
} 
 
float mod(float a){ 
 float x; 
 x= a*a; 
 x=sqrt(x); 
 return x; 
} 
 
float polinomio(float a){ 
 float x; 
 x = (a*a)*a; 
 x= x - a; 
 x= x-1; 
 return x; 
 } 
 
float quici(float a){ 
 float x,y; 
 y=(1.0/3.0); 
 x = a+1; 
 x= pow(x,y); 
 return x; 
} 
 
float derivada(float a){ 
 float x; 
 x = (a*a)*3; 
 x= x-1; 
 return x; 
 } 
 
void bissecao(float a, float b, float c){ 
 int cont=0; 
 float x,fx,fa,fb,s; 
 do{ 
 cont = cont+1; 
 fa=polinomio(a); 
 fb=polinomio(b); 
 x=a+b; 
 x=x/2; 
 fx=polinomio(x); 
 if(fx<0){ 
 a=x; 
 s=b-a; 
 } 
 if(fx>0){ 
 b=x; 
 s=b-a; 
 } 
 
 printf("\n iteracao : %d | b-a = %f | x = %f | f(x) = %f ",cont,s,x,fx); 
 }while(s>c); 
 
 
 
} 
 
void posicaofalsa(float a, float b, float c){ 
 int cont=0; 
 float x,fx,fa,fb,s,y,j,l,m; 
 do{ 
 
 cont = cont+1; 
 fa=polinomio(a); 
 fb=polinomio(b); 
 y=fb-fa; 
 j=a*fb; 
 l=b*fa; 
 x=j-l; 
 x=x/y; 
 
 fx=polinomio(x); 
 m=mod(fx); 
 if(fx<0){ 
 a=x; 
 s=b-a; 
 } 
 if(fx>0){b=x; 
 s=b-a; 
 } 
 
 printf("\n iteracao : %d | b-a = %f | x = %f | f(x) = %f ",cont,s,x,fx); 
 }while(m>=c); 
 
 
 
} 
 
void pontofixo(float a, float b, float c, float x0){ 
 
 //x0=1; 
 int cont=0; 
 float x,s,v,d,fx; 
 do{ 
 cont = cont+1; 
 x = quici(x0); 
 fx=polinomio(x); 
 v=mod(fx); 
 d=x-x0; 
 d=mod(d); 
 if((v<c)||(d<c)){ 
 printf("\n iteracao : %d | x = %f | f(x) = %f ",cont,x,fx); 
 break; 
 } 
 x0=x; 
 
 printf("\n iteracao : %d | x = %f | f(x) = %f ",cont,x,fx); 
 }while((v>c)||(d>c)); 
 
 
 
 } 
 
void newton(float a, float b, float c, float x0){ 
 
 int cont=0; 
 float x,s,v,d,fx,w,k,h; 
 do{ 
 cont = cont+1; 
 w = polinomio(x0); 
 k=derivada(x0); 
 h=w/k; 
 x=x0-h; 
 fx=polinomio(x); 
 v=mod(fx); 
 d=x-x0; 
 d=mod(d); 
 if((v<c)||(d<c)){ 
 printf("\n iteracao : %d | x = %f | f(x) = %f ",cont,x,fx); 
 break; 
 } 
 x0=x; 
 
 printf("\n iteracao : %d | x = %f | f(x) = %f ",cont,x,fx); 
 }while((v>c)||(d>c)); 
 
 
 
 } 
 
void secante(float a, float b, float c, float x0, float x1){ 
 
 int cont=0; 
 float x,s,v,d,fx,w,k,h,j,l,t; 
 j=polinomio(x1); 
 j=mod(j); 
 l=x1-x0; 
 l=mod(l); 
 if ((j<c)||(l<c)){ 
 x= x1; 
 fx= polinomio(x); 
 printf(" \nx= %f e f(x)= %f",x,fx); 
 } 
 
 do{ 
 cont = cont+1; 
 w=x1-x0; 
 k=polinomio(x1); 
 h=polinomio(x0); 
 t=k-h; 
 k= k/t; 
 k=k*w; 
 x=x1-k; 
 fx=polinomio(x); 
 v=mod(fx); 
 d=x-x1; 
 d=mod(d); 
 if((v<c)||(d<c)){ 
 printf("\n iteracao : %d | x = %f | f(x) = %f ",cont,x,fx); 
 break; 
 } 
 x0=x1; 
 x1=x; 
 
 
 printf("\n iteracao : %d | x = %f | f(x) = %f ",cont,x,fx); 
 }while((v>c)||(d>c)); 
 
 
 
 } 
 
 
_________________________________________________________________ 
 
//SISTEMA DIRETO 
 
#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 
 
int menu(void); 
void trisuperior(float a[4][4], float b[4]); 
void gauss(float a[4][4], float b[4]); 
void LU(float a[4][4], float b[4]); 
void cholesky(float a[4][4]); 
 
 
main(){ 
 int opc,i,j; 
 float a[4][4]; 
 float b[4]; 
 float x[4]; 
 
 
 do{ 
 opc = menu(); 
 switch(opc){ 
 case 1: 
 printf("\nMETODO DE GAUSS:\n\n"); 
 for(i=0;i<4;i++){ 
 for(j=0;j<4;j++){ 
 printf("Entre com a[%d][%d]: ",i+1,j+1,a[i][j]); 
 scanf("%f",&a[i][j]); 
} 
} 
 for(i=0;i<4;i++){ 
 printf("Entre com b[%d]: ",i+1,b[i]); 
 scanf("%f",&b[i]); 
} 
for(i=0;i<4;i++){ 
 printf("|"); 
 for(j=0;j<4;j++){ 
 printf(" %3.2f ",a[i][j]); 
 } 
 printf("| %.2f |\n",b[i]); 
 } 
 printf("\n"); 
 
 gauss(a,b); 
 
 break; 
 case 2: 
 printf("\nFATORACAO LU:\n\n"); 
 for(i=0;i<4;i++){ 
 for(j=0;j<4;j++){ 
 printf("Entre com a[%d][%d]: ",i+1,j+1,a[i][j]); 
 scanf("%f",&a[i][j]); 
} 
} 
 for(i=0;i<4;i++){ 
 printf("Entre com b[%d]: ",i+1,b[i]); 
 scanf("%f",&b[i]); 
} 
for(i=0;i<4;i++){ 
 printf("|"); 
 for(j=0;j<4;j++){ 
 printf(" %3.2f ",a[i][j]); 
 } 
 printf("| %.2f |\n",b[i]); 
 } 
 printf("\n"); 
 LU(a,b); 
 break; 
 case 3: 
 printf("\nFATORACAO DE CHOLESKY:\n\n"); 
 for(i=0;i<4;i++){ 
 for(j=0;j<4;j++){ 
 printf("Entre com a[%d][%d]: ",i+1,j+1,a[i][j]); 
 scanf("%f",&a[i][j]); 
} 
} 
 
 cholesky(a); 
 
 break; 
 
 case 4: 
 printf("Encerrando o programa.\n\n"); 
 break; 
 default: 
 printf("Opcao invalida.\n<Enter>" ); 
 fflush(stdin); 
 getchar(); 
 break; 
 } 
 }while(opc!=4); 
} 
 
int menu(void){ 
 int ret; 
 printf("\n\n\n"); 
 printf("SISTEMAS METODO DIRETO\n\n"); 
 printf("[1] - Gauss\n"); 
 printf("[2] - LU\n"); 
 printf("[3] - Cholesky \n"); 
 printf("[4] - Sair\n"); 
 printf("\n\nEntre com a opcao: "); 
 fflush(stdin); 
 scanf("%d",&ret); 
 return ret; 
} 
 
float mod(float a){ 
 float x; 
 x= a*a; 
 x=sqrt(x); 
 return x; 
} 
 
void trisuperior(float a[4][4], float b[4]){ 
 float x[4],s,h; 
 int k,i,j,n; 
 n=4; 
 if(a[n-1][n-1]!=0){ 
 if(b[n-1]==0){ 
 x[n-1]=0; 
 }else{ 
 x[n-1]=b[n-1]/a[n-1][n-1]; 
 } 
 } 
 n=n-1; 
 x[n-1]=b[n-1]/a[n-1][n-1]; 
 
 for (k=n-1;k>-1;k--){ 
 s=0; 
 for(j=k+1;j<n;j++){ 
 h=a[k][j]*x[j]; 
 s=s+h; 
 x[k]=b[k]-s; 
 } 
 x[k]=x[k]/a[k][k]; 
 } 
 
 
 for(i=0;i<4;i++){ 
 printf("|"); 
 for(j=0;j<4;j++){ 
 printf("%3.2f ",a[i][j]); 
 } 
 printf("| %.2f | = | %.2f |\n",b[i],x[i]); 
 } 
 printf("\n"); 
} 
 
void gauss(float a[4][4], float b[4]){ 
 int k,i,j,n=4; 
 float m,r,h,y; 
 
 
 
 for (k=0;k<n-1;k++){ 
 for (i=k+1;i<n-1;i++){ 
 m=a[i][k]/a[k][k]; 
 a[i][k]=0; 
 for (j=k+1;j<n-1;j++){ 
 h=m*a[k][j]; 
 a[i][j]=a[i][j]- h; 
 } 
 y=m*b[k]; 
 b[i]=b[i]-y;} 
 } 
 
 
 
 trisuperior(a,b); 
 
} 
 
void LU(float a[4][4], float b[4]){ 
 float c[4],pv,m,q,ux,soma,linha,t,y[4],x[4],z,l[4][4],u[4][4]; 
 int p[4],i,j,k,r,aux,n=4; 
 
 linha=0.0; 
 for(i=n-1;i>=0;i--){ 
 for(j=0;j<n;j++){ 
 linha = linha + a[i][j]; 
 } 
 if(linha==0){ 
 n=n-1; 
 } 
 } 
 
 for(i=0;i<n;i++){ 
 for(j=0;j<n;j++){ 
 l[i][j]=0; 
 u[i][j]=0; 
 } 
 l[i][i]=1; 
 } 
 
 
 j=n-1; 
 for (i=0;i<n;i++){ 
 p[i]=j; 
 j--; 
 } 
 for(k=0;k<n-1;k++){ 
 pv = mod(a[k][k]); 
 r=k; 
 for(i=k+1;i<n;i++){ 
 m = mod(a[i][k]); 
 if (m >pv){ 
 pv=m; 
 r=i; 
 } 
 } 
 if(pv==0){ 
 printf("a matriz A é singular"); 
 break; 
 } 
 if(r!=k){ 
 aux =p[k]; 
 p[k]=p[r]; 
 p[r]=aux; 
 for(j=0;j<n;j++){ 
 ux=a[k][j]; 
 a[k][j]=a[r][j]; 
 a[r][j]=ux; 
 } 
 } 
 
 for(i=k+1;i<n;i++){ 
 m=a[i][k]/a[k][k]; 
 a[i][k]=m; 
 for(j=k+1;j<n;j++){ 
 q=m*a[k][j]; 
 a[i][j]=a[i][j]-q; 
 } 
 } 
 } 
 
 //resolução sistemas triangulares 
 
 
 
 for(i=0;i<n;i++){ 
 r=p[i]; 
 c[i]=b[r]; 
 } 
 
 for(i=0;i<n;i++){ 
 soma=0; 
 for(j=0;j<=i-1;j++){ 
 t=(a[i][j]*y[j]); 
 l[i][j]=a[i][j]; 
 soma=soma+t; 
 } 
 y[i]=c[i]-soma; 
 } 
 for(i=n-1;i>=0;i--){ 
 soma=0; 
 for(j=i+1;j<n+1;j++){ 
 t=(a[i][j]*x[j]); 
 //u[i][j]=a[i][j]; 
 soma=soma+t; 
 } 
 z=y[i]-soma; 
 x[i]=z/a[i][i]; 
 } 
 
for (i=0;i<n;i++){ 
 p[i]=i; 
 } 
 for(i=0;i<n;i++){ 
 for(j=0;j<n;j++){ 
 r=p[i]; 
 printf("p[%d]=%d\n",i,p[i]); 
 u[i][j]=a[r][j]; 
 } 
 } 
 
 
 for(i=0;i<n;i++){ 
 for(j=0;j<n;j++){ 
 if(i>j){ 
 u[i][j]=0; 
 } 
 } 
 } 
 
 
 printf("L= \n"); 
 for(i=0;i<n;i++){ 
 printf("|"); 
 for(j=0;j<n;j++){ 
 printf(" %3.2f ",l[i][j]); 
 } 
 printf("|\n"); 
 } 
 printf("\n"); 
 printf("U= \n"); 
 for(i=0;i<n;i++){ 
 printf("|"); 
 for(j=0;j<n;j++){ 
 printf(" %3.2f ",u[i][j]); 
 } 
 printf("|\n"); 
 } 
 printf("\n"); 
 
 
 for(i=0;i<n;i++){ 
 // printf("|"); 
 printf("x = | %.2f | e y = | %.2f |\n",x[i],y[i]); 
 } 
 printf("\n"); 
 
} 
 
void cholesky(float a[4][4]){ 
 int k,j,i,n,t,ts; 
 float soma,linha,g[4][4],q,r,m,h,s; 
 n=4; 
 
 for(i=0;i<n;i++){ 
 
 for(j=0;j<n;j++){ 
 if(i<j){ 
 g[i][j]=0; 
 } 
 } 
 } 
 
 
g[0][0]=sqrt(a[0][0]); 
for(i=0;i<n;i++){ 
 g[i][0]=a[i][0]/g[0][0]; 
} 
 
q=g[1][0]*g[1][0]; 
g[1][1]=a[1][1]- q; 
g[1][1]=sqrt(g[1][1]); 
 
m=g[2][0]*g[1][0]; 
g[2][1]= a[2][1]-m; 
g[2][1]=g[2][1]/g[1][1]; 
 
q=g[2][0]*g[2][0]; 
q=q+(g[2][1]*g[2][1]); 
g[2][2]=a[2][2]-q; 
g[2][2]=sqrt(g[2][2]); 
 
m=g[3][0]*g[1][0]; 
g[3][1]= a[3][1]-m; 
g[3][1]=g[3][1]/g[1][1]; 
 
m=g[3][0]*g[2][0]; 
h=g[3][1]*g[1][1]; 
m=m+h; 
g[3][2]= a[3][2]-m; 
g[3][2]=g[3][2]/g[2][2]; 
 
q=g[3][0]*g[3][0]; 
q=q+(g[3][1]*g[3][1]); 
q=q+(g[3][2]*g[3][2]); 
g[3][3]=a[3][3]-q; 
g[3][3]=sqrt(g[3][3]); 
 
 linha=0.0; 
 for(i=n-1;i>=0;i--){ 
 for(j=0;j<n;j++){ 
 linha = linha + a[i][j]; 
 } 
 if(linha==0){ 
 n=n-1; 
 } 
 } 
 for(i=n-1;i>=0;i--){ 
 for(j=0;j<n;j++){ 
 if(a[i][j]!=a[j][i]){ 
 ts=1; 
 printf("\nErro ! Matriz nao e simetrica\n"); 
 break; 
 } 
 if(ts==1){ 
 break; 
 } 
 } 
 } 
 
 if(ts!=1){ 
 for(i=0;i<n;i++){ 
 printf("|"); 
 for(j=0;j<n;j++){ 
 printf("%3.2f ",g[i][j]); 
 } 
 printf("|\n"); 
 } 
 printf("\n"); 
 } 
 } 
 
 
_________________________________________________________________ 
 
//SISTEMA ITERATIVO 
 
#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 
 
int menu(void); 
void jacobi(float a[4][4], float b[4],float x[4],float e); 
void seidel(float a[4][4], float b[4],float x[4],float e); 
 
 
 
main(){ 
 int opc,i,j; 
 float a[4][4]; 
 float b[4]; 
 float x[4]; 
 float e; 
 
 
 do{ 
 opc = menu(); 
 switch(opc){ 
 case 1: 
 printf("\nMETODO DE GAUSS-JACOBI:\n\n"); 
 for(i=0;i<4;i++){ 
 for(j=0;j<4;j++){ 
 printf("Entre com a[%d][%d]: ",i+1,j+1); 
 scanf("%f",&a[i][j]); 
} 
} 
 for(i=0;i<4;i++){ 
 printf("Entre com b[%d]: ",i+1); 
 scanf("%f",&b[i]); 
} 
 for(i=0;i<4;i++){ 
 printf("Entre com x0[%d]: ",i+1); 
 scanf("%f",&x[i]); 
} 
printf("Entrecom a precisao: "); 
 scanf("%f",&e); 
 printf("\n"); 
 for(i=0;i<4;i++){ 
 printf("|"); 
 for(j=0;j<4;j++){ 
 printf(" %3.2f ",a[i][j]); 
 } 
 printf("| %.2f |\n",b[i]); 
 } 
 printf("\n"); 
 
 jacobi(a,b,x,e); 
 
 break; 
 case 2: 
 printf("\nMETODO DE GAUSS-SEIDEL:\n\n"); 
 for(i=0;i<4;i++){ 
 for(j=0;j<4;j++){ 
 printf("Entre com a[%d][%d]: ",i+1,j+1); 
 scanf("%f",&a[i][j]); 
} 
} 
 for(i=0;i<4;i++){ 
 printf("Entre com b[%d]: ",i+1); 
 scanf("%f",&b[i]); 
} 
 for(i=0;i<4;i++){ 
 printf("Entre com x0[%d]: ",i+1); 
 scanf("%f",&x[i]); 
} 
printf("Entre com a precisao: "); 
 scanf("%f",&e); 
 printf("\n"); 
 for(i=0;i<4;i++){ 
 printf("|"); 
 for(j=0;j<4;j++){ 
 printf(" %3.2f ",a[i][j]); 
 } 
 printf("| %.2f |\n",b[i]); 
 } 
 printf("\n"); 
 
 seidel(a,b,x,e); 
 break; 
 
 
 case 3: 
 printf("Encerrando o programa.\n\n"); 
 break; 
 default: 
 printf("Opcao invalida.\n<Enter>" ); 
 fflush(stdin); 
 getchar(); 
 break; 
 } 
 }while(opc!=3); 
} 
 
int menu(void){ 
 int ret; 
 printf("\n\n\n"); 
 printf("SISTEMAS METODO ITERATIVO\n\n"); 
 printf("[1] - Gauss-Jacobi\n"); 
 printf("[2] - Gauss-Seidel\n"); 
 printf("[3] - Sair\n"); 
 printf("\n\nEntre com a opcao: "); 
 fflush(stdin); 
 scanf("%d",&ret); 
 return ret; 
} 
 
float mod(float a){ 
 float x; 
 x= a*a; 
 x=sqrt(x); 
 return x; 
} 
 
 
 
void jacobi(float a[4][4], float b[4],float x[4], float e){ 
 
int i,j,CL,CC,CN,cont,n=4; 
float max,soma,numerador,denominador,linha,m,h,d,z,p,dv,y[4],bt[4],md,nm,bta[4]; 
// x= (k) e y=(k+1) 
 
 linha=0.0; 
 for(i=n-1;i>=0;i--){ 
 for(j=0;j<n;j++){ 
 linha = linha + a[i][j]; 
 } 
 if(linha==0){ 
 n=n-1; 
 } 
 } 
 
max= 0; 
for(i=0;i<n;i++){ 
 soma = 0; 
 for(j=0;j<n;j++){ 
 if(i!=j){ 
 m=mod(a[i][j]); 
 soma=soma+ m; 
 } 
 } 
 m=mod(a[i][j]); 
 soma=soma/m; 
 if(max<soma){ 
 max=soma; 
 } 
 } 
 if(max<1){ 
 printf("\n\nCriterio das linhas satisfeito\n"); 
 CL=1; 
 }else{ 
 CL=0; 
 
 } 
 
 
for(j=0;j<n;j++){ 
soma=0; 
for(i=0;i<n;i++){ 
 if(i!=j){ 
 m=mod(a[i][j]); 
 soma=soma+m; 
 } 
 } 
 m=mod(a[i][j]); 
 soma=soma/m; 
 if(max<soma){ 
 max=soma; 
 } 
 } 
 if(max<1){ 
 printf("\n\nCriterio das colunas satisfeito\n"); 
 CC=1; 
 }else{ 
 CC=0; 
 } 
 
 for(i=0;i<n;i++){ 
 for(j=0;j<n;j++){ 
 md=md+mod(a[i][j]); 
 } 
 if(md>nm){ 
 nm=md; 
 } 
 } 
 if(nm<1){ 
 printf("\n\nCriterio das normas satisfeito\n"); 
 CN=1; 
 } 
 
for(i=0;i<n;i++){ 
 for(j=0;j<n;j++){ 
 md=md+mod(a[j][i]); 
 } 
 if(md>nm){ 
 nm=md; 
 } 
 } 
 if(nm<1){ 
 printf("\n\nCriterio das normas satisfeito\n"); 
 CN=1; 
 } 
 
 
if(CL==1)printf("\n\nCriterio das linhas satisfeito\n\n"); 
if(CC==1)printf("\n\nCriterio das colunas satisfeito\n\n"); 
if(CN==1)printf("\n\nCriterio das normas satisfeito\n\n"); 
if((CL==1)||(CC==1)||(CN==1)){ 
 cont = 0; 
 do{ 
 cont=cont+1; 
 numerador =0; 
 denominador =0; 
 for(i=0;i<n;i++){ 
 y[i]=0; 
 for(j=0;j<n;j++){ 
 if(i!=j){ 
 h=a[i][j]*x[j]; 
 y[i]=y[i]+h; 
 } 
 } 
 d=b[i]-y[i]; 
 y[i]=1.0/a[i][i]; 
 y[i]=y[i]*d; 
 z=y[i]-x[i]; 
 z=mod(z); 
 if(numerador<z){ 
 numerador =z; 
 } 
 p=mod(y[i]); 
 if(denominador<p){ 
 denominador=mod(y[i]); 
 } 
 } 
 for(i=0;i<n;i++){ 
 x[i]=y[i]; 
 } 
 
 dv=numerador/denominador; 
 
 }while(dv<e); 
 
 
 
 for(i=0;i<n;i++){ 
 printf("x = |%.2f|\n",x[i]); 
 } 
 printf("iteracao : %d\n",cont); 
 
 
 
} 
 
 
} 
void seidel(float a[4][4], float b[4], float x[4], float e){ 
int i,j,CL,CC,CS,CN,cont,n=4; 
float numerador,denominador,linha,t,h,d,v,dv,y[4],m,max,mb,aux,md,nm,bt[4],bta[4],soma; 
 
 linha=0.0; 
 for(i=n-1;i>=0;i--){ 
 for(j=0;j<n;j++){ 
 linha = linha + a[i][j]; 
 } 
 if(linha==0){ 
 n=n-1; 
 } 
 } 
 
 max= 0; 
for(i=0;i<n;i++){ 
 soma = 0; 
 for(j=0;j<n;j++){ 
 if(i!=j){ 
 m=mod(a[i][j]); 
 soma=soma+ m; 
 } 
 } 
 m=mod(a[i][j]); 
 soma=soma/m; 
 if(max<soma){ 
 max=soma; 
 } 
 } 
 if(max<1){ 
 printf("\n\nCriterio das linhas satisfeito\n"); 
 CL=1; 
 }else{ 
 CL=0; 
 
 } 
 
 
for(j=0;j<n;j++){ 
soma=0; 
for(i=0;i<n;i++){ 
 if(i!=j){ 
 m=mod(a[i][j]); 
 soma=soma+m;} 
 } 
 m=mod(a[i][j]); 
 soma=soma/m; 
 if(max<soma){ 
 max=soma; 
 } 
 } 
 if(max<1){ 
 printf("\n\nCriterio das colunas satisfeito\n"); 
 CC=1; 
 }else{ 
 CC=0; 
 } 
 
 for(i=0;i<n;i++){ 
 
 for(i=0;i<n;i++){ 
 for(j=0;j<n;j++){ 
 bt[i]=bt[i]+mod(a[i][j]); 
 
 } 
 bt[i]=bt[i]/mod(a[i][i]); 
 for(j=0;j<n;j++){ 
 aux=mod(a[i][j])*bt[i]; 
 } 
bta[i]=bta[i]+aux; 
bta[i]=bta[i]/mod(a[i][i]); 
} 
for(i=0;i<n;i++){ 
 if(mb<bta[i]){ 
 mb=bta[i]; 
} 
} 
if(mb<1){ 
 printf("\n\nCriterio de Sassenfeld satisfeito\n"); 
 CS=1; 
 } 
 
for(i=0;i<n;i++){ 
 for(j=0;j<n;j++){ 
 bt[i]=bt[i]+mod(a[j][i]); 
 
 } 
 bt[i]=bt[i]/mod(a[j][j]); 
 for(j=0;j<n;j++){ 
 aux=mod(a[j][i])*bt[i]; 
 } 
bta[i]=bta[i]+aux; 
bta[i]=bta[i]/mod(a[j][j]); 
} 
for(i=0;i<n;i++){ 
 if(mb<bta[i]){ 
 mb=bta[i]; 
} 
} 
if(mb<1){ 
 printf("\n\nCriterio de Sassenfeld satisfeito\n"); 
 CS=1; 
 } 
 
for(i=0;i<n;i++){ 
 for(j=0;j<n;j++){ 
 md=md+mod(a[i][j]); 
 } 
 if(md>nm){ 
 nm=md; 
 } 
 } 
 if(nm<1){ 
 printf("\n\nCriterio das normas satisfeito\n"); 
 CN=1; 
 } 
 
for(i=0;i<n;i++){ 
 for(j=0;j<n;j++){ 
 md=md+mod(a[j][i]); 
 } 
 if(md>nm){ 
 nm=md; 
 } 
 } 
 if(nm<1){ 
 printf("\n\nCriterio das normas satisfeito\n"); 
 CN=1; 
 } 
 
 
 
cont=0; 
if(CL==1)printf("\n\nCriterio das linhas satisfeito\n\n"); 
if(CC==1)printf("\n\nCriterio das colunas satisfeito\n\n"); 
if(CN==1)printf("\n\nCriterio das normas satisfeito\n\n"); 
if(CS==1)printf("\n\nCriterio de Sassenfeld satisfeito\n\n"); 
if((CL==1)||(CC==1)||(CN==1)||(CS==1)){ 
do{ 
 cont=cont+1; 
 numerador=0; 
 denominador=0; 
 for(i=0;i<n;i++){ 
 y[i]=0; 
 
 for(j=0;j<n;j++){ 
 if(i!=j){ 
 t=a[i][j]*x[j]; 
 y[i]=y[i]+t; 
 } 
 } 
 
 h=b[i]-y[i]; 
 y[i]=1.0/a[i][i]; 
 y[i]=y[i]*h; 
 
 d=y[i]-x[i]; 
 d=mod(d); 
 v=mod(y[i]); 
 
 if(numerador<d){ 
 numerador = d; 
 
 } 
 if(denominador<v){ 
 denominador=mod(y[i]); 
 
 } 
 
 x[i]=y[i]; 
 dv=numerador/denominador; 
 } 
 
 }while(dv>e); 
 
 for(i=0;i<n;i++){ 
 printf("x = |%.3f|\n",x[i]); 
 } 
 printf("\niteracao = %d",cont); 
 
} 
} 
} 
 
 
_________________________________________________________________ 
 
//INTERPOLAÇÃO 
 
 
#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 
 
int menu(void); 
void lagrange(void); 
void newton(void); 
 
int retornaIndiceInicial(int numPtos,int grau,float pto,float *x,float *y); 
float retornaDiferencaDividida(int k, float pto,float *x,float *y ); 
 
main(){ 
 int opc,i,j; 
 
 
 do{ 
 opc = menu(); 
 switch(opc){ 
 case 1: 
 printf("\nFORMA DE LAGRANGE:\n\n"); 
 
 lagrange(); 
 
 break; 
 case 2: 
 printf("\nFORMA DE NEWTON:\n\n"); 
 
 newton(); 
 break; 
 
 
 case 3: 
 printf("Encerrando o programa.\n\n"); 
 break; 
 default: 
 printf("Opcao invalida.\n<Enter>" ); 
 fflush(stdin); 
 getchar(); 
 break; 
 } 
 }while(opc!=3); 
} 
 
int menu(void){ 
 int ret; 
 printf("\n\n\n"); 
 printf("INTERPOLACAO\n\n"); 
 printf("[1] - Lagrange\n"); 
 printf("[2] - Newton\n"); 
 printf("[3] - Sair\n"); 
 printf("\n\nEntre com a opcao: "); 
 fflush(stdin); 
 scanf("%d",&ret); 
 return ret; 
} 
 
float mod(float a){ 
 float x; 
 x= a*a; 
 x=sqrt(x); 
 return x; 
} 
 
 
 
void lagrange(void){ 
int n,i,j; 
float *x,*f,xbarra,P,Pn,d,t,h; 
printf("Entre com n: "); 
scanf("%d",&n); 
 
 if(x!=NULL) free(x); 
 
 x = (float*)malloc(n*sizeof(float)); 
 
 if(x==NULL) printf("Erro em alocacao (Definicoes).\n\n" ); 
 
 if(f!=NULL) free(f); 
 
 f = (float*)malloc(n*sizeof(float)); 
 
 if(f==NULL) printf("Erro em alocacao (Definicoes).\n\n" ); 
 
for(i=0;i<n;i++){ 
 
printf("Entre com x[%d]:",i+1 ); 
scanf("%f",&x[i]); 
 
} 
for(i=0;i<n;i++){ 
 
printf("Entre com f[%d]:",i+1 ); 
scanf("%f",&f[i]); 
 
} 
 
printf("Entre com xbarra: "); 
scanf("%f",&xbarra); 
 
Pn = 0; 
for(j=0;j<n;j++){ 
P=1; 
for(i=0;i<n;i++){ 
if(i!=j){ 
d=xbarra - x[i]; 
h = x[j]-x[i]; 
P = P*(d/h); 
} 
} 
t= P*f[j]; 
Pn = Pn + t; 
 
} 
printf("f(xbarra) = %.2f\n", Pn); 
 
 
 
} 
void newton(void){ 
int i,k,t,numPtos,teste,grau; 
float p,h,u,r,m,termo,pto,*x,*y; 
 
printf("Entre com o grau do polinomio: "); 
scanf("%d",&grau); 
printf("Entre com n: "); 
scanf("%d",&numPtos); 
 
 if(x!=NULL) free(x); 
 
 x = (float*)malloc(numPtos*sizeof(float)); 
 
 if(x==NULL) printf("Erro em alocacao (Definicoes).\n\n" ); 
 
 if(y!=NULL) free(y); 
 
 y = (float*)malloc(numPtos*sizeof(float)); 
 
 if(y==NULL) printf("Erro em alocacao (Definicoes).\n\n" ); 
 
for(i=0;i<numPtos;i++){ 
 
printf("Entre com x[%d]:",i+1 ); 
scanf("%f",&x[i]); 
 
} 
for(i=0;i<numPtos;i++){ 
 
printf("Entre com f[%d]:",i+1 ); 
scanf("%f",&y[i]); 
 
} 
 
printf("Entre com o ponto: "); 
scanf("%f",&pto); 
 
k = retornaIndiceInicial(numPtos,grau, pto, x, y ); 
termo = 1; 
p = y[k]; 
 
if(numPtos>=grau){ 
 teste = numPtos; 
}else{ 
 teste=k+1; 
} 
 
for(i=0;i<teste;i++){ 
/*t=k+i;*/ 
h=x[/*t-1*/i]; 
u=pto-h; 
termo = termo * u; 
} 
 
r= retornaDiferencaDividida( k, pto, x, y ); 
//printf("termo=%f e r=%f\n",termo,r); 
m=termo * r; 
p = p + m; 
//} 
printf("O valor do polinomio no ponto dado e: %.2f", p); 
 
} 
 
 
int retornaIndiceInicial(int numPtos,int grau,float pto,float *x,float *y){ 
int i; 
 
if(pto<=x[grau]){ 
 for(i=0;i<=grau;i++){ 
 if(pto<=x[i]){ 
 // printf("< grau pto=%f e x[%d]=%f e y[%d]=%f\n",pto,grau,x[grau],i+1,y[i]);return i; 
 } 
 } 
 } 
if(pto>x[grau]){ 
 for(i=grau;i<=numPtos;i++){ 
 if(pto<=x[i]){ 
 return i; 
 } 
 return 0; 
 } 
 } 
} 
 
 
float retornaDiferencaDividida(int k, float pto,float *x,float *y ){ 
 float d,d1,d2,d3,s,s1; 
 
if(k!=0){ 
d=x[k]-pto; 
d1=x[k]-x[k-1]; 
d2=pto-x[k-1]; 
d3=x[k]-x[k-1]; 
s=y[k-1]*(d/d1); 
s1=y[k]*(d2/d3); 
s=s+s1; 
return s; 
} 
return y[0]; 
 
} 
 
 
_________________________________________________________________ 
 
//INTEGRAL 
 
#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 
 
int menu(void); 
void trapezio(void); 
void simpson(void); 
 
 
main(){ 
 int opc,i,j; 
 
 
 do{ 
 opc = menu(); 
 switch(opc){ 
 case 1: 
 printf("\nREGRA DOS TRAPEZIOS:\n\n"); 
 
 trapezio(); 
 
 break; 
 case 2: 
 printf("\nREGRA 1/3 SIMPSON:\n\n"); 
 
 simpson(); 
 break; 
 
 
 case 3: 
 printf("Encerrando o programa.\n\n"); 
 break; 
 default: 
 printf("Opcao invalida.\n<Enter>" ); 
 fflush(stdin); 
 getchar(); 
 break; 
 } 
 }while(opc!=3); 
} 
 
int menu(void){ 
 int ret; 
 printf("\n\n\n"); 
 printf("INTEGRAL\n\n"); 
 printf("[1] - Trapezio\n"); 
 printf("[2] - Simpson\n"); 
 printf("[3] - Sair\n"); 
 printf("\n\nEntre com a opcao: "); 
 fflush(stdin); 
 scanf("%d",&ret); 
 return ret; 
} 
 
float mod(float a){ 
 float x; 
 x= a*a; 
 x=sqrt(x); 
 return x; 
} 
 
 
 
void trapezio(void){ 
/*Reais: h, x, soma, R; 
Inteiras: i, n.*/ 
float h,x0,soma,sf,d,R,x[2],*f; 
int i,n; 
 
printf("Entre com n:"); 
scanf("%d",&n); 
if(f!=NULL) free(f); 
 
 f = (float*)malloc(n*sizeof(float)); 
 
 if(f==NULL) printf("Erro em alocacao (Definicoes).\n\n" ); 
 
 
 
printf("Entre com x0:"); 
scanf("%f",&x[0]); 
printf("Entre com xn:"); 
scanf("%f",&x[1]); 
for(i=0;i<=n;i++){ 
printf("Entre com f(x%d):",i); 
scanf("%f",&f[i]); 
} 
 
if(n==0){ 
printf("Divisao por zero"); 
}else if(n<0){ 
printf("Intervalo Invalido"); 
}else{ 
h = x[1] - x[0]; 
h=h/n; 
x0 = x[0] + h; 
soma = f[0]+f[n]; 
for(i=1;i<n;i++){ 
soma = soma + (2*f[i]); 
x0 = x0 + h; 
} 
 
R = (h/2.0) * soma; 
printf("O resultado da integral da funcao f e : %f ", R); 
} 
 
} 
void simpson(void){ 
float h,x0,SomaPares,SomaImpares,soma,R,*f,x[2]; 
int i,n; 
 
printf("Entre com n:"); 
scanf("%d",&n); 
if(f!=NULL) free(f); 
 
 f = (float*)malloc(n*sizeof(float)); 
 
 if(f==NULL) printf("Erro em alocacao (Definicoes).\n\n" ); 
 
 
 
printf("Entre com x0:"); 
scanf("%f",&x[0]); 
printf("Entre com xn:"); 
scanf("%f",&x[1]); 
for(i=0;i<=n;i++){ 
printf("Entre com f(x%d):",i); 
scanf("%f",&f[i]); 
} 
 
if(n==0){ 
printf("Divisao por zero"); 
}else if(n<0){ 
printf("Intervalo Invalido"); 
}else{ 
h = x[1] - x[0]; 
h=h/n; 
x0 = x[0] + h; 
soma = f[0]+f[n]; 
SomaPares =0.0; 
SomaImpares=0.0; 
for(i=1;i<n;i++){ 
if(i%2==0){ 
SomaPares = SomaPares + (2*f[i]); 
}else{ 
 SomaImpares=SomaImpares+(4*f[i]); 
 } 
x0 = x0 + h; 
} 
soma = soma + SomaPares; 
soma= soma + SomaImpares; 
R = (h/3.0) * soma; 
printf("O resultado da integral da funcao f e : %f ",R); 
} 
 
} 
 
Desenvolvido por Fabrício Aguiar

Continue navegando