【问题标题】:Solve simultaneous equations using Ryacas package (OldSolve) in R在 R 中使用 Ryacas 包 (OldSolve) 求解联立方程
【发布时间】:2018-12-14 20:22:48
【问题描述】:

我正在尝试使用 R 中的 Ryacas 包求解 3 个方程组。

library(Ryacas)
 yacas("OldSolve({(f*Reg/(k + Reg)) - r*BB - ab * BB - a1*f1*BB*AA*P - fp*BB*P==0,(ab * BB + a1*f1*BB*AA*P)/e1 - m1 * AA == 0, (fp * BB * P)/ep - f1*AA*P - mp * P ==0 },{BB,AA,P})")

但我在 R 中得到以下答案

expression(list(list(BB == BB, AA == (f * Reg/(k + Reg) - r * 
    BB - ab * BB - fp * BB * P)/(P * (a1 * f1 * BB)), P == P)))

但是,如果我在其他软件上解决问题,我应该得到 following answer(它太大了,无法在 stackoverflow 上写出来)

基本形式

{BB -> some value, AA -> some value, P-> 0}, {BB -> some value, AA -> some value, P-> some value}, 
{BB -> some value, AA -> some value, P-> some value}

【问题讨论】:

    标签: r solver equation-solving simultaneous


    【解决方案1】:

    很难完全证明这一点,但很可能OldSolve 对于这个系统来说太弱了。

    manual 中的几个要点:

    此命令尝试求解一个或多个方程。

    因此,不能保证。

    请注意,仅找到并返回一个解决方案。

    意思是肯定没有办法得到你提到的所有三个解决方案。

    同样,最多返回一个解决方案。

    您得到BB == BBP == P 的事实意味着无限多的解决方案,因此我们可能将其视为解决系统失败的证据。

    递归求解多个方程:首先,一个方程是 寻找其中其中一个变量恰好出现一次;那么这个 方程用SuchThat求解;最后的解决方案是 代入其他方程 由 Eliminate 减少数量 方程减一。这足以满足所有线性方程和 一大群简单的非线性方程

    所以,这可以解释为什么OldSolve 可能会在您的系统中失败。首先,它是非线性的,不能保证。其次,每个变量在每个方程中出现 1-4 次。如果我正确理解了算法,则在求解一个方程(例如AA)并将解代入另外两个方程之后——我们就完成了。那是因为 BBP 在其余两个方程中都出现了不止一次(因此,OldSolve 无法求解其中任何一个)。您也可以尝试切换方程式的顺序;你会看到一个不同的变量得到解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多