Ir ao conteúdo
  • Cadastre-se

C Séries infinitas (Calculo Numerico)


Posts recomendados

 

trabalho de calculo numerico.pdf estou tentando calcular a serie da questão 1, é pra dar aproximadamente 0.818731, fiz um programa porém não esta calculando direito, se alguém conseguir encontrar o erro.

#include<stdio.h>
#include<conio.h>
#include<math.h>
int main(void)
{
	int n = 0, fat = 1,i;
	float serie = 0;
	while(serie <= 0.818731)
	{
		n = n + 1;
		for(i = 1; i <= n ; i = i + 1)
		{
		fat = fat * i;
	    }
		serie = serie + (pow(-1,n)*pow(0.2,n))/fat;
		printf("\n%f", serie);
		getch();
	}
	return(0);
}

 

Link para o comentário
Compartilhar em outros sites

você está calculando o fatorial de forma errada. Além disso, acredito que esteja havendo estouro da variável. A convergência da séria é muito lenta, o que leva a muito passos e incremento muito rápido da variável fat. Tenta assim:

#include<stdio.h>
#include<conio.h>
#include<math.h>
int main(void)
{
	int n = 0, i;
	double fat = 1;
	double serie = 0;
	while(serie <= 0.818731)
	{
	    n = n + 1;
		fat=fat*n;
		serie = serie + (pow(-1,n)*pow(0.2,n))/fat;
		printf("\n%f %u", serie, fat);
		getch();
	
	}
	return(0);
}

 

Link para o comentário
Compartilhar em outros sites

A série do exercício é:

 

image.png.43504d2f01fc0253d8eb211f1b1b5faa.png

 

O seu erro principal foi calcular n! , observe que n! cresce muito rapidamente, e como o tipo int só armazena uma faixa limitada de números, em pouco tempo o valor de n! fica maior do que uma variável do tipo int pode armazenar.

 

Observe que a série divide pelo fatorial, logo solução que não estoura o a capacidade da variável deve calcular 1/n! pois isso fica cada vez menor, ao invés de crescer. Para calcular isso pode usar o fato de que 1/n! = 1/(n-1)! * 1/n para calcular o próximo valor.

 

Mas note que esta série também pode ser escrita como:

 

image.png.bd247fe4dc9eeb4cb263418d0110f68b.png

 

Onde fn(x) é o n-ésimo termo da série, e temos que:

image.png.acc2c84222c46db6f4a26c1b14e4390b.png

 

Assim basta saber o termo anterior da série para calcular o termo atual.

 

Edit: Corrigi para f0 = 1 .

Edit 2: Corrigi o expoente e incluí o (x) nas funções f.

 

 

Link para o comentário
Compartilhar em outros sites

33 minutos atrás, Flávio Pedroza disse:

você está calculando o fatorial de forma errada. Além disso, acredito que esteja havendo estouro da variável. A convergência da séria é muito lenta, o que leva a muito passos e incremento muito rápido da variável fat. Tenta assim:


#include<stdio.h>
#include<conio.h>
#include<math.h>
int main(void)
{
	int n = 0, i;
	double fat = 1;
	double serie = 0;
	while(serie <= 0.818731)
	{
	    n = n + 1;
		fat=fat*n;
		serie = serie + (pow(-1,n)*pow(0.2,n))/fat;
		printf("\n%f %u", serie, fat);
		getch();
	
	}
	return(0);
}

 

na hora que eu rodei o programa ainda continuou dando erro

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Jonathan Storari Ferreira disse:

na hora que eu rodei o programa ainda continuou dando erro

Na verdade, não acho que o programa vá funcionar do jeito que quer. Vai chegar um ponto em que o fatorial será tão grande que irá gerar erro de underflow.

Tem que alterar o algortimo como sugeriu @isrnick

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!