Схоже, що рівняння, з якими ви маєте справу, - це все поліноми після очищення знаменників. Це добре (трансцендентальні функції часто буває трохи складніше впоратися з алгебраїчно). Однак це не гарантія того, що ваші рівняння мають рішення закритої форми. Це важливий момент, який багато людей насправді не "отримують", навіть якщо вони це знають теоретично, тому це може повторювати: є досить прості системи поліноміальних рівнянь, для яких немає можливості дати рішення з точки зору ( го) коріння тощо. Відомий приклад (в одній змінній) - . Дивіться також цю сторінку вікіпедії .nx5−x+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);