Solução simbólica de um sistema de 7 equações não lineares


9

Eu tenho um sistema de equações diferenciais ordinárias - 7 equações e ~ 30 parâmetros que governam seu comportamento como parte de um modelo matemático de transmissão de doenças. Eu gostaria de encontrar os estados estacionários para essas equações Alterar dx/dt = rest of the equationa 0 = equationpara cada uma das equações torna um problema de álgebra simples. Isso pode ser feito manualmente, mas sou ridiculamente ruim nesse tipo de computação.

Eu tentei usar o Mathematica, que pode lidar com versões menores desse problema ( veja aqui ), mas o Mathematica está paralisando esse problema. Existe uma maneira mais eficiente / eficaz de abordar isso? Um sistema matemático simbólico mais eficiente? Outras sugestões?

Algumas atualizações (21 de março):

  • O objetivo é realmente resolvê-los simbolicamente - as respostas numéricas são boas, mas, no momento, o objetivo final é a versão simbólica.
  • Existe pelo menos um equilíbrio. Na verdade, não me sentei e provei isso, mas, por design, ele deveria ter pelo menos um trivial em que nenhum esteja infectado no início. Pode não haver nada além disso, mas isso me faria tão contente quanto qualquer outra coisa.
  • Abaixo está o conjunto real de equações em discussão.

insira a descrição da imagem aqui

Em resumo, estou procurando expressões simbólicas para as soluções de um sistema de 7 equações quadráticas em 7 variáveis.


Você pode escrever as equações? A resolução de um grande sistema irrestrito de equações não lineares é frequentemente feita numericamente, usando o método de Newton ou uma de suas variantes. A escolha aqui dependerá de quanta informação você tiver sobre o sistema original de equações - o mais importante é o jacobiano do sistema de equações disponível, computável ou facilmente aproximado?
Aron Ahmadia 20/03/12

ahh! Vejo que suas equações são detalhadas no site Mathematica. Você se importa de trazê-los aqui? (Isso não é postagem cruzada, principalmente se sugerimos soluções numéricas para você além do escopo do que o Mathematica pode fazer).
Aron Ahmadia

Trarei as equações do Mathematica hoje mais tarde - após as 5 horas de carro que tenho que sair do caminho.
Fomite 20/03/12

11
Não é . Parece ser assim das equações acima. Estou esquecendo de algo? dvocêsdt=-dHdt
ja72

11
@ GeoffOxberry: portanto, quando os derivativos são iguais a zero, as equações 1 e 2 são idênticas e uma pode ser omitida.
ja72

Respostas:


13

Parece que as equações com as quais você está lidando são todas polinomiais depois de limpar os denominadores. Isso é bom (as funções transcendentais costumam ser um pouco mais difíceis de lidar algebricamente). No entanto, não é uma garantia de que suas equações tenham uma solução fechada. Este é um ponto essencial que muitas pessoas realmente "não entendem", mesmo que o conheçam em teoria, e vale a pena reafirmar: existem sistemas bastante simples de equações polinomiais para os quais não há como dar as soluções em termos de ( °) raízes, etc. Um exemplo famoso (em uma variável) é x 5 - x + 1 = 0 . Veja também esta página da Wikipedia .nx5-x+1 1=0 0

Dito isto, é claro que também existem sistemas de equações que podem ser resolvidos, e vale a pena verificar se o seu sistema é um deles. E mesmo que seu sistema não possa ser resolvido, ainda será possível encontrar uma forma para o seu sistema de equações que seja mais simples, em algum sentido. Por exemplo, encontre uma equação envolvendo apenas a primeira variável (mesmo que não possa ser resolvida algebricamente) e, em seguida, uma segunda equação envolvendo apenas a primeira e a segunda variável, etc. Existem algumas teorias concorrentes sobre como encontrar essas "formas normais" de sistemas polinomiais; a mais conhecida é a teoria das bases de Groebner, e a mais concorrente é a teoria das cadeias regulares.

No sistema de álgebra computacional Maple (divulgação completa: trabalho para eles), ambos são implementados. O solvecomando normalmente chama o método básico de Groebner, acredito, e que rapidamente trava no meu laptop. Tentei executar o cálculo das cadeias regulares e leva mais tempo do que tenho paciência, mas não parece ser tão ruim quanto a memória. Caso você esteja interessado, a página de ajuda do comando que usei está aqui e aqui está o código que usei:

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

A maneira profissional é escrever suas equações em uma linguagem de modelagem como AMPL ou GAMS e resolvê-la com um solucionador como o IPOPT.

O AMPL é um sistema comercial, mas uma versão gratuita para estudantes do AMPL é capaz de apresentar problemas com até 300 equações e variáveis.

Se você apenas deseja resolver um ou alguns problemas, pode resolvê-lo on-line livremente usando o servidor NEOS para otimização - basta enviar a descrição da AMPL e aguardar a resposta ser devolvida a você.

Se você precisar resolver esses sistemas repetidamente como parte de um estudo maior (por exemplo, variando os parâmetros), faça o download do IPOPT (que é um software sob uma licença muito liberal).

Edit: Observe que as soluções simbólicas que são compreensíveis geralmente são restritas a problemas muito pequenos - geralmente o tamanho de uma base Groebner cresce explosivamente com o número de variáveis ​​ou o grau dos polinômios e o tempo para o processamento ainda mais. Portanto, um tempo de espera de uma hora ou mais com o Mathematica é um sinal (embora não seja uma prova) de que sua solução simbólica seria completamente incompreensível. Além disso, a avaliação de uma expressão tão longa provavelmente será numericamente instável; portanto, você precisará de alta precisão na avaliação para obter resultados significativos.


6

Escrever a solução inteira é impossível dentro da razão. Mas aqui estão algumas equações para reduzir um pouco o sistema:

vocêSvocêS

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

D

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

CUMACP

vocêUMAvocêPvocêUMAvocêP

vocêUMAvocêPHCUMACPD

HCUMACPCUMACP

Boa sorte!


vocêSDvocêUMAvocêPvocêSHCUMACP

HCUMACPCUMACP

Pode apostar. @ GeoffOxberry, acho que você deve adicionar seus comentários diretamente à resposta da ja72.
David Ketcheson

@DavidKetcheson: Feito; Não estou preocupado com a wikificação, porque o representante não é importante. Ainda não voltei e preenchi as manipulações simbólicas.
precisa

3

Depende da estrutura de suas equações.

Se você está procurando todos os estados estacionários do seu conjunto de equações e pode reorganizá-los como o ErikP diz em polinômios, pode usar métodos da geometria algébrica real para calcular todas as soluções numéricas com alta precisão. Bertini é um desses pacotes que eu conheço, mas existem outros. Fui a uma conferência em Notre Dame há alguns anos atrás, onde Bertini era usado para encontrar estados estáveis ​​de EDOs a partir da cinética química; Bertini foi desenvolvido em Notre Dame.

Outra possibilidade é usar os métodos propostos no "Teste de exclusão não suave para encontrar todas as soluções de equações não lineares" por MD Stuber, V. Kumar e PI Barton, BIT Numerical Mathematics 50 (4), 885-917, DOI: DOI: 10.1007 / s10543-010-0280-6 ; esses métodos não exigem que o sistema de equações seja polinômio. Paul Barton é meu conselheiro e Matt Stuber é meu colega; se quiser, posso pedir o software e enviar para você. O artigo utiliza métodos de otimização global e aritmética de intervalos (cita o livro de ArnoldNeumaier), bem como o método de Newton. A vantagem deste método é que ele deve localizar todas as soluções; a desvantagem é que é complicado.

F(x)=0 0

minxS__F(x)__,

S

  • Ele localizará apenas no máximo uma solução por vez. Para encontrar soluções adicionais, você precisa adicionar restrições que excluam todas as soluções anteriores encontradas.
  • Se o seu problema de otimização for não-convexo, para usar o IPOPT ou solucionadores similares, você precisará de um bom palpite inicial, próximo a uma solução de suas equações (o mesmo princípio básico do método de Newton) ou um solucionador de otimização não-convexo como BARON , Couenne , Bonmin , etc. Você deve tentar todos os solucionadores que tiver em suas mãos, pois o desempenho de cada solucionador de programação não-linear não-convexo depende dos problemas.

1

Eu sugeriria olhar para um método de homotopia. Embora não seja simbólico, produzirá todas as soluções do seu problema. Para uma biblioteca fácil, confira:

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


2n

Dr. Ahmadia, obviamente você não acompanhou a literatura sobre métodos de homotopia. Leia as publicações de Jan e revise esse número.
aterrel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.