RÉSOUDRE UNE ÉQUATION DU TYPE f (x) = 0 MÉTHODE DES MOINDRES CARRÉS ET ABAQUES 1 Objectifs L objectif de ce tp est de se placer dans de le cas d équations n ayant pas de solution analytique mais dont on cherche à approcher la solution par une méthode numérique. On pourra utiliser les méthodes par dichotomie, par algorithmes de Newton ou de fausse position ou encore l outil de résolution fsolve de Python. Les cas présentés sont : recherche, par la méthode des moindres carrés, d un coefficient minimisant l écart entre un nuage de points et une courbe théorique construction d un abaque Il est possible d importer toutes les fonctions créées dans le Tp précédent (SIM-NUM-1 Tp-1), pour les utiliser dans ce Tp. Q - 1 : Enregistrer toutes les fonctions du Tp précédent dans un fichier nommé Messolveurs.py. Sinon, prendre le fichier présent sur le site. Pour faire appel aux fonctions, placer en tête du nouveau programme la ligne import Messolveurs as Ms (pour Mes Solveurs). 2 Méthode des moindres carrés 2.1 Présentation de la méthode On donne : une fonction f du temps t et d un paramètre a : R 2 R f : t, a f (t, a). un ensemble de n points, ou couples (t i, f i ) n Le but est de trouver la valeur du paramètre a qui minimise la somme des distances au carré ( f (t i, a) f i ) 2 qu on appelle D(a) : n [ ] D(a) = f (ti, a) f 2 i Il s agit donc de trouver, dans un premier temps, pour quelle(s) valeur(s) de a, D(a) s annule. Or : D (a) = n Il s agit donc de résoudre : g(a) = 1 2 D (a) = 2. f (t i, a) n f (t i, a) [ f (ti, a) f i ] ( f (t i, a) f i ) = 0 Dans un second temps il convient d étudier les solutions pour déterminer celles qui minimisent D. 2.2 Contextualisation On se place dans le cas d un circuit RC alimenté par une tension u(t). On mesure la tension aux bornes du condensateur. On considère connue la valeur de la résistance R. On cherche alors à déterminer la capacité C du condensateur à partir de la réponse à un échelon de tension U 0 de 10 V. L équation différentielle reliant u(t) à s(t) est : LYCÉE CARNOT (DIJON) 1/5 INFO EN MPSI & PCSI - TP 2 - SIM-NUM-1
u(t) = R.C. ds (t) + s(t) (1) dt La solution théorique du problème vérifiant les conditions d Heaviside est alors : ( s(t) = U 0. 1 e R.C t ) On fixe U 0 = 10 V et R = 10 Ω (2) u(t) i(t) > R C s(t) Pour simplifier le problème, on construit la fonction CircuitRC(t, a) = 10. ( 1 e a.t) avec a = 1 R.C. 2.3 Programmation Q - 2 : A partir du fichier "pts-exp-rc.txt" fourni en document annexe et contenant les n valeurs expérimentales, tracer la courbe expérimentale. Les valeurs en abscisses seront rangées dans une liste T et les valeurs en ordonnées dans une liste U. ## Chargement des points expérimentaux issus d'une sollicitation d'un cirtuit RC T, U =np.loadtxt('pts-exp-rc.txt', unpack = True) ## Présentation de la courbe expérimentale plt.figure(1) plt.title("points expérimentaux") plt.xlabel('temps',color='b') plt.ylabel('tension', color='b') plt.plot(t,u,'m') plt.show(block=false) On donne une fonction CircuitRC(t,a) qui renvoie CircuitRC(t, a) en fonction de t et de a ainsi qu une fonction CircuitRC(t, a) CircuitRCda(t,a) qui renvoie en fonction de t et de a. On cherche maintenant à mettre en forme la fonction g en fonction des listes de points T et Val et de la fonction f. Q - 3 : Ecrire une fonction DerivSDK (dérivée de la somme des carrés) ayant pour arguments : une fonction f de deux variables f (x, a) sa dérivée par rapport à a, notée fpa un paramètre a deux listes X et Y de n points (correspondants aux x i et f (x i, a) bruités.) et renvoyant g(a). def DerivSDK(f,fda,a,X,Y): REMARQUE: prévoir un arrêt si les listes X et Y n ont pas la même taille. Il s agit maintenant de trouver le paramètre a qui, pour une fonction f donnée, des listes X et Y données, minimise DerivS DK. LYCÉE CARNOT (DIJON) 2/5 INFO EN MPSI & PCSI - TP 2 - SIM-NUM-1
On utilisera dans un premier temps la fonction fsolve (du module scipy.optimize) pour déterminer a. Cependant, il faut savoir un peu où se trouve le minimum de DerivS DK en fonction de a. En se plaçant dans le cas de la recherche par moindres carrés du paramètre a qui minimise D(a) pour la fonction CircuitRC(t, a) avec les points T et U, nous savons que a < 0 et c est tout pour le moment. On propose donc de tracer DerivSDK(CircuitRC,CircuitRCda,a,T,Val) en fonction de a, pour a variant entre a min et a max. On prendra a min = 60 et a max = 40. amin,amax=-60,-40 Va=np.linspace(amin,amax,100) Da=[DerivSDK(CircuitRC,CircuitRCda,x,T,U) for x in Va] plt.figure(2) plt.plot(va,da) plt.grid() plt.show(block=false) On constate que la fonction s annule pour deux valeurs sur l intervalle [a min, a max ]: en 0, ce qui n est pas très intéressant et ailleurs, aux alentours de -50. C est cette valeur qui nous intéresse. Il est possible de l obtenir a en transformant la fonction DerivSDK à 5 arguments en une fonction à 1 seul argument, grâce à la fonction lambda de python et on trouve alors la valeur de la capacité du condensateur : a_sol=scop.newton(lambda x:derivsdk(circuitrc,circuitrcda,x,t,val),-60) Q - 4 : Tracer alors CircuitRC pour les valeurs de T et pour a = a sol. Superposer les points et admirer. La fonction DerivSDK est générale et peut s adapter un autre problème d identification par moindres carrés. Q - 5 : A partir de la fonction lambda de Python, de la fonction DerivSDK construite précédemment et de la fonction fsolve, écrire une fonction moindres carrés MdK qui renvoie la valeur de a minimisant la somme des carrés de la différence f (X[i], a) Y[i] et ayant pour argument : f, une fonction de deux variables x et a fda, la fonction dérivée de f par rapport à a X, une liste de valeurs de x Y, une liste de valeurs de f (x, a) bruitées a0, un premier candidat def MdK(f,fda,X,Y,a0): Q - 6 : Adapter la fonction MdK pour utiliser votre programme de résolution d équation par la méthode de la fausse position. On sollicite maintenant un système régi par la fonction f (x) = 2. 2.a x + a 2.x avec x [0, 1]. Les points expérimentaux sont stockées dans le fichier pts-puissance.txt. Q - 7 : Déterminer la ou les valeurs de a permettant d ajuster au mieux la courbe théorique aux points expérimentaux. REMARQUE: la plus plupart du temps les problèmes peuvent se ramener à des problèmes linéaires vis-à-vis des paramètres. La méthode du pivot de Gauss permet alors d obtenir ces paramètres sans avoir recours à une méthode de résolution d un problème de type f (x) = 0. C est ce que nous verrons dans le dernier TP. LYCÉE CARNOT (DIJON) 3/5 INFO EN MPSI & PCSI - TP 2 - SIM-NUM-1
3 Abaque du temps de réponse à 5% 3.1 Réponses temporelles d un système du 2nd ordre On considère le circuit RLC série suivant. D après la loi des mailles : u(t) = R.i(t) + s(t) + L. di (t) avec i(t) = C.ds dt dt (t) d où u(t) = s(t) + R.C. ds dt (t) + s L.C.d2 (t) (3) 2 dt L = s(t) + 2.ξ. ds ω 0 dt (t) + 1 ω 2. d2 s (t) (4) 2 0 dt Dans le cas d une entrée constante u(t) = 1 avec comme conditions initiales s(0) = s (0) = 0, la solution s(t) de l équation (4) peut se mettre sous la forme générale suivante : si ξ>1 s(t) = 1 + e ω 0.t.(ξ+ ξ2 1).(ξ ξ 2 1) e ω 0.t.(ξ ξ 2 1).(ξ + si ξ=1 s(t) = 1 (1 + ω 0.t).e ω 0.t si ξ<1 s(t) = 1 e ξ.ω 0.t sin 1 ξ 2 ω 0. 1 ξ 2.t + arctan u(t) 1 ξ 2 ξ i(t) > ξ 2 1) Dans les 3 cas, lim t s(t) = 1. Comme la fonction s est continue t R + et que s(0) = 0 alors : t 5% R + / t t 5%, 0, 95 s(t) 1, 05 avec ω 0 = 1 L.C et ξ = R 2. CL On appelle t 5% le temps de réponse à 5% du système. On cherche ici à déterminer X = ω.t 5% pour tout ξ R +. R C s(t) 3.2 Cas où ξ 1 Comme s crée une bijection de R + dans [0, 1] pour tout ξ [1, [, le problème, pour ces valeurs de ξ devient alors à trouver X tel que : si ξ>1 0 = 0, 05 + e X.(ξ+ ξ2 1).(ξ ξ 2 1) e X.(ξ ξ 2 1).(ξ + ξ 2 1) = F 1 (X) si ξ=1 0 = 0, 05 (1 + X).e X = F 2 (X) avec : F 1 (X) = e X.(ξ+ ξ 2 1) e X.(ξ ξ 2 1) F 2 (X) = X.e X LYCÉE CARNOT (DIJON) 4/5 INFO EN MPSI & PCSI - TP 2 - SIM-NUM-1
Q - 8 : Mettre en place un algorithme de Newton pour résoudre F 1 (X) = 0, ξ ]1, [ et pour ξ = 1, résoudre F 2 (X) = 0. 3.3 Cas où 0 < ξ < 1 Dans le cas où ξ ]0, 1[, la fonction s n est pas monotone sur R +. En revanche, elle admet des extremums locaux tous les t k tels que : k.π ω 0.t k = et s(t k ) = 1 ( 1) 1 k k. ξ.π 1 ξ 2.e 1 ξ 2 avec k N. Notons que k =. ln ( s(t k ) 1 ) ξ 2 ξ.π Q - 9 : Puisque s(t k ) 1 est une suite décroissante, déterminer k 0, la plus petite valeur de k telle que 0, 95 < s(t k ) < 1, 05. Proposer alors un algorithme permettant de fournir un premier candidat x 0 à la méthode de Newton pour les cas ξ ]0, 1[, ξ = 1 et ξ > 1. si ξ>1 x 0 = 1 ξ 1 ξ 2 si ξ=1 x 0 =4, 75 si ξ<1 x 0 = π. 2.k 0 1 1 ξ 2 2 La fonction s étant monotone sur ]t k0 1, t k0 [, il va donc être possible d y rechercher la solution du problème par une méthode de Newton. On distingue alors 2 cas: k 0 est pair s(t 5% ) =1, 05 k 0 est impair s(t 5% ) =0, 95 Q - 10 : Programmer alors une fonction F(X, k 0 ) telle F(ω 0.t 5%, k 0 ) = 0. 3.4 Construction de l abaque ξ R + Q - 11 : Construire un programme permettant de calculer ω 0.t 5% pour une répartition linéaire ou logarithmique de n valeurs de ξ ]10 p, 10 p [ avec p N. Commencer avec p = 1 Q - 12 : Tracer alors ω 0.t 5% en fonction de ξ ]10 p, 10 p [ avec p N sur des échelles logarithmiques ou linéaires. 3.5 Estimation de L Q - 13 : A partir du fichier de points fourni en annexe, charger les valeurs expérimentales de la réponse du circuit RLC à une tension unitaire. Q - 14 : Déterminer la taille du premier dépassement s(t 1 ) 1. En déduire ξ. Proposer alors une valeur pour L. Q - 15 : A l aide de tris, proposer un programme capable de déterminer le temps de réponse à 5% à partir des points expérimentaux. Q - 16 : A partir de la valeur de ξ trouvée précédemment et des valeurs obtenues pour l abaque ω 0.t 5% en fonction de ξ, déterminer ω 0. Q - 17 : Identifier à nouveau L. Les deux valeurs vous semble-t-elles compatibles? LYCÉE CARNOT (DIJON) 5/5 INFO EN MPSI & PCSI - TP 2 - SIM-NUM-1