Soluzione simbolica di un sistema di 7 equazioni non lineari


9

Ho un sistema di equazioni differenziali ordinarie - 7 equazioni e ~ 30 parametri che regolano il loro comportamento come parte di un modello matematico di trasmissione della malattia. Mi piacerebbe piace per trovare gli stati stabili per quelle equazioni Cambiare dx/dt = rest of the equationper 0 = equationper ciascuna delle equazioni lo rende un problema di algebra lineare. Questo potrebbe essere fatto a mano, ma sono ridicolmente cattivo con quel tipo di calcolo.

Ho provato ad usare Mathematica, che può gestire versioni più piccole di questo problema ( vedi qui ), ma Mathematica si sta fermando su questo problema. Esiste un modo più efficiente / efficace per affrontarlo? Un sistema matematico simbolico più efficiente? Altri suggerimenti?

Alcuni aggiornamenti (21 marzo):

  • L'obiettivo è in effetti risolverli simbolicamente: le risposte numeriche sono buone, ma per il momento l'obiettivo finale è la versione simbolica.
  • C'è almeno un equilibrio. In realtà non mi sono seduto e ho dimostrato questo, ma in base alla progettazione dovrebbe averne almeno uno banale in cui nessuno è infetto all'inizio. Potrebbe non esserci altro oltre a quello, ma questo mi renderebbe contento come qualsiasi altra cosa.
  • Di seguito è riportato il set effettivo di equazioni di cui si parla.

inserisci qui la descrizione dell'immagine

In sintesi, sto cercando espressioni simboliche per le soluzioni di un sistema di 7 equazioni quadratiche in 7 variabili.


Puoi scrivere le equazioni? La risoluzione di un grande sistema non vincolato di equazioni non lineari viene spesso eseguita numericamente utilizzando il metodo di Newton o una delle sue varianti. La scelta qui dipenderà da quante informazioni hai sul sistema originale di equazioni - soprattutto, il giacobino del sistema di equazioni è disponibile, calcolabile o facilmente approssimabile?
Aron Ahmadia,

Ahh! Vedo che le tue equazioni sono dettagliate nel sito di Mathematica. Ti dispiace portarli qui? (Questo non è il cross-posting, in particolare se stiamo per suggerire soluzioni numeriche per te oltre lo scopo di ciò che Mathematica può fare).
Aron Ahmadia,

Riporterò le equazioni da Mathematica più tardi oggi - dopo 5 ore di macchina devo togliermi di mezzo.
Fomite,

1
dUsdt=dHdt

1
@GeoffOxberry: quindi quando i derivati ​​sono equiparati a zero, entrambe le equazioni n. 1 e n. 2 sono identiche e si può utilizzare.
Ja72,

Risposte:


13

nx5x+1=0

Detto questo, ovviamente ci sono anche sistemi di equazioni che possono essere risolti, e vale la pena controllare se il tuo sistema è uno di quelli. E anche se il tuo sistema non può essere risolto, potrebbe essere ancora possibile trovare una forma per il tuo sistema di equazioni che sia più semplice, in un certo senso. Ad esempio, trova un'equazione che coinvolge solo la prima variabile (anche se non può essere risolta algebricamente), quindi una seconda equazione che coinvolge solo la prima e la seconda variabile, ecc. Esistono alcune teorie in competizione su come trovare tali "forme normali" di sistemi polinomiali; la più nota è la teoria delle basi di Groebner e una teoria concorrente è la teoria delle catene regolari.

Nel sistema di algebra del computer Maple (divulgazione completa: io lavoro per loro) sono implementati entrambi. Il solvecomando in genere chiama il metodo di base Groebner, credo, e questo si interrompe rapidamente sul mio laptop. Ho provato a eseguire il normale calcolo delle catene e impiega più tempo di quanto ho pazienza, ma non sembra esplodere come malamente memoria. Nel caso tu sia interessato, la pagina di aiuto per il comando che ho usato è qui , ed ecco il codice che ho usato:

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

Il modo professionale è scrivere le tue equazioni in un linguaggio di modellazione come AMPL o GAMS e risolverle con un risolutore come IPOPT.

AMPL è un sistema commerciale, ma una versione gratuita per studenti di AMPL è in grado di porre problemi con un massimo di 300 equazioni e variabili.

Se vuoi solo risolvere uno o alcuni problemi, puoi risolverlo online gratuitamente usando il server NEOS per l'ottimizzazione - invia semplicemente la descrizione AMPL e attendi che la risposta ti venga restituita.

Se è necessario risolvere ripetutamente tali sistemi come parte di uno studio più ampio (ad esempio, variando i parametri), è necessario scaricare IPOPT (che è un software con una licenza molto liberale).

Modifica: si noti che le soluzioni simboliche comprensibili sono generalmente limitate a problemi piuttosto piccoli: in genere la dimensione di una base di Groebner aumenta in modo esplosivo con il numero di variabili o il grado dei polinomi e il tempo di elaborazione ancora di più. Quindi un tempo di attesa di un'ora o più con Mathematica è un segno (anche se non una prova) che la tua soluzione simbolica sarebbe completamente incomprensibile. Inoltre, è probabile che la valutazione di un'espressione così lunga sia numericamente instabile, quindi per ottenere risultati significativi occorrerebbe un'elevata precisione nella valutazione.


6

Scrivere l'intera soluzione è impossibile entro limiti ragionevoli. Ma ecco alcune equazioni per ridurre un po 'il sistema:

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

In bocca al lupo!


USDUAUPUSHCACP

HCACPCACP

Va bene. @GeoffOxberry, penso che dovresti semplicemente aggiungere i tuoi commenti direttamente alla risposta di Ja72.
David Ketcheson,

@DavidKetcheson: Fatto; Non mi preoccupo di cercarlo, perché il rappresentante non è importante. Non sono ancora tornato indietro e ho compilato le manipolazioni simboliche.
Geoff Oxberry,

3

Dipende dalla struttura delle tue equazioni.

Se stai cercando tutti gli stati stazionari del tuo set di equazioni e puoi riorganizzarli come dice ErikP in polinomi, puoi utilizzare i metodi dalla vera geometria algebrica per calcolare tutte le soluzioni numeriche ad alta precisione. Bertini è uno di questi pacchetti che conosco, ma ce ne sono altri. Sono andato a una conferenza a Notre Dame qualche anno fa in cui Bertini era abituato a trovare stati stabili di ODE dalla cinetica chimica; Bertini è stato sviluppato a Notre Dame.

Un'altra possibilità è quella di utilizzare i metodi proposti nel "Test di esclusione non uniforme per trovare tutte le soluzioni di equazioni non lineari" di MD Stuber, V. Kumar e PI Barton, BIT Numerical Mathematics 50 (4), 885-917, DOI: DOI: 10.1007 / s10543-010-0280-6 ; questi metodi non richiedono che il sistema di equazioni sia polinomiale. Paul Barton è il mio consulente e Matt Stuber è un mio collega; se vuoi, posso chiedergli il software e inviarlo a te. L'articolo utilizza metodi di ottimizzazione globale e aritmetica degli intervalli (cita il libro di Arnold Neumaier), nonché il metodo di Newton. Il vantaggio di questo metodo è che dovrebbe individuare tutte le soluzioni; lo svantaggio è che è complicato.

F(x)=0

minxSF(x),

dove è un insieme fattibile definito da vincoli sul problema anziché cercare di risolverlo. A un livello molto grezzo, l'utilizzo di un solutore di programmazione non lineare regolare è molto simile all'utilizzo del metodo di Newton, con un'ulteriore sofisticazione algoritmica per robustezza e prestazioni. IPOPT è un software davvero valido per questo scopo; ci sono una serie di altri solutori là fuori (basta guardare l'elenco dei solutori disponibili per GAMS , AMPL o NEOS . Se scegli un metodo come questo, fai attenzione ad alcuni avvertimenti:S

  • Individuerà al massimo una soluzione alla volta. Per trovare soluzioni aggiuntive, devi aggiungere vincoli che escludano tutte le soluzioni precedenti che hai trovato.
  • Se il tuo problema di ottimizzazione non è convesso, per usare IPOPT o solutori simili, avrai bisogno di una buona ipotesi iniziale, vicina a una soluzione delle tue equazioni (stesso principio di base del metodo di Newton) o di un risolutore di ottimizzazione non convesso come BARON , Couenne , Bonmin , ecc. Dovresti provare tutti i solutori su cui metti le mani, poiché le prestazioni di ciascun solutore di programmazione non lineare non convesso dipendono dal problema.

1

Suggerirei di guardare un metodo di omotopia. Sebbene non sia simbolico, produrrà tutte le soluzioni del tuo problema. Per una facile libreria da verificare:

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


Sì! I metodi di continuazione dell'omotopia sono esponenzialmente difficili (dovrai considerare iniziali di "avvio"), ma per un problema così piccolo sarà trattabile dal punto di vista computazionale e puoi garantire l'ottimalità globale del problema di minimizzazione. 2n
Aron Ahmadia,

Dr. Ahmadia, ovviamente, non hai tenuto il passo con la letteratura sui metodi di omotopia. Leggi le pubblicazioni di Jan e rivedi questo numero.
aterrel
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.