import numpy as np
import matplotlib.pyplot as plt

# --- 1. Paramètres ---
K_c = 2.0  # On fixe un seuil critique arbitraire pour le tracé
K = np.linspace(0, 10, 500)  # On crée 500 points pour K allant de 0 à 10

# --- 2. Calcul du paramètre d'ordre r ---
r = np.zeros_like(K)  # r vaut 0 partout par défaut

# On applique la formule uniquement pour les valeurs où K > K_c
mask = K > K_c 
r[mask] = np.sqrt(1 - K_c / K[mask])

# --- 3. Tracé du graphique ---
plt.figure(figsize=(8, 5))

# Tracé de la courbe théorique
plt.plot(K, r, 'b-', linewidth=3, label=r'Théorie : $r = \sqrt{1 - \frac{K_c}{K}}$')

# Ligne pointillée rouge pour marquer le seuil critique
plt.axvline(x=K_c, color='red', linestyle='--', linewidth=2, label=f'Seuil critique $K_c$')

# --- 4. Décoration du graphique (Style académique) ---
plt.title('Transition de phase : Bifurcation supercritique', fontsize=14, fontweight='bold')
plt.xlabel('Intensité du couplage $K$', fontsize=12)
plt.ylabel("Paramètre d'ordre $r$", fontsize=12)

plt.xlim(0, max(K))
plt.ylim(0, 1.1) # r ne peut pas dépasser 1
plt.grid(True, linestyle=':', alpha=0.7)
plt.legend(fontsize=12, loc='lower right')

# --- 5. Sauvegarde de l'image pour LaTeX ---
plt.tight_layout()
plt.savefig('bifurcation_theorique.png', dpi=300) # dpi=300 pour une haute qualité d'impression
print("L'image 'bifurcation_theorique.png' a été générée avec succès !")

plt.show()
