我正在尝试使用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}
答案 0 :(得分:1)
很难完全证明这一点,但是对于该系统,OldSolve
很可能太弱了。
manual中的几个要点:
此命令尝试以求解一个或多个方程式。
因此,不能保证。
请注意,仅找到并返回了一个解决方案。
这意味着肯定无法获得您提到的所有三个解决方案。
再次,返回至多一个解决方案。
您拥有BB == BB
和P == P
的事实意味着有许多解决方案,因此我们可以将其视为解决系统失败的证据。
递归地求解多个方程:首先,一个方程是 寻找其中其中一个变量恰好发生一次;然后这个 方程用SuchThat解决;最后的解决方案是 在其他等式中替换,消除了减少数目 方程组加一。这足以满足所有线性方程式和 大类简单非线性方程式
因此,这种解释说明了OldSolve
可能在您的系统中失败的原因。首先,它是非线性的,无法保证。其次,每个变量在每个方程式中出现1-4次。如果我正确理解该算法,则在解决一个方程式(例如w.r.t. AA
)并将其替换为其他两个方程式之后,我们就完成了。这是因为BB
和P
都在剩余的两个方程式中都出现多次(结果OldSolve
无法求解其中的任何一个)。您也可以尝试切换方程式的顺序。您将看到然后可以解决另一个变量。