Solution symbolique d'un système de 7 équations non linéaires


9

J'ai un système d'équations différentielles ordinaires - 7 équations et ~ 30 paramètres régissant leur comportement dans le cadre d'un modèle mathématique de transmission de maladies. Je voudrais trouver les états stables pour les équations Modification dx/dt = rest of the equationà 0 = equationchacun des équations en fait un problème d'algèbre simple. Cela pourrait être fait à la main, mais je suis ridiculement mauvais dans ce genre de calcul.

J'ai essayé d'utiliser Mathematica, qui peut gérer des versions plus petites de ce problème ( voir ici ), mais Mathematica s'immobilise sur ce problème. Existe-t-il un moyen plus efficace / efficace d'aborder cela? Un système mathématique symbolique plus efficace? D'autres suggestions?

Quelques mises à jour (21 mars):

  • Le but est en effet de les résoudre symboliquement - les réponses numériques sont agréables mais pour le moment le but final est la version symbolique.
  • Il y a au moins un équilibre. Je ne me suis pas vraiment assis et je l'ai prouvé , mais par conception, il devrait y en avoir au moins un trivial dans lequel aucun n'est infecté au début. Il n'y a peut-être rien d' autre que cela, mais cela me rendrait aussi content que toute autre chose.
  • Vous trouverez ci-dessous l'ensemble réel des équations dont il est question.

entrez la description de l'image ici

En résumé, je recherche des expressions symboliques pour les solutions d'un système de 7 équations quadratiques à 7 variables.


Pouvez-vous écrire les équations? La résolution d'un grand système non contraint d'équations non linéaires est souvent effectuée numériquement en utilisant la méthode de Newton ou l'une de ses variantes. Le choix ici dépendra de la quantité d'informations dont vous disposez sur le système d'équations d'origine - le plus important, le jacobien du système d'équations est-il disponible, calculable ou facilement approximable?
Aron Ahmadia

ahh! Je vois que vos équations sont détaillées sur le site Mathematica. Ça vous dérange de les amener ici? (Ce n'est pas une publication croisée, en particulier si nous allons vous proposer des solutions numériques au-delà de ce que Mathematica peut faire).
Aron Ahmadia

Je vais apporter les équations de Mathematica plus tard dans la journée - après les 5 heures de route, je dois m'éloigner.
Fomite

1
N'est-ce pas . Il semble que ce soit le cas d'après les équations ci-dessus. Suis-je en train de manquer quelque chose? dUsdt=dHdt
ja72

1
@GeoffOxberry: donc lorsque les dérivées sont égales à zéro, les deux équations # 1 et # 2 sont identiques et une peut être omise.
ja72

Réponses:


13

Il semble que les équations que vous traitez soient toutes polynomiales après avoir effacé les dénominateurs. C'est une bonne chose (les fonctions transcendantales sont souvent un peu plus difficiles à gérer algébriquement). Cependant, ce n'est pas une garantie que vos équations ont une solution de forme fermée. C'est un point essentiel que beaucoup de gens ne "comprennent" pas vraiment, même s'ils le savent en théorie, donc il faut le redire: il existe des systèmes assez simples d'équations polynomiales pour lesquels il n'y a aucun moyen de donner des solutions en termes de ( ème) racines, etc. Un exemple célèbre (dans une variable) est x 5 - x + 1 = 0 . Voir aussi cette page wikipedia .nx5x+1=0

Cela dit, bien sûr, il existe également des systèmes d'équations qui peuvent être résolus, et il vaut la peine de vérifier si votre système en fait partie. Et même si votre système ne peut pas être résolu, il pourrait toujours être possible de trouver une forme pour votre système d'équations qui soit plus simple, dans un certain sens. Par exemple, trouvez une équation n'impliquant que la première variable (même si elle ne peut pas être résolue algébriquement), puis une deuxième équation n'impliquant que la première et la seconde variable, etc. des systèmes polynomiaux; la plus connue est la théorie de base de Groebner, et une théorie concurrente est la théorie des chaînes régulières.

Dans le système d'algèbre informatique Maple (divulgation complète: je travaille pour eux), les deux sont implémentés. La solvecommande appelle généralement la méthode de base Groebner, je crois, et qui s'arrête rapidement sur mon ordinateur portable. J'ai essayé d'exécuter le calcul des chaînes régulières et cela prend plus de temps que je n'ai de patience, mais ne semble pas exploser en termes de mémoire. Si vous êtes intéressé, la page d'aide de la commande que j'ai utilisée est ici , et voici le code que j'ai utilisé:

restart;
sys, vars := {theta*H - rho_p*sigma_p*
       Cp*(Us/N) - rho_d*sigma_d*D*(Us/N)*rho_a*sigma_a*
       Ca*(Us/N) = 0, 
         rho_p*sigma_p*Cp*(Us/N) + rho_d*sigma_d*
       D*(Us/N)*rho_a*sigma_a*Ca*(Us/N) + theta*H = 0, 
         (1/omega)*Ua - alpha*Up - rho_p*psi_p*
       Up*(H/N) - Mu_p*sigma_p*Up*(Cp/N) - 
             Mu_a*sigma_a*Up*(Ca/N) - Theta_p*
       Up + Nu_up*(Theta_*M + Zeta_*D) = 0, 
         alpha*Up - (1/omega)*Ua - rho_a*psi_a*
       Ua*(H/N) - Mu_p*sigma_p*Ua*(Cp/N) - 
             Mu_a*sigma_a*Ua*(Ca/N) - Theta_a*
       Ua + Nu_ua*(Theta_*M + Zeta_*D) = 0, 
         (1/omega)*Ca + Gamma_*Phi_*D + rho_p*psi_p*
       Up*(H/N) + Mu_p*sigma_p*Up*(Cp/N) + 
             Mu_a*sigma_a*Up*(Ca/N) - alpha*Cp - Kappa_*
       Cp - Theta_p*Cp + Nu_cp*(Theta_*M + Zeta_*D) = 0, 
         alpha*Cp + Gamma_*(1 - Phi_)*D + rho_a*psi_a*
       Ua*(H/N) + Mu_p*sigma_p*Ua*(Cp/N) + 
             Mu_a*sigma_a*Ua*(Ca/N) - (1/omega)*
       Ca - Kappa_*Tau_*Ca - Theta_a*Ca + 
             Nu_ca*(Theta_*M + Zeta_*D) = 
     0, Kappa_*Cp + Kappa_*Tau_*Ca - Gamma_*Phi_*
       D - Gamma_*(1 - Phi_)*D - 
             Zeta_*D + Nu_d*(Theta_*M + Zeta_*D) = 0, 
    Us + H + Up + Ua + Cp + Ca + D = 0, 
         Up + Ua + Cp + Ca + D = 0}, {Us, H, Up, Ua, Cp, Ca, D, N, 
    M}:

sys := subs(D = DD, sys):
vars := subs(D = DD, vars):
params := indets(sys, name) minus vars:
ineqs := [theta > 0 , rho_p > 0 , sigma_p > 
       0 , rho_d > 0 , sigma_d > 0 , 
            rho_a > 0 , sigma_a > 0 , 
      omega > 0 , alpha > 0 , psi_p > 0 , Mu_p > 0 , 
            Mu_a > 0 , Theta_p > 0 , Nu_up > 0 , Theta_ > 
       0 , Zeta_ > 0 , psi_a > 0 , 
            Theta_a > 0 , Nu_ua > 0 , Gamma_ > 0 , Phi_ > 
       0 , Kappa_ > 0 , Nu_cp > 0 , 
            Tau_ > 0 , Nu_ca > 0]:
with(RegularChains):
R := PolynomialRing([vars[], params[]]):
sys2 := map(numer, map(lhs - rhs, normal([sys[]]))):
sol := LazyRealTriangularize(sys2,[],map(rhs, ineqs),[],R);

7

La manière professionnelle consiste à écrire vos équations dans un langage de modélisation tel que AMPL ou GAMS, et à le résoudre avec un solveur tel que IPOPT.

AMPL est un système commercial, mais une version étudiante gratuite d'AMPL est capable de poser des problèmes avec jusqu'à 300 équations et variables.

Si vous souhaitez simplement résoudre un ou quelques problèmes, vous pouvez le résoudre en ligne librement en utilisant le serveur NEOS pour l'optimisation - soumettez simplement la description AMPL et attendez que la réponse vous soit retournée.

Si vous devez résoudre de tels systèmes à plusieurs reprises dans le cadre d'une étude plus vaste (par exemple, faire varier les paramètres), vous devez télécharger IPOPT (qui est un logiciel sous une licence très libérale).

Edit: Notez que les solutions symboliques compréhensibles sont généralement limitées à des problèmes assez petits - généralement la taille d'une base Groebner croît de manière explosive avec le nombre de variables ou le degré des polynômes, et le temps de traitement encore plus. Ainsi, un temps d'attente d'une heure ou plus avec Mathematica est un signe (mais pas une preuve) que votre solution symbolique serait complètement incompréhensible. De plus, l'évaluation d'une expression aussi longue est susceptible d'être numériquement instable, vous aurez donc besoin d'une grande précision dans l'évaluation pour obtenir des résultats significatifs.


6

Il est impossible d'écrire toute la solution dans des limites raisonnables. Mais voici quelques équations pour réduire un peu le système:

USUS

US=HNθ(γ+ζ)CAKA+Cp+KD
KA=γρAσA+κρDσDτ+ρAσAζKD=γρpσp+κρDσD+ρpσpζ

D

D=κ(CAτ+Cp)γ+ζ.

CACP

UAUPUAUP

UAUPHCACPD

HCACPCACP

Bonne chance!


USDUAUPUSHCACP

HCACPCACP

Oui. @GeoffOxberry, je pense que vous devriez simplement ajouter vos commentaires directement à la réponse de ja72.
David Ketcheson

@DavidKetcheson: Terminé; Je ne m'inquiète pas de le wikifier, car le représentant n'est pas important. Je ne suis pas encore retourné et n'ai pas encore rempli les manipulations symboliques.
Geoff Oxberry

3

Cela dépend de la structure de vos équations.

Si vous recherchez tous les états stables de votre ensemble d'équations et que vous pouvez les réorganiser comme le dit ErikP en polynômes, vous pouvez utiliser des méthodes de la géométrie algébrique réelle pour calculer toutes les solutions numériques avec une grande précision. Bertini est un tel paquet que je connaisse, mais il y en a d'autres. Je suis allé à une conférence à Notre Dame il y a quelques années où Bertini a été utilisé pour trouver des états stables d'OD à partir de la cinétique chimique; Bertini a été développé à Notre Dame.

Une autre possibilité consiste à utiliser les méthodes proposées dans "Test d'exclusion non lisse pour trouver toutes les solutions d'équations non linéaires" par MD Stuber, V. Kumar et PI Barton, BIT Numerical Mathematics 50 (4), 885-917, DOI: DOI: 10.1007 / s10543-010-0280-6 ; ces méthodes ne nécessitent pas que le système d'équations soit des polynômes. Paul Barton est mon conseiller et Matt Stuber est un de mes collègues; si vous le souhaitez, je peux lui demander le logiciel et vous l'envoyer. L'article utilise des méthodes d'optimisation globale et d'arithmétique d'intervalle (il cite le livre d'ArnoldNeumaier), ainsi que la méthode de Newton. L'avantage de cette méthode est qu'elle doit localiser toutes les solutions; l'inconvénient est que c'est compliqué.

F(x)=0

minxSF(x),

où est un ensemble réalisable défini par des contraintes sur votre problème au lieu d'essayer de le résoudre. À un niveau très grossier, l'utilisation d'un solveur de programmation non linéaire fluide ressemble beaucoup à l'utilisation de la méthode de Newton, avec une sophistication algorithmique supplémentaire pour la robustesse et les performances. IPOPT est un très bon logiciel à cet effet; il existe de nombreux autres solveurs (regardez simplement la liste des solveurs disponibles pour GAMS , AMPL ou NEOS . Si vous choisissez une méthode comme celle-ci, faites attention à quelques mises en garde:S

  • Il ne localisera au plus qu'une solution à la fois. Pour trouver des solutions supplémentaires, vous devez ajouter des contraintes qui excluent toutes les solutions précédentes que vous avez trouvées.
  • Si votre problème d'optimisation n'est pas convexe, pour utiliser IPOPT ou des solveurs similaires, vous aurez besoin soit d'une bonne estimation initiale, proche d'une solution de vos équations (même principe de base que la méthode de Newton), soit d'un solveur d'optimisation non convexe comme BARON , Couenne , Bonmin , etc. Vous devriez essayer tous les solveurs sur lesquels vous mettez la main, car les performances de chaque solveur de programmation non linéaire non convexe dépendent du problème.

1

Je suggérerais de regarder une méthode d'homotopie. Bien qu'il ne soit pas symbolique, il produira toutes les solutions à votre problème. Pour une bibliothèque facile à consulter:

http://homepages.math.uic.edu/~jan/PHCpack/phcpack.html


Oui! Les méthodes de continuation de l'homotopie sont exponentiellement dures (vous devrez considérer conditions de `` démarrage '' initiales), mais pour un problème aussi petit, il sera calculable, et vous pouvez garantir l'optimalité globale du problème de minimisation. 2n
Aron Ahmadia

Dr. Ahmadia, vous n'avez évidemment pas suivi la littérature sur les méthodes d'homotopie. Veuillez lire les publications de Jan et réviser ce numéro.
aterrel
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.