La formule suivante est utilisée pour classer les points d'un espace à deux dimensions:
f(x1,x2) = np.sign(x1^2+x2^2-.6)
Tous les points sont dans l'espace X = [-1,1] x [-1,1]
avec une probabilité uniforme de choisir chaque x.
Maintenant, je voudrais visualiser le cercle égal à:
0 = x1^2+x2^2-.6
Les valeurs de x1 doivent être sur l'axe des x et les valeurs de x2 sur l'axe des y.
Cela doit être possible mais j'ai du mal à transformer l'équation en un complot.
Vous pouvez utiliser un tracé de contour, comme suit (basé sur les exemples à http://matplotlib.org/examples/pylab_examples/contour_demo.html ):
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1.0, 1.0, 100)
y = np.linspace(-1.0, 1.0, 100)
X, Y = np.meshgrid(x,y)
F = X**2 + Y**2 - 0.6
plt.contour(X,Y,F,[0])
plt.show()
Cela donne le graphique suivant
Enfin, quelques déclarations générales:
x^2
Ne signifie pas ce que vous pensez qu'il fait en python, vous devez utiliser x**2
.x1
Et x2
Sont terriblement trompeurs (pour moi), surtout si vous déclarez que x2
Doit être sur l'axe des y.plt.gca().set_aspect('equal')
pour donner à la figure un aspect réellement circulaire, en rendant l'axe égal.La solution de @BasJansen vous y mène certainement, elle est soit très inefficace (si vous utilisez plusieurs points de grille) soit inexacte (si vous n'utilisez que peu de points de grille).
Vous pouvez facilement dessiner le cercle directement. Étant donné 0 = x1**2 + x**2 - 0.6
, Il s'ensuit que x2 = sqrt(0.6 - x1**2)
(comme l'a dit Dux).
Mais ce que vous voulez vraiment faire, c'est transformer vos coordonnées cartésiennes en coordonnées polaires.
x1 = r*cos(theta)
x2 = r*sin(theta)
si vous utilisez ces sous-positions dans l'équation circulaire, vous verrez que r=sqrt(0.6)
.
Alors maintenant, vous pouvez l'utiliser pour votre intrigue:
import numpy as np
import matplotlib.pyplot as plt
# theta goes from 0 to 2pi
theta = np.linspace(0, 2*np.pi, 100)
# the radius of the circle
r = np.sqrt(0.6)
# compute x1 and x2
x1 = r*np.cos(theta)
x2 = r*np.sin(theta)
# create the figure
fig, ax = plt.subplots(1)
ax.plot(x1, x2)
ax.set_aspect(1)
plt.show()
Résultat:
Que diriez-vous de dessiner des valeurs x et de calculer les valeurs y correspondantes?
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1, 1, 100, endpoint=True)
y = np.sqrt(-x**2. + 0.6)
plt.plot(x, y)
plt.plot(x, -y)
produit
Cela peut évidemment être rendu beaucoup plus agréable, mais ce n'est que pour la démonstration ...