﻿import numpy as np
import matplotlib.pyplot as plt
from math import *

# saisir les coefficients de la fonction à étudier: Pj=f(I)
a = float(input("Saisir le coefficient a du polynôme Pj = aI²+bI+c:"))
b = float(input("Saisir le coefficient b du polynôme Pj = aI²+bI+c:"))
c = float(input("Saisir le coefficient c du polynôme Pj = aI²+bI+c:"))

# définition de la fonction
def f(I):
    return a*I**2+b*I+c

# saisir l'intervalle de recherche du minimum de Pj
print("Recherche du minimum de la fonction Pj = f(I) par balayage sur l’intervalle [Imin;Imax]")
print("Pj = ",a,"I² +",b,"I +",c)
Imin = float(input("Saisir Imin en ampère (A):"))
Imax = float(input("Saisir Imax en ampère (A):"))
print("Imin = ",Imin,"A")
print("Imax = ",Imax,"A")

# saisir le pas du balayage
h = float(input("Saisir le pas du balayage sous la forme d'un nombre décimal: h = "))
print("h = ",h)

# Rechercher le minimum
IMinimum = Imin # antécédent du minimum
I = Imin # antécédent "en cours"
maximum = f(Imin) # maximum de f sur [Imin;Imax]
minimum = maximum # minimum de f sur [Imin;Imax]

limite=Imax
while I < limite:
    I = I+h
    Pj = f(I)
    if Pj<minimum:
        minimum = Pj
        IMinimum = I

# Résultats de la minimisation
print("La puissance minimale dissipée est Pj = ", minimum,"W")
print ("Elle correspond à une intensité I = " ,IMinimum,"A")

# Tracer le graphique
I=np.linspace(0,Imin,100)
J=np.linspace(Imin,Imax,100)
K=np.linspace(Imax,Imax+10,100)
plt.plot(I,f(I),color='blue')
plt.plot(J,f(J),color='green',label='Pj=f(I) sur [Imin,Imax]')
plt.plot(K,f(K),color='blue')
plt.plot(IMinimum,minimum,color='red',marker='D',markersize ='6')
plt.plot(Imin,f(Imin),color='blue',marker='o',markersize ='3')
plt.plot(Imax,f(Imax),color='blue',marker='o',markersize ='3')
plt.legend()
plt.xlabel("Intensité I (A)")
plt.ylabel("Puissance Joule Pj (W)")
plt.grid()
plt.title("Minimisation de l'effet Joule")
plt.show()

