Ir ao conteúdo

Posts recomendados

Postado

 

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);
}

 

Postado

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);
}

 

Postado

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.

 

 

Postado
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

Postado

@MB_  note que para calcular fn(x) deve multiplica o termo anterior f(n-1)(x) por (-1) invertendo seu sinal, assim a cada novo termo o sinal é invertido (positivo, negativo, positivo, negativo, etc).

Postado
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

 

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!