Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Aplicação no método "__call__" na função exponencial trigonométrica

+1 voto
25 visitas
perguntada Out 1 em Ciência da Computação por Matheus Cintrão (16 pontos)  

Este problema é apresentado no problema 7.11 do capítulo 7 do livro ”A Primer on Scientific Programming"

Neste exercício é proposto que seja feita um implementação alternativa de uma classe para a função:
\[ f(x;a,w)=e^{-ax} sin(wx)\]

de tal forma que o seguinte código funcione:

 f = F2(1.0, 0.1)
 print f(pi)
 f.a = 2
 print f(pi)
 print f

Está é uma proposta de implementação alternativa do código proposto em outro exercício do livro, problema 7.1, segue link da resolução deste problema:
http://prorum.com/?qa=6189/uma-classe-para-uma-funcao-exponencial-trigonometrica

Compartilhe

1 Resposta

0 votos
respondida Out 1 por Matheus Cintrão (16 pontos)  
editado Out 1 por Matheus Cintrão

O código requisitado exige que a classe F2 calcule a equação sem o uso da função "value". Para isso podemos utilizar o método "call", que é descrito pelo autor como um método especial e é apresentado no capítulo 7.3.1. A vantagem desta implementação é permitie que a "f" se pareça com uma função comum, permitindo a sua utilização na forma "f(x)" e dispensando o uso de "f.value(x)" na hora de calcular a equação para a variável "x".

from math import *

class F2:

    def __init__(self,a,w):

        self.a, self.w = a, w


    def __call__(self,x):

        return(math.exp(-self.a*x) * math.sin(self.w*x))


if __name__ == '__main__':

   pi=math.pi

   f = F2(1.0, 0.1)
   print (f(pi))
   f.a = 2.0
   print (f(pi))

O resultado obtido é:

 0.01335383513703555
 0.0005770715401197441
...