7个非线性方程组的符号解


9

作为疾病传播数学模型的一部分,我有一个常微分方程组-7个方程组,以及控制它们行为的〜30个参数。我找到稳定状态对于那些公式更改dx/dt = rest of the equation0 = equation每个方程式使得一个简单的代数问题。这可以手工完成,但是我对这种计算却很可惜。

我试过使用Mathematica,它可以处理此问题的较小版本(请参阅此处),但是Mathematica正在解决该问题。有没有更有效的方法来解决这个问题?更有效的符号数学系统?还有其他建议吗?

一些更新(3月21日):

  • 目标的确是以符号方式解决它们-数字答案很好,但目前最终目标是符号形式。
  • 至少有一个平衡。我实际上并没有坐下来证明这一点,但是从设计上讲,它应该至少有一个琐碎的东西,一开始就没有人被感染。可能没有什么,除了这一点,但将让我的内容别的。
  • 以下是正在讨论的实际方程组。

在此处输入图片说明

总之,我正在寻找7个变量组成的7个二次方程组的解的符号表达式。


你可以写下方程式吗?经常使用牛顿法或它的一种变形方法来数值求解大型的无约束非线性方程组。这里的选择将取决于您对原始方程组拥有多少信息-最重要的是,方程组的雅可比矩阵是否可用,可计算或容易近似?
阿隆·艾玛迪亚

啊!我看到您的方程式已在Mathematica网站上详细列出。你介意带他们过来吗?(这不是交叉发布,特别是如果我们要为您建议数值解决方案超出Mathematica的能力范围时)。
Aron Ahmadia 2012年

今天晚些时候,我将从Mathematica带走这些方程式-经过5个小时的车程,我必须摆脱困境。
Fomite 2012年

1
是不是 dUsdt=dHdt。从上面的等式看来似乎是这样。我想念什么吗?
2012年

1
@GeoffOxberry:因此,当导数等于零时,等式#1和#2相同,并且可以省略一个。
2012年

Answers:


13

清除分母后,您正在处理的方程似乎都是多项式。这是一件好事(先验函数通常很难以代数方式处理)。但是,这不能保证您的方程式具有封闭形式的解决方案。这是许多人即使在理论上也知道并没有真正“得到”的基本要点,因此需要重申:存在多项式方程组的相当简单的系统,无法通过以下方式给出解: (nth)根等。一个著名的例子(在一个变量中)是 x5x+1=0。另请参阅此Wikipedia页面

话虽如此,当然还有方程组可以解决,值得检查一下您的系统是否是其中之一。即使您的系统无法求解,从某种意义上说,仍然可能为您的方程组系统找到一个更简单的形式。例如,找到一个仅包含第一个变量的方程(即使无法用代数法求解),然后找到仅包含第一个和第二个变量的第二个方程,等等。关于如何找到这种“范式”,存在一些相互竞争的理论多项式系统 最著名的是Groebner基础理论,而竞争激烈的是正则链理论。

在计算机代数系统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(这是获得非常宽松许可的软件)。

编辑:请注意,可理解的符号解通常仅限于很小的问题-Groebner基的大小通常随变量数量或多项式的阶数以及处理时间的增加而爆炸性增长。因此,在Mathematica中等待一个小时或更长的时间是一个迹象(尽管不是证明),说明您的符号解决方案将是完全无法理解的。此外,评估这样一个长表达式可能在数值上不稳定,因此您需要高精度的评估才能获得有意义的结果。


6

在合理的范围内不可能写出整个解决方案。但是,这里有一些方程式可以使系统简化一些:

US 除了方程式1和2以外,没有其他方程式出现。此外,这些方程式是一个从属集(方程式1是方程式2的-1),因此方程式1可以求解 US 就所有其他变量而言,等式2可以丢弃。

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

方程7在所有变量中都是线性的,可以重新安排以求解 D

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

结果表达式表明,我们应该尝试根据 CACP; 因为我们只有6个独立方程,所以我们能做的最好的事情就是将系统简化为两个变量的一个方程。

幸运的是,将等式3和5相加可以得出一个在所有变量中都是线性的方程,可以通过 UA 要么 UP。将等式4和6加在一起还会得出一个在所有变量中都是线性的方程,可以通过以下公式求解UA 要么 UP (将等式3和5加在一起时未解决的问题)。

在这一点上,我们应该有 UAUP 就......而言 HCACP (因为您可以消除 D使用上面的表达式)。我们已经使用了公式1、2、5、6和7;我们保留方程式3和4,因为它们更简单。

我们可以使用等式3或4来求解 H 就......而言 CACP。然后,进行所有必要的替换,其余等式应仅根据CACP。该方程式的根将决定系统的稳态。可能或不可能以象征方式找到这些根源。

祝好运!


US除了方程式1和2之外,没有其他方程式出现。我假设您消除了方程式1、2和7。(这些是最容易求解的。)将方程式3和5相加,得出的方程式在所有变量中都是线性的,因此,很容易解决。同样,将方程式4和6相加得出的方程式在所有变量中都是线性的,因此易于求解。这样就可以照顾到4个变量7(DUAUPUS),因此一切都取决于 HCACP
Geoff Oxberry 2012年

因此,到那时,我们还有方程式3和4。(方程式5和6具有更多的项,因此我们将其排除在外。)您可以使用其中之一来求解H 就......而言 CACP,此时,只有一个方程式包含两个变量: CACP,在这种情况下,找到符号解可能会更容易...除非我完全误解了这些方程式。
Geoff Oxberry 2012年

对了 @GeoffOxberry,我认为您应该将您的评论直接添加到ja72的答案中。
David Ketcheson 2012年

@DavidKetcheson:完成;我不关心称呼它,因为代表并不重要。我还没有回去填写符号操作。
Geoff Oxberry 2012年

3

这取决于方程的结构。

如果您正在寻找方程组的所有稳态,并且可以按照ErikP所说的那样将它们重新排列为多项式,则可以使用实数代数几何中的方法来计算所有数值解,以达到高精度。我知道Bertini就是这样一个软件包,但是还有其他软件包。几年前,我参加了在巴黎圣母院举行的一次会议,在那儿,贝尔蒂尼被用来从化学动力学中找到ODE的稳态。Bertini是在巴黎圣母院开发的。

另一种可能性是使用MD Stuber ,V.Kumar 和PI Barton在BIT数值数学 50(4),885-917,DOI:DOI:10.1007中提出的“用于寻找非线性方程式所有解的非光滑排除测试提出的方法/ s10543-010-0280-6 ; 这些方法不要求方程组是多项式。Paul Barton是我的顾问,Matt Stuber是我的同事。如果您愿意,我可以请他提供软件并将其发送给您。本文使用了全局优化和区间算术(引用了ArnoldNeumaier的书)中的方法以及牛顿方法。这种方法的优点是应找到所有解决方案。缺点是它很复杂。

如果不清楚,ArnoldNeumaier建议不要解决 F(x)=0 直接使用类似牛顿法的方法(通常,如果您给它一个很好的初始猜测,并且足够接近一个解,它将起作用),

minxSF(x),

其中是由问题的约束而不是试图解决的问题定义的一些可行集合。在非常粗糙的层次上,使用光滑的非线性规划求解器与使用牛顿方法非常相似,并具有完善的算法来增强鲁棒性和性能。IPOPT是用于此目的的非常好的软件。那里有很多其他求解器(只需查看GAMSAMPLNEOS的可用求解器列表即可。如果选择这种方法,请注意以下几点:S

  • 一次最多只能找到一个解决方案。要查找其他解决方案,您需要添加约束,以排除发现的所有先前解决方案。
  • 如果您的优化问题是非凸的,则要使用IPOPT或类似的求解器,您将需要一个很好的初始猜测,靠近您的方程式的解(与牛顿方法的基本原理相同),或一个非凸的优化求解器,如BARONCouenneBonmin,等等。您应该尝试使用每一个求解器,因为每个非凸非线性编程求解器的性能都取决于问题。

1

我建议看一种同伦方法。尽管它不是象征性的,但它将为您的问题提供所有解决方案。为了方便签出库:

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


是! 同伦连续方法是指数级困难的(您将需要考虑初始“起始”条件),但是对于这么小的问题,它在计算上是易于处理的,并且可以保证最小化问题的全局最优性。2n
阿隆·艾玛迪亚

Ahmadia博士,您显然没有跟上同态方法的文献。请阅读Jan的出版物并修改此号码。
aterrel 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.