Solusi simbolik dari sistem 7 persamaan nonlinier

9

Saya punya sistem persamaan diferensial biasa - 7 persamaan, dan ~ 30 parameter yang mengatur perilaku mereka sebagai bagian dari model matematika penularan penyakit. Aku suka mencari negara yang stabil bagi mereka persamaan Mengubah dx/dt = rest of the equationke 0 = equationuntuk masing-masing persamaan membuat masalah aljabar sederhana. Ini bisa dilakukan dengan tangan, tetapi saya sangat buruk dalam perhitungan seperti itu.

Saya sudah mencoba menggunakan Mathematica, yang dapat menangani versi yang lebih kecil dari masalah ini ( lihat di sini ), tetapi Mathematica berhenti untuk mengatasi masalah ini. Apakah ada cara yang lebih efisien / efektif untuk mendekati ini? Sistem matematika simbolik yang lebih efisien? Saran lain?

Beberapa pembaruan (21 Maret):

  • Tujuannya memang untuk menyelesaikannya secara simbolis - jawaban numeriknya bagus tetapi untuk saat ini tujuan akhir adalah versi simbolik.
  • Setidaknya ada satu keseimbangan. Saya belum benar-benar duduk dan membuktikan ini, tetapi dengan desain itu harus memiliki setidaknya satu yang sepele di mana tidak ada yang terinfeksi pada awalnya. Mungkin tidak ada apa-apa selain itu, tetapi itu akan membuat saya puas seperti yang lainnya.
  • Di bawah ini adalah sekumpulan persamaan aktual yang sedang dibicarakan.

masukkan deskripsi gambar di sini

Singkatnya, saya mencari ekspresi simbolik untuk solusi sistem 7 persamaan kuadrat dalam 7 variabel.

Fomite
sumber
Bisakah Anda menuliskan persamaannya? Memecahkan sistem persamaan nonlinear besar yang tidak dibatasi sering dilakukan secara numerik menggunakan metode Newton atau salah satu variannya. Pilihan di sini akan tergantung pada seberapa banyak informasi yang Anda miliki tentang sistem persamaan asli - yang paling penting, apakah Jacobian dari sistem persamaan tersedia, dapat dihitung, atau mudah diperkirakan?
Aron Ahmadia
ahh! Saya melihat bahwa persamaan Anda dirinci di situs Mathematica. Apakah Anda keberatan membawa mereka ke sini? (Ini bukan posting silang, terutama jika kami akan menyarankan solusi numerik untuk Anda di luar cakupan yang dapat dilakukan Mathematica).
Aron Ahmadia
Saya akan membawa persamaan dari Mathematica hari ini - setelah perjalanan 5 jam saya harus keluar dari jalan.
Fomite
1
Bukankah . Tampaknya demikian dari persamaan di atas. Apakah saya melewatkan sesuatu? dUsdt=dHdt
ja72
1
@ GeoffOxberry: jadi ketika turunannya disamakan dengan nol, kedua persamaan # 1 dan # 2 identik dan satu dapat dihilangkan.
ja72

Jawaban:

13

Sepertinya persamaan yang Anda hadapi semuanya polinomial setelah kliring penyebut. Itu hal yang baik (fungsi transendental seringkali sedikit lebih sulit untuk ditangani secara aljabar). Namun, itu bukan jaminan bahwa persamaan Anda memiliki solusi bentuk tertutup. Ini adalah poin penting yang banyak orang tidak benar-benar "dapatkan", bahkan jika mereka mengetahuinya secara teori, jadi itu menyatakan kembali: ada sistem persamaan polinomial yang cukup sederhana yang tidak ada cara untuk memberikan solusi dalam hal ( th) root dll. Contoh terkenal (dalam satu variabel) adalah x 5 - x + 1 = 0 . Lihat juga halaman wikipedia ini .nx5x+1=0

Karena itu, tentu saja ada juga sistem persamaan yang dapat diselesaikan, dan ada baiknya untuk memeriksa apakah sistem Anda adalah salah satunya. Dan bahkan jika sistem Anda tidak dapat dipecahkan, masih mungkin untuk menemukan bentuk untuk sistem persamaan Anda yang lebih sederhana, dalam beberapa hal. Misalnya, temukan satu persamaan yang hanya melibatkan variabel pertama (bahkan jika tidak dapat diselesaikan secara aljabar), maka persamaan kedua hanya melibatkan variabel pertama dan kedua, dll. Ada beberapa teori yang bersaing untuk bagaimana menemukan "bentuk normal" tersebut. sistem polinomial; yang paling terkenal adalah teori dasar Groebner, dan yang bersaing adalah teori rantai reguler.

Dalam sistem komputer aljabar Maple (pengungkapan penuh: Saya bekerja untuk mereka) keduanya diimplementasikan. The solveperintah biasanya menyebut Groebner dasar metode, saya percaya, dan yang dengan cepat grinds berhenti di laptop saya. Saya mencoba menjalankan perhitungan rantai biasa dan butuh waktu lebih lama daripada yang saya sabar tetapi tampaknya tidak meledak karena ingatannya buruk. Jika Anda tertarik, halaman bantuan untuk perintah yang saya gunakan ada di sini , dan ini adalah kode yang saya gunakan:

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);
Erik P.
sumber
7

Cara profesional adalah menulis persamaan Anda dalam bahasa pemodelan seperti AMPL atau GAMS, dan menyelesaikannya dengan solver seperti IPOPT.

AMPL adalah sistem komersial, tetapi versi mahasiswa gratis AMPL mampu menimbulkan masalah dengan hingga 300 persamaan dan variabel.

Jika Anda hanya ingin menyelesaikan satu atau beberapa masalah, Anda dapat menyelesaikannya secara online secara gratis dengan menggunakan server NEOS untuk optimisasi - cukup kirimkan deskripsi AMPL dan tunggu jawaban dikembalikan kepada Anda.

Jika Anda perlu memecahkan sistem seperti itu berulang kali sebagai bagian dari studi yang lebih besar (misalnya, memvariasikan parameter), Anda harus mengunduh IPOPT (yang merupakan perangkat lunak di bawah lisensi yang sangat liberal).

Sunting: Perhatikan bahwa solusi simbolik yang dapat dipahami biasanya terbatas pada masalah yang cukup kecil - biasanya ukuran basis Groebner tumbuh secara eksplosif dengan jumlah variabel atau tingkat polinomial, dan waktu untuk memproses lebih banyak lagi. Jadi waktu menunggu satu jam atau lebih dengan Mathematica adalah tanda (meskipun bukan bukti) bahwa solusi simbolis Anda akan sepenuhnya tidak dapat dipahami. Selain itu, mengevaluasi ekspresi yang panjang kemungkinan tidak stabil secara numerik, sehingga Anda akan membutuhkan presisi tinggi dalam evaluasi untuk mendapatkan hasil yang bermakna.

Arnold Neumaier
sumber
6

Menuliskan seluruh solusi tidak mungkin dengan alasan. Tapi di sini ada beberapa persamaan untuk sedikit mengurangi sistem:

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

Semoga berhasil!

Ja72
sumber
USDUAUPUSHCACP
HCACPCACP
Tepat. @ GeoffOxberry, saya pikir Anda harus menambahkan komentar Anda langsung ke jawaban ja72.
David Ketcheson
@DavidKetcheson: Selesai; Saya tidak khawatir tentang melakukan wiki, karena perwakilan tidak penting. Saya belum kembali dan mengisi manipulasi simbolik.
Geoff Oxberry
3

Itu tergantung pada struktur persamaan Anda.

Jika Anda mencari semua keadaan stabil dari set persamaan Anda, dan Anda dapat mengatur ulangnya seperti yang dikatakan ErikP ke dalam polinomial, Anda dapat menggunakan metode dari geometri aljabar nyata untuk menghitung semua solusi numerik hingga presisi tinggi. Bertini adalah salah satu paket yang saya tahu, tetapi ada yang lain. Saya pergi ke sebuah konferensi di Notre Dame beberapa tahun yang lalu di mana Bertini digunakan untuk menemukan keadaan stabil ODE dari kinetika kimia; Bertini dikembangkan di Notre Dame.

Kemungkinan lain adalah dengan menggunakan metode yang diusulkan dalam "tes eksklusi Nonsmooth untuk menemukan semua solusi persamaan nonlinier" oleh MD Stuber, V. Kumar, dan PI Barton, BIT Matematika Angka 50 (4), 885-917, DOI: DOI: 10.1007 / s10543-010-0280-6 ; metode ini tidak memerlukan sistem persamaan menjadi polinomial. Paul Barton adalah penasihat saya, dan Matt Stuber adalah rekan kerja saya; jika Anda suka, saya bisa memintanya untuk perangkat lunak dan mengirimkannya kepada Anda. Makalah ini menggunakan metode dari optimasi global dan interval aritmatika (mengutip buku ArnoldNeumaier), serta metode Newton. Keuntungan dari metode ini adalah bahwa ia harus menemukan semua solusi; kerugiannya adalah rumit.

F(x)=0

minxSF(x),

S

  • Ini hanya akan menemukan paling banyak satu solusi sekaligus. Untuk menemukan solusi tambahan, Anda perlu menambahkan kendala yang mengecualikan semua solusi sebelumnya yang Anda temukan.
  • Jika masalah pengoptimalan Anda adalah nonconvex, untuk menggunakan IPOPT atau solver sejenis, Anda akan memerlukan tebakan awal yang baik, dekat dengan solusi persamaan Anda (prinsip dasar yang sama dengan metode Newton), atau pemecah optimisasi nonconvex seperti BARON , Couenne , Bonmin , dll. Anda harus mencoba setiap solver yang Anda dapatkan, karena kinerja setiap solver pemrograman nonlinier non-linear bergantung pada masalah.
Geoff Oxberry
sumber
1

Saya akan menyarankan melihat metode homotopy. Meskipun tidak simbolis, itu akan menghasilkan semua solusi dari masalah Anda. Untuk perpustakaan yang mudah dibaca:

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

aterrel
sumber
2n
Ahmadia, Anda jelas tidak mengikuti literatur tentang metode homotopy. Silakan baca publikasi Jan dan perbaiki nomor ini.
aterrel