Символічне рішення системи з 7 нелінійних рівнянь


9

У мене є система звичайних диференціальних рівнянь - 7 рівнянь і ~ 30 параметрів, що регулюють їх поведінку як частина математичної моделі передачі захворювання. Я б хотів , щоб знайти стійкі стану для цих рівнянь Changing dx/dt = rest of the equationдля 0 = equationкожного з рівнянь робить просту проблему алгебри. Це можна зробити вручну, але я смішно поганий у такому обчисленні.

Я намагався використовувати Mathematica, який може вирішити менші версії цієї проблеми ( див. Тут ), але Mathematica зупинився на цій проблемі. Чи є більш ефективний / ефективний спосіб наблизитись до цього? Більш ефективна символічна математична система? Інші пропозиції?

Кілька оновлень (21 березня):

  • Мета насправді вирішити їх символічно - числові відповіді приємні, але наразі кінцевою метою є символічна версія.
  • Існує хоча б одна рівновага. Я насправді не сів і довів це, але задумом він повинен мати принаймні одну тривіальну, в якій ніхто не заражений на початку. Окрім цього може бути нічого , але це зробило б мене таким же задоволеним, як і все інше.
  • Нижче наведено фактичний набір рівнянь, про які йдеться.

введіть тут опис зображення

Підсумовуючи, я шукаю символічні вирази для розв’язання системи 7 квадратних рівнянь у 7 змінних.


Чи можете ви записати рівняння? Розв’язування великої необмеженої системи нелінійних рівнянь часто робиться чисельно за допомогою методу Ньютона або одного з його варіантів. Вибір тут залежатиме від того, скільки інформації ви маєте про початкову систему рівнянь - головне, чи є якобійська система рівнянь доступною, обчислюваною чи легко наближеною?
Арон Ахмадія

ах! Я бачу, що ваші рівняння детально описані на сайті Mathematica. Ви не проти завести їх сюди? (Це не перехресне повідомлення, особливо якщо ми будемо пропонувати чисельні рішення для вас, що виходять за рамки того, що може зробити Mathematica).
Арон Ахмадія

Я приведу рівняння з Mathematica пізніше сьогодні - після 5-годинної їзди я повинен вийти з дороги.
Фоміт

1
Не . Це, мабуть, виходить з рівнянь вище. Я щось пропускаю? dUsdt=dHdt
ja72

1
@GeoffOxberry: тому коли похідні прирівнюються до нуля, обидва рівняння №1 та №2 однакові і їх можна оминути.
ja72

Відповіді:


13

Схоже, що рівняння, з якими ви маєте справу, - це все поліноми після очищення знаменників. Це добре (трансцендентальні функції часто буває трохи складніше впоратися з алгебраїчно). Однак це не гарантія того, що ваші рівняння мають рішення закритої форми. Це важливий момент, який багато людей насправді не "отримують", навіть якщо вони це знають теоретично, тому це може повторювати: є досить прості системи поліноміальних рівнянь, для яких немає можливості дати рішення з точки зору ( го) коріння тощо. Відомий приклад (в одній змінній) - . Дивіться також цю сторінку вікіпедії .nx5x+1=0

Сказавши, що, звичайно, є також системи рівнянь, які можна вирішити, і варто перевірити, чи ваша система одна з таких. І навіть якщо вашу систему неможливо вирішити, можливо, все-таки можна знайти форму для вашої системи рівнянь, яка є простішою в певному сенсі. Наприклад, знайдіть одне рівняння, що включає лише першу змінну (навіть якщо її не можна алгебраїчно розв’язати), потім друге рівняння, що включає лише першу та другу змінну і т. Д. Існує кілька конкуруючих теорій, як знайти такі "нормальні форми" поліномних систем; найвідомішою є теорія бази Грібнера, а конкурентоспроможною є теорія регулярних ланцюгів.

У системі комп’ютерної алгебри Maple (повне розкриття: я працюю на них) обидва вони реалізовані. solveКоманда , як правило , викликає метод базисів Groebner, я вважаю, що і швидко перемелює до зупинки на моєму ноутбуці. Я спробував запустити звичайні обчислення ланцюгів, і це займає більше часу, ніж у мене є терпіння, але, схоже, не вибухне так погано. У випадку, якщо вас цікавить, сторінка довідки для команди, яку я використав, знаходиться тут , і ось код, який я використав:

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

Професійний спосіб - написати свої рівняння на мові моделювання, такі як AMPL або GAMS, і вирішити це за допомогою розв'язувача, такого як IPOPT.

AMPL - це комерційна система, але безкоштовна студентська версія AMPL здатна створювати проблеми з до 300 рівняннями та змінними.

Якщо ви просто хочете вирішити одну або декілька проблем, ви можете їх вирішити в Інтернеті вільно, використовуючи NEOS-сервер для оптимізації - просто надішліть опис AMPL і дочекайтеся повернення відповіді.

Якщо вам потрібно вирішувати такі системи неодноразово, як частина більшого дослідження (наприклад, зміна параметрів), вам слід завантажити IPOPT (це програмне забезпечення за дуже ліберальною ліцензією).

Редагувати: Зауважте, що зрозумілі символічні рішення, як правило, обмежуються досить невеликими проблемами - зазвичай розмір основи Грьобнера вибухово зростає з кількістю змінних або ступенем поліномів, а час на обробку ще більше. Таким чином, час очікування години або більше на Mathematica - це знак (хоча і не доказ) того, що ваше символічне рішення було б абсолютно незрозумілим. Більше того, оцінка такого тривалого вираження, ймовірно, чисельно нестабільна, тому вам знадобиться висока точність в оцінці, щоб отримати значущі результати.


6

Виписати все рішення неможливо в межах розуму. Але ось деякі рівняння, щоб трохи зменшити систему:

US не відображається в будь-яких рівняннях, окрім рівнянь 1 і 2. Крім того, ці рівняння є залежним набором (рівняння 1 дорівнює -1-кратному рівнянню 2), тому рівняння 1 можна вирішити для в термінах всіх інших змінних, а рівняння 2 можна відкинути.US

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

Рівняння 7 є лінійним у всіх змінних і може бути переставлено для вирішення для :D

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

Отриманий вираз підказує, що ми повинні намагатися вирішити будь-які інші змінні в термінах і ; оскільки у нас є лише 6 незалежних рівнянь, найкраще, що ми можемо зробити, - це звести систему до одного рівняння у двох змінних.CACP

На щастя, додавання рівнянь 3 і 5 разом дає рівняння, лінійне для всіх змінних, і може бути розв'язане для або . Додавання рівнянь 4 та 6 разом також дає рівняння, лінійне у всіх змінних, і його можна вирішити для або (що не було вирішено для додавання рівнянь 3 та 5 разом).UAUPUAUP

На цьому етапі у нас повинні бути вирази для і в термінах , і (тому що ви можете усунути використовуючи вираз вище). Ми використовували рівняння 1, 2, 5, 6 і 7; ми збережемо рівняння 3 і 4, оскільки вони простіші.UAUPHCACPD

Ми можемо використовувати або рівняння 3, або 4 для розв’язання для в термінах і . Тоді, роблячи всі необхідні підстановки, решта рівняння має бути лише в термінах і . Коріння цього рівняння визначатимуть стійкі стани системи; можливо, а може і не можливо знайти ці корені символічно.HCACPCACP

Удачі!


USне відображається в жодному рівнянні, окрім рівнянь 1 і 2. Я припускаю, що ви вилучили рівняння 1, 2 і 7. (Це найпростіше для вирішення.) Додавання рівнянь 3 і 5 дає вам рівняння, лінійне для всіх змінних, і, таким чином, легко вирішити. Аналогічно, додавання рівнянь 4 і 6 дає вам рівняння, лінійне у всіх змінних, і, таким чином, легко вирішити. Таким чином, це турбується про 4 змінних 7 (D, UA, UP, і US), так що все в плані H, CA, і CP.
Джефф Оксберрі

Тож у нас є рівняння 3 та 4 зліва. (У рівняннях 5 і 6 є більше термінів, тому давайте викинемо їх.) Ви можете використовувати один з них для вирішенняH з точки зору CA і CP, і в цей момент існує одне рівняння у вигляді двох змінних: CA і CP, в цьому випадку може бути простіше знайти символічні рішення ... якщо я повністю не перечитаю рівняння.
Джефф Оксберрі

Прямо на. @GeoffOxberry, я думаю, вам слід просто додати свої коментарі безпосередньо до відповіді ja72.
Девід Кетчесон

@DavidKetcheson: Готово; Я не переймаюся його вікіфікацією, тому що представник не важливий. Я ще не повернувся і не заповнив символічні маніпуляції.
Джефф Оксберрі

3

Це залежить від структури ваших рівнянь.

Якщо ви шукаєте всі стаціонарні стани свого набору рівнянь, і ви можете їх переставити, як каже ЕрікП, у поліноми, ви можете використовувати методи з реальної алгебраїчної геометрії для обчислення всіх чисельних розв’язків до високої точності. Бертіні - це один такий пакет, про який я знаю, але є й інші. Я ходив на конференцію в Нотр-Дам кілька років тому, де Бертіні використовувався для пошуку стійких станів ОДЕ з хімічної кінетики; Бертіні був розроблений у Нотр-Дам.

Інша можливість полягає у використанні методів, запропонованих у "Тесті виключення негладких значень для пошуку всіх розв’язків нелінійних рівнянь" М.Д. Стюбера, В. Кумара та П.І. Бартона, BIT Numerical Mathematics 50 (4), 885-917, DOI: DOI: 10.1007 / s10543-010-0280-6 ; ці методи не вимагають, щоб система рівнянь була багаточленом. Пол Бартон - мій радник, а Метт Стюбер - мій колега; якщо вам подобається, я можу попросити у нього програмне забезпечення та надіслати його вам. У роботі використовуються методи глобальної оптимізації та інтервальної арифметики (цитується книга Арнольда Ноймайєра), а також метод Ньютона. Перевага цього методу полягає в тому, що він повинен знаходити всі рішення; недоліком є ​​те, що це складно.

Якщо це не зрозуміло, АрнольдНемайер пропонує це замість вирішити F(x)=0 безпосередньо використовуючи щось на зразок методу Ньютона (який, як правило, спрацює, якщо ви дасте йому хорошу початкову здогадку, достатньо близьку до рішення), ви вирішуєте

minxSF(x),

де - деяка здійсненна множина, визначена обмеженнями вашої проблеми, а не намагатися вирішити. На дуже грубому рівні використання гладкого нелінійного програмного рішення для програмування дуже схоже на використання методу Ньютона з додатковою алгоритмічною витонченістю для надійності та продуктивності. IPOPT - це дійсно хороший фрагмент програмного забезпечення для цієї мети; там є літанія інших вирішувачів (просто подивіться на список доступних рішень для GAMS , AMPL або NEOS . Якщо ви вибираєте такий метод, будьте в курсі кількох застережень:S

  • Він знайде за один раз максимум одне рішення. Щоб знайти додаткові рішення, потрібно додати обмеження, які виключають усі знайдені попередні рішення.
  • Якщо ваша проблема оптимізації неконвексована, для використання IPOPT або подібних рішень вам знадобиться або хороша початкова здогадка, близька до рішення ваших рівнянь (той самий основний принцип, як метод Ньютона), або нерозпуклий вирішувач оптимізації, як BARON , Couenne , Bonmin і т. д. Ви повинні спробувати кожен вирішувач, на який ви потрапляєте, оскільки продуктивність кожного нелінійного нелінійного програмування вирішує проблеми.

1

Я б запропонував переглянути метод гомотопії. Хоча це не символічно, воно створить усі рішення вашої проблеми. Для легкої перевірки бібліотеки:

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


Так! Методи продовження гомотопії важко експоненціально (вам потрібно буде врахувати початкових «стартових» умов), але для цієї невеликої проблеми це буде обчислимо обчислимо, і ви можете гарантувати глобальну оптимальність проблеми мінімізації. 2n
Арон Ахмадія

Докторе Ахмадіа, ви, очевидно, не в курсі літератури про методи гомотопії. Будь ласка, прочитайте публікації Яна та перегляньте це число.
aterrel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.