import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate, stats, optimize
# Paramètres de distribution (à remplacer par vos moyennes et écarts-types)
mean_stress = 0.2
std_dev_stress = 0.019
mean_strength = 0.2
std_dev_strength = 0.009
# Étendre la plage des valeurs pour la distribution de stress
z_values = np.linspace(mean_stress - 4 * std_dev_stress, mean_strength + 4 * std_dev_strength + 0.11, 200)
# Étendre la plage des valeurs pour la distribution de résistance
z_values_strength = np.linspace(mean_strength - 4 * std_dev_strength, mean_strength + 4 * std_dev_strength + 0.11, 200)
# Définir la fonction de densité de probabilité pour la contrainte (stress)
def pdf_stress(z):
return stats.norm.pdf(z, loc=mean_stress, scale=std_dev_stress)
# Définir la fonction de densité de probabilité pour la résistance (strength)
def pdf_strength(z):
return stats.norm.pdf(z, loc=mean_strength, scale=std_dev_strength)
# Définir la fonction qui donne l'écart entre les deux fonctions
def intersection_function(z, x_value):
return pdf_stress(z) - pdf_strength(z - x_value)
# Trouver les points d'intersection (ignorer ceux à y=0)
def find_intersection_points(x_value):
intersection_points = optimize.fsolve(intersection_function, x0=mean_stress, args=(x_value,))
return [point for point in intersection_points if abs(intersection_function(point, x_value)) > 1e-5]
# Calculer l'unreliability et le PPM à chaque point d'intersection
def calculate_unreliability_and_ppm(intersection_points):
unreliabilities = []
ppms = []
for point in intersection_points:
# Calculer l'unreliability à chaque point d'intersection
unreliability, _ = integrate.quad(lambda z: pdf_stress(z) * pdf_strength(z - point), -np.inf, np.inf)
unreliabilities.append(unreliability)
# Calculer le PPM à chaque point d'intersection
ppm_value = unreliability * 1e6
ppms.append(ppm_value)
# Calculer la somme totale de l'unreliability et du PPM
total_unreliability = sum(unreliabilities)
total_ppm = sum(ppms)
return unreliabilities, ppms, total_unreliability, total_ppm
# Trouver les points d'intersection pour la première valeur de x comme exemple
x_value = 0.2 # Vous pouvez ajuster cette valeur
intersection_points = find_intersection_points(x_value)
# Calculer l'unreliability, le PPM à chaque point d'intersection et leur somme totale
unreliabilities, ppms, total_unreliability, total_ppm = calculate_unreliability_and_ppm(intersection_points)
# Afficher les résultats
plt.figure(figsize=(12, 8))
plt.subplot(2, 1, 1)
plt.plot(z_values, pdf_stress(z_values), label='PDF Stress')
plt.plot(z_values_strength, pdf_strength(z_values_strength), label='PDF Strength', color='green') # Utilisez la moyenne de la résistance comme exemple
plt.scatter(intersection_points, [0] * len(intersection_points), color='red', marker='x', label='Intersection Points')
plt.axhline(0, color='black', linestyle='-', linewidth=0.5) # Ligne de base pour la visibilité
plt.title('Distributions de Contrainte et de Résistance')
plt.legend()
plt.subplot(2, 1, 2)
plt.plot(z_values, stats.norm.cdf(z_values, loc=mean_stress, scale=std_dev_stress), label='CDF Stress')
plt.plot(z_values_strength, stats.norm.cdf(z_values_strength, loc=mean_strength, scale=std_dev_strength), label='CDF Strength')
plt.title('Fonctions de Répartition Cumulative (CDF)')
plt.legend()
plt.tight_layout()
plt.show()
# Afficher les résultats de l'unreliability, du PPM à chaque point d'intersection et leur somme totale
print("Unreliabilities at each intersection point:", unreliabilities)
print("PPMs at each intersection point:", ppms)
print("Total Unreliability:", total_unreliability)
print("Total PPM:", total_ppm)
To embed this project on your website, copy the following code and paste it into your website's HTML: