在 R 中使用 Ryacas 包 (OldSolve) 求解联立方程

Solve simultaneous equations using Ryacas package (OldSolve) in R

我正在尝试使用 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(它太大而无法在 Whosebug 上写出来)

基本形式

{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}

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

manual 中的几个要点:

This command tries to solve one or more equations.

因此,无法保证。

Note that only one solution is found and returned.

这意味着肯定没有办法获得您提到的所有三个解决方案。

Again, at most a single solution is returned.

你得到BB == BBP == P的事实意味着有无限多的解,所以我们可以把它看作是求解系统失败的证据。

Multiple equations are solved recursively: firstly, an equation is sought in which one of the variables occurs exactly once; then this equation is solved with SuchThat; and finally the solution is substituted in the other equations by Eliminate decreasing the number of equations by one. This suffices for all linear equations and a large group of simple nonlinear equations

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