1
resposta

Estudos - Laço While

Boa tarde pessoal, estava fazendo alguns exercicios de python e seguei nessa questão:

Crie um programa que pergunte "Digite x: ", em ponto flutuante, e calcule a função exponencial ex usando um laço while que implemente a série de Taylor a seguir. O programa deve calcular o valor com 4 casas decimais, ou seja, o laço deve parar quando o valor absoluto do termo, ou seja, da parcela da soma calculada na última iteração for menor que 0,0001. Ao final o programa deve imprimir "e elevado a {x} = {valor}".
A série é: ex = 1 + x + x2/2! + x3/3! +x4/4! + ...
O programa deve funcionar também para valores negativos de x. Dica: não use exponenciação nem uma função fatorial. Mantenha uma variável para o numerador e outra para o denominador, e calcule-as a cada iteração baseado no valor anterior.

E tem esse exemplo de input e output que é o desejado

Input                     Output
1                    Digite x: 1
                    e elevado a 1.0 = 2.71827876984127

2                    Digite x: -1
                    e elevado a -1.0 = 0.3678819444444445

Podem me ajudar? Não estou conseguindo resolver

1 resposta

Olá,

Existem várias formas de resolver, abaixo vou colocar uma das formas com comentários para ver se ajuda:

def taylor(x):
    num = x # num para numerador
    den = 1.0 # den para denominador, aqui escolhi usar 1.0 para que as divisões sempre fiquem em ponto flutuante e não em inteiro
    termo = 1 # esse é o termo da interação, eu uso como variável inicial para calcular o fatorial do denominador
    r = 1 + x # os dois primeiros termos da serie de tayler sempre serão 1 e o próprio x, então já começo carregando eles na variável r de resposta
    while abs(num/den) > 0.0001: # abs é uma função que retorna o valor absoluto (tira o sinal de - caso seja negativo), enquanto o próximo termo contribuir com mais de 0.001 ele continua no while calculando o próximo termo
        num = num*x # se num atual já começa com X, elevar para a próxima potencial é só multiplicar por X novamente (e atende o enunciado de manter a variável para o próximo loop)
        termo = termo + 1 # incremento o termo para saber qual o próximo multiplicador do fatorial
        den = den * termo # den é um fatorial, se eu multiplicar pelo próximo termo sempre atualizo meu fatorial
        r = r + num/den # agora é a parte fácil, apenas somo minha resposta atual com o novo termo dividindo num/den
    return r

x = int(input('Digite x: '))

Abs!