Baixe o app para aproveitar ainda mais
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); } }
Compartilhar