Je suis à la recherche d'un moyen python générique pour manipuler le texte en équations résolubles.Réorganiser les équations pour le solveur
Par exemple:
il peut y avoir quelques constantes pour initialiser
e1,e2=0.58,0.62
ma1,ma2=0.85,1.15
mw=0.8
Cpa,Cpw=1.023,4.193
dba,dbr=0.0,25.0
et un ensemble d'équations (écrit ici pour la lisibilité plutôt que le solveur)
Q=e1*ma1*Cpa*(tw1-dba)
Q=ma1*Cpa*(dbs-dba)
Q=mw*Cpw*(tw1-tw2)
Q=e2*ma2*Cpa*(dbr-tw2)
Q=ma2*Cpa*(dbr-dbo)
Cela laisse 5 inconnus, donc probablement le système peut être résolu.
Q, dbo, dbr, tw1, tw2
Les systèmes réels sont non linéaires et beaucoup plus compliqués.
J'ai déjà résolu cet exemple facile avec scipy, Delphi, Sage ... donc je ne cherche pas la partie de résolution. Les équations sont tapées directement dans un éditeur de texte et je veux qu'un programme Python me donne un tableau d'inconnues et un tableau de fonctions d'erreur.
y = mysolver.fsolve(f, x)
Ainsi, pour l'exemple ci-dessus
x=[Q,dbo,dbr,tw1,tw2]
f=[Q-e1*ma1*Cpa*(tw1-dba), Q-ma1*Cpa*(dbs-dba), Q-mw*Cpw*(tw1-tw2),
Q-e2*ma2*Cpa*(dbr-tw2), Q-ma2*Cpa*(dbr-dbo)]
Je ne sais pas comment extraire les inconnues et créer les fonctions d'erreur.
J'ai essayé la fonction compile.parse() et il semble donner une décomposition structurée. Quelqu'un peut-il donner quelques idées sur la meilleure approche?
Avez-vous besoin d'autoriser cette syntaxe "list"? (a, b = 1,2) Il pourrait être plus facile d'approcher si vous ne le faites pas ... – Stobor
Non, je l'ai juste fait pour rendre l'assignation constante plus compacte. Comment cela aiderait-il à attribuer des valeurs individuellement? –
Il y a longtemps, il y avait un programme Borland appelé Eureka qui résout ce problème. Le même code a été publié plus tard par l'auteur sous le nom de Mercure. De nombreuses années plus tard, un programme Windows appelé EES (Engineering Equation Solver) est sorti mais le solveur n'a jamais été aussi bon qu'Eureka. J'ai récemment trouvé du code en ligne par Clifford Wolf http://svn.clifford.at/tools/trunk/electrotools/eqsolver.html mais c'est en JavaScript et franchement je ne suis pas sa logique. C'est à peu près ce que je veux, mais en Python. –