Buscar

Implementação de Aproximação de Integrais Numéricas de uma Função em Linguagem C

Prévia do material em texto

P á g i n a 1 | 8 
 
Departamento de Matemática 
Disciplina: Cálculo Numérico 
Professor: Ismael R. F. Lins 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Implementação de Aproximação de Integrais Numéricas de uma 
Função em Linguagem C 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Aluno: ____________________________ 
Matrícula: _________________________ 
 
 P á g i n a 2 | 8 
 
 
#include<stdio.h> 
#include<math.h> 
 
int main(){ 
 
 system("Color 4F"); 
 int i=0, j; 
 float I=0, h, n, x, f[1000]; 
 
 printf("\nEste programa calcula a aproximacao de pi pelo metodo da Regra dos 
Trapezios.\n\n"); 
 printf("Informe um numero(n) de divisoes do intervalo: "); 
 scanf("%f",&n); 
 while(n>1000 || n<=0){ 
 printf("\nEste programa esta limitado a dividir o intervalo em no maximo \n1000 
subintervalos e o numero informado tambem nao pode ser negativo.\n\nInforme outro 
numero:"); 
 scanf("%f",&n); 
 } 
 
 h=(2/n); 
 x=-1; 
 f[i]=2*(sqrt((1-(pow(x,2))))); 
 i=1; 
 x=x+h; 
 while(x<=1){ 
 f[i]=2*(sqrt((1-(pow(x,2))))); 
 x=x+h; 
 i++; 
 } 
 for(j=1;j<n;j++){ 
 I=I+((h/2)*2*f[j]); 
 
 } 
 
 printf("\nValor aproximado de pi: %f\n",I); 
 
return(0); 
} 
 
 
 P á g i n a 3 | 8 
 
 
 
#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 
#include <conio.h> 
 
int main(){ 
 
 system("Color 4F"); 
 int Opcao2; 
 float a, b; 
 
 printf("\nEste programa calcula aproximacoes de integrais numericas da seguinte 
funcao:\n\n"); 
 printf("\t1)ln(x)\n\n"); 
 printf("Informe o intervalo de integracao [a,b].\n\n\ta: "); 
 scanf("%f",&a); 
 
 while(a<=0){ 
 printf("Erro! A funcao nao esta definida para zero ou numero negativo.\nInforme 
um novo valor para a: "); 
 scanf("%f",&a); 
 } 
 
 printf("\tb: "); 
 scanf("%f",&b); 
 
 while(b<=0){ 
 printf("Erro! A funcao nao esta definida para zero ou numero negativo.\nInforme 
um novo valor para b: "); 
 scanf("%f",&b); 
 } 
 
 printf("\n\t1)Regra do Ponto Medio\n\t2)Regra dos Trapezios\n\t3)Regra de Simpson 
(aqui o numero de divisoes do intervalo e sempre par)\n\t4)Quadratura Gaussiana (aqui, o 
numero maximo do grau(n) do polinomio de Legendre e 6)"); 
 printf("\n\nEscolha o metodo para calcular a aproximacao da integral de ln(x) no 
intervalo [%.2f,%.2f]: ",a,b); 
 scanf("%d",&Opcao2); 
 while(Opcao2 != 1 && Opcao2 != 2 && Opcao2 != 3 && Opcao2 != 4){ 
 printf("\nOpcao invalida! Informe o numero de uma das opcoes validas acima: "); 
 
 P á g i n a 4 | 8 
 
 scanf("%d",&Opcao2); 
 } 
 
 if(Opcao2==1){ 
 
 int i=0, j=1; 
 float I=0, h, n, x=0, f[1000]; 
 
 system("cls"); 
 printf("\nIntegral de ln(x) pela Regra do Ponto Medio.\n\n"); 
 printf("\t>Informe um numero(n) de divisoes do intervalo [%.2f,%.2f]: ",a,b); 
 scanf("%f",&n); 
 
 int Inter=n; 
 float inter=n-Inter; 
 while(inter!=0){ 
 printf("\nErro! O n informado nao e inteiro.\nInforme um outro n: "); 
 scanf("%f",&n); 
 Inter=n; 
 inter=n-Inter; 
 } 
 while(n>1000 || n<=0){ 
 printf("\nEste programa esta limitado a dividir o intervalo em no maximo 
\n1000 subintervalos e o numero informado tambem nao pode ser negativo.\n\nInforme outro 
numero:"); 
 scanf("%f",&n); 
 } 
 
 h=(b-a)/n; 
 x=(a+((j-1)*h)+(a+(j*h)))/2; 
 while(x<b){ 
 
 f[i]=log(x); 
 i++; 
 j++; 
 x=(a+((j-1)*h)+(a+(j*h)))/2; 
 
 } 
 
 for(j=0;j<=i-1;j++){ 
 I=I+f[j]; 
 } 
 
 I=I*h; 
 printf("\n\t>Valor aproximado da integral de ln(x) no Intervalo [%.2f,%.2f]: 
%f\n",a,b,I); 
 
 return(0); 
 } 
 
 
 P á g i n a 5 | 8 
 
 
 if(Opcao2==2){ 
 
 int i=0, j; 
 float I=0, h, n, x, f[1000]; 
 
 system("cls"); 
 printf("\nIntegral de ln(x) pela Regra dos Trapezios.\n\n"); 
 printf("\t>Informe um numero(n) de divisoes do intervalo [%.2f,%.2f]: ",a,b); 
 scanf("%f",&n); 
 
 int Inter=n; 
 float inter=n-Inter; 
 while(inter!=0){ 
 printf("\nErro! O n informado nao e inteiro.\nInforme um outro n: "); 
 scanf("%f",&n); 
 Inter=n; 
 inter=n-Inter; 
 } 
 while(n>1000 || n<=0){ 
 printf("\nEste programa esta limitado a dividir o intervalo em no maximo 
\n1000 subintervalos e o numero informado tambem nao pode ser negativo.\n\nInforme outro 
numero:"); 
 scanf("%f",&n); 
 } 
 
 h=(b-a)/n; 
 x=a; 
 f[i]=log(x); 
 i=1; 
 x=x+h; 
 while(x<=b){ 
 f[i]=log(x); 
 x=x+h; 
 i++; 
 } 
 for(j=1;j<n;j++){ 
 I=I+((h/2)*(2*f[j])); 
 
 } 
 I=I+((h/2)*(f[0]+f[i-1])); 
 printf("\n\t>Valor aproximado da integral de ln(x) no Intervalo [%.2f,%.2f]: 
%f\n",a,b,I); 
 
 return(0); 
 } 
 if(Opcao2==3){ 
 
 int i=0, j; 
 float I=0, h, n, x, f[1000]; 
 
 P á g i n a 6 | 8 
 
 
 system("cls"); 
 printf("\nIntegral de ln(x) pela Regra de Simpson.\n\n"); 
 printf("\t>Informe um numero(n) par de divisoes do intervalo [%.2f,%.2f]: ",a,b); 
 scanf("%f",&n); 
 
 int Inter=n; 
 float inter=n-Inter; 
 while(inter!=0){ 
 printf("\nErro! O n informado nao e inteiro.\nInforme um outro n: "); 
 scanf("%f",&n); 
 Inter=n; 
 inter=n-Inter; 
 } 
 
 int aux=n; 
 int par=aux%2; 
 while(par!=0){ 
 printf("\nErro! O n informado nao e par.\nInforme um outro n: "); 
 scanf("%f",&n); 
 aux=n; 
 par=aux%2; 
 } 
 
 while(n>1000 || n<=0){ 
 printf("\nEste programa esta limitado a dividir o intervalo em no maximo 
\n1000 subintervalos e o numero informado tambem nao pode ser negativo.\n\nInforme outro 
numero:"); 
 scanf("%f",&n); 
 } 
 
 h=(b-a)/n; 
 x=a; 
 f[i]=log(x); 
 i=1; 
 x=x+h; 
 while(x<=b){ 
 f[i]=log(x); 
 x=x+h; 
 i++; 
 } 
 
 for(j=1;j<=n-1;j=j+2){ 
 I=I+((h/3)*(4*f[j])); 
 
 } 
 
 for(j=2;j<=n-2;j=j+2){ 
 I=I+((h/3)*(2*f[j])); 
 
 
 P á g i n a 7 | 8 
 
 } 
 
 I=I+((h/3)*(log(a)+log(b))); 
 printf("\n\t>Valor aproximado da integral de ln(x) no Intervalo [%.2f,%.2f]: 
%f\n",a,b,I); 
 return(0); 
 } 
 
 if(Opcao2==4){ 
 
 int i, j, n; 
 float I=0, t[10][10], x, f[1000], c[10][10]; 
 
c[1][2]=1.0000000000; c[2][2]=1.0000000000; c[1][3]=0.5555555555; c[2][3]=0.8888888888; 
c[3][3]=0.5555555555; c[1][4]=0.3478548451; c[2][4]=0.6521451548; c[3][4]=0.6521451548; 
c[4][4]=0.3478548451; c[1][5]=0.2369268850; c[2][5]=0.4786286704; c[3][5]=0.5688888888; 
c[4][5]=0.4786286704; c[5][5]=0.2369268850; c[1][6]=0.1713244923; c[2][6]=0.3607615730; 
c[3][6]=0.4679139345; c[4][6]=0.4679139345; c[5][6]=0.3607615730; c[6][6]=0.1713244923; 
 
t[1][2]=-0.5773502691; t[2][2]=0.5773502691; t[1][3]=-0.7745966692; t[2][3]=0.0000000000; 
t[3][3]=0.7745966692; t[1][4]=-0.8611363115; t[2][4]=-0.339981043; t[3][4]=0.3399810435; 
t[4][4]=0.8611363115; t[1][5]=-0.9061798459; t[2][5]=-0.5384693101; t[3][5]=0.0000000000; 
t[4][5]=0.5384693101; t[5][5]=0.9061798459; t[1][6]=-0.9324695142; t[2][6]=-0.6612093864; 
t[3][6]=-0.2386191860;t[4][6]=0.2386191860; t[5][6]=0.6612093864; t[6][6]=0.9324695142; 
 
 system("cls"); 
 printf("\nIntegral de ln(x) pela Quadratura Gaussiana.\n\n"); 
 printf("\t>Informe um numero(n) do grau do polinomio de Legendre: "); 
 scanf("%d",&n); 
 while(n>6 || n<=1){ 
 printf("\nEste programa esta limitado a n no maximo igual\na 6 e no 
minimo n igual a 2.\n\nInforme outro numero:"); 
 scanf("%d",&n); 
 } 
 
 i=1; 
 x=(((b-a)*t[i][n])+b+a)/2; 
 while(i<=n){ 
 f[i]=log(x)*((b-a)/2)*c[i][n]; 
 i++; 
 x=(((b-a)*t[i][n])+b+a)/2; 
 } 
 
 for(j=1;j<=i-1;j++){ 
 I=I+f[j]; 
 } 
 
 printf("\n\t>Valor aproximado da integral de ln(x) no Intervalo [%.2f,%.2f]: 
%f\n",a,b,I); 
 
 
 P á g i n a 8 | 8 
 
 return(0); 
 } 
 
}

Continue navegando