Résolution système d'équations en Python3
Bonjour,
Je cherche à construire un modèle numérique d'un système de refroidissement hydraulique. J'obtiens deux équations (d'une part le bilan des débits volumique en un nœud et d'autre part le bilan des pertes de charges sur une maille) pour deux inconnues (Q1 et Q2), qui sont les deux débits volumiques dans les deux branches de mon circuit qui construisent la maille du système.
J'obtiens donc le système suivant :
Eq1 : Q1 + Q2 = Qentree
Eq2 : C1*Q1^2 + C2*Q1^(1.75) = C3*Q2^2 + C4*Q2^(1.75)
C1 à 4, sont des constantes géométriques (dimensions des conduites notamment). Qentree est connu.
J'ai tenté d'utiliser plusieurs outils de résolution différents en Python (fsolve, sym.solve etc...), mais aucun ne converge, au contraire j'obtiens dans tous les cas des messages d'erreur (par exemple :
J'en viens donc à penser que j'ai également un problème de fond dans mon système d'équations, d'ordre "mathématique" plutôt que numérique.
Auriez-vous des suggestions ?
Je vous remercie par avance.
Bien cordialement.
Nicolas.
Je cherche à construire un modèle numérique d'un système de refroidissement hydraulique. J'obtiens deux équations (d'une part le bilan des débits volumique en un nœud et d'autre part le bilan des pertes de charges sur une maille) pour deux inconnues (Q1 et Q2), qui sont les deux débits volumiques dans les deux branches de mon circuit qui construisent la maille du système.
J'obtiens donc le système suivant :
Eq1 : Q1 + Q2 = Qentree
Eq2 : C1*Q1^2 + C2*Q1^(1.75) = C3*Q2^2 + C4*Q2^(1.75)
C1 à 4, sont des constantes géométriques (dimensions des conduites notamment). Qentree est connu.
J'ai tenté d'utiliser plusieurs outils de résolution différents en Python (fsolve, sym.solve etc...), mais aucun ne converge, au contraire j'obtiens dans tous les cas des messages d'erreur (par exemple :
"RuntimeWarning: The iteration is not making good progress, as measured by the improvement from the last ten iterations."
ou tout simplement "NotImplementedError: could not solve".
J'en viens donc à penser que j'ai également un problème de fond dans mon système d'équations, d'ordre "mathématique" plutôt que numérique.
Auriez-vous des suggestions ?
Je vous remercie par avance.
Bien cordialement.
Nicolas.
Réponses
-
Bonjour,
Je viens d'essayer ton système avec fsolve et je n'ai pas de souci (la réponse est instantanée).
Peux-tu copier ici ton script pour voir où est le problème ? -
Bonjour Philippe,
Merci pour votre retour rapide. Voici mon code.
[Pour afficher du code python, IL FAUT utiliser le bouton "Code" (5ème par la droite au dessus de la fenêtre d'édition. AD]import numpy as np from scipy.optimize import fsolve # Non-linear system solving ================================================== def myFunction(z): x = z[0] # x => QBA y = z[1] # y => QSL F = np.empty((2)) F[0] = x + y - Qin F[1] = CX2*x**2+CX175*x**1.75-CY2*y**2-CY175*y**1.75 return F Qin = 0.0002 CX2 = 106770282.58780318 CX175 = 8979022.107152052 CY2 = 316500534.8148744 CY175 = 7839661.47294004 zIni = [1,1] z = fsolve(myFunction,zIni) print(z)
Le message d'erreur associé étant le suivant :testSystemSolve.py:23: RuntimeWarning: invalid value encountered in double_scalars F[1] = CX2*x**2+CX175*x**1.75-CY2*y**2-CY175*y**1.75
Encore merci.
Bien cordialement.
Nicolas. -
Bonjour,
Si tu plaçais ton code entre deux balises "Code" (clique sur la cinquième icone à partir de la fin), tu aurais ton code correctement indenté.
Cordialement,
Rescassol -
Bonjour Rescassol
Merci pour votre conseil, c'est effectivement beaucoup mieux ainsi.
Nicolas -
En changeant zini, cela suffit. Mais on peut aussi augmenter le nombre d'appel (maxfev).
from scipy.optimize import fsolve # Non-linear system solving ================================================== def myFunction(z): x = z[0] # x => QBA y = z[1] # y => QSL return [x + y - Qin, CX2*x**2+CX175*x**1.75-CY2*y**2-CY175*y**1.75] Qin = 0.0002 CX2 = 106770282.58780318 CX175 = 8979022.107152052 CY2 = 316500534.8148744 CY175 = 7839661.47294004 zIni = [b][0.0001,0.0001][/b] z = fsolve(myFunction,zIni,[b]maxfev=1000[/b]) print(z)
Sortie : [1.17961301e-04 8.20386994e-05]
maxfev : The maximum number of calls to the function. -
Ok, j'avais essayé avec des constantes plus petites, c'est pour cela que je n'avais pas a priori de problème quant à la résolution approchée du système.
-
Julien,
Merci beaucoup pour votre retour, j'obtiens maintenant également le même résultat !
Ce que j'en déduis donc, c'est que la résolution du système avec fsolve est très tributaire du choix des valeurs d'initialisation (ce qui en soit me paraît maintenant assez naturel!).
Merci à tous pour votre aide.
Bien cordialement
Nicolas
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 163.1K Toutes les catégories
- 7 Collège/Lycée
- 21.9K Algèbre
- 37.1K Analyse
- 6.2K Arithmétique
- 52 Catégories et structures
- 1K Combinatoire et Graphes
- 11 Sciences des données
- 5K Concours et Examens
- 11 CultureMath
- 47 Enseignement à distance
- 2.9K Fondements et Logique
- 10.3K Géométrie
- 62 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 68 Informatique théorique
- 3.8K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 24 Mathématiques et finance
- 312 Mathématiques et Physique
- 4.9K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10K Probabilités, théorie de la mesure
- 772 Shtam
- 4.2K Statistiques
- 3.7K Topologie
- 1.4K Vie du Forum et de ses membres
In this Discussion
Qui est en ligne 2
2 Invités