web-dev-qa-db-fra.com

Comment tracer une fonction définie avec def?

J'ai une fonction

np.sin(x / 2.) * np.exp(x / 4.) + 6. * np.exp(-x / 4.)

et je peux le tracer en utilisant le code suivant:

x = np.arange(-5, 15, 2)
y = np.sin(x / 2.) * np.exp(x / 4.) + 6. * np.exp(-x / 4.)
plt.plot(x, y)
plt.show()

mais si je définis le traçage de fonction ne fonctionne pas:

rr = np.arange(-5, 15, 2)

def y(o): 
    return np.sin(o / 2.) * np.exp(o / 4.) + 6. * np.exp(-o / 4.)

def h(b):
    return int(y(b))

plt.plot(rr, h)
plt.show()

Pourquoi cela se produit-il et comment puis-je changer le code pour tracer la fonction?

7
Akmal Salikhov

Essayez ceci à la place:

import numpy as np
import matplotlib.pyplot as plt

rr = np.arange(-5, 15, 2)

def y(o): 
    return np.sin(o / 2.) * np.exp(o / 4.) + 6. * np.exp(-o / 4.)

plt.plot(rr, y(rr).astype(np.int))
plt.show()
6
Hun

La réponse de Hun est valable.

Cependant, si vous utilisez très précisément deux définitions de fonction, essayez ceci:

def y(o): 
    return np.sin(o / 2.) * np.exp(o / 4.) + 6. * np.exp(-o / 4.)
def h(b):
    l = []
    for i in b:
        l.append(int(y(i)))
    return l
rr = np.arange(-5, 15, 2)
plt.plot(rr, h(rr))
plt.show()

Pour répondre aux raisons pour lesquelles votre code n'a pas fonctionné, lorsque vous avez appelé la fonction 'h', vous n'avez transmis aucun paramètre, d'où le renvoi de la définition de la fonction ou du pointeur d'emplacement de mémoire de la fonction. Même si vous aviez passé rr à h, h n'a pas été manipulé pour le convertir en un itérable.

2
pmaniyan