如何在r中计算这个联立方程组

如何在r中计算这个联立方程组,r,R,我试图同时求解R中a和b的以下两个方程: 0.1 = a /(1+a) * 0.9639 + a(1+b) / (1+a(1+b)) * 0.0324 + a(1+b)^2 / (1+a(1+b)^2) * 0.0036 + a(1+b)^4 / (1+a(1+b)^4) * 0.0001 0.03 = [(a/(1+a)-0.1)^2 * 0.9639 + (a(1+b) / (1+a(1+b))-0.1)^2 * 0.0324 +(a(1+b)^2 / (1+a(1+b)^2)-0.1)^

我试图同时求解R中
a
b
的以下两个方程:

0.1 = a /(1+a) * 0.9639 + a(1+b) / (1+a(1+b)) * 0.0324 + a(1+b)^2 / (1+a(1+b)^2) * 0.0036 + a(1+b)^4 / (1+a(1+b)^4) * 0.0001

0.03 = [(a/(1+a)-0.1)^2 * 0.9639 + (a(1+b) / (1+a(1+b))-0.1)^2 * 0.0324 +(a(1+b)^2 / (1+a(1+b)^2)-0.1)^2 * 0.0036 + (a(1+b)^4/(1+a(1+b)^4)-0.1)^2*0.0001]/0.09
我试图使用rootSolve包来找到解决方案,但收到了一条错误消息

我使用的代码如下:

library(rootSolve)

model=function(x){ 
    f1=((x[1]/(1+x[1]))*0.9639+((x[1]*(1+x[2]))/(1+x[1]*(1+x[2])))*0.0324+((x[1]*(1+x[2])^2)/(1+x[1]*(1+x[2])^2))*0.0036+(x[1]*(1+x[2])^4)/(1+x[1]*(1+x[2])^4)*0.0001)-0.1
    f2=(((x[1]/(1+x[1])-0.1)^2*0.9639+(x[1]*(1+x[2])/(1+x[1]*(1+x[2]))-0.1)^2*0.0324+(x[1]*(1+x[2])^2/(1+x[1]*(1+x[2])^2)-0.1)^2*0.0036+(x[1]*(1+x[2])^4/(1+x[1]*(1+x[2])^4)-0.1)^2*0.0001)/0.09)-0.03
    c(f1=f1,f2=f2)
} 

solution=multiroot(f=model, start=c(1,1))
修复(并稍微整理)模型功能后:

model=function(x){
    f1=((x[1]/(1+x[1]))*0.9639+
        ((x[1]*(1+x[2]))/(1+x[1]*(1+x[2])))*0.0324 +
        ((x[1]*(1+x[2])^2)/(1+x[1]*(1+x[2])^2))*0.0036+
        (x[1]*(1+x[2])^4)/(1+x[1]*(1+x[2])^4)*0.0001)-0.1
    f2=(((x[1]/(1+x[1])-0.1)^2*0.9639 +
         (x[1]*(1+x[2])/(1+x[1]*(1+x[2]))-0.1)^2*0.0324 +
         (x[1]*(1+x[2])^2/(1+x[1]*(1+x[2])^2)-0.1)^2*0.0036+
         (x[1]*(1+x[2])^4/(1+x[1]*(1+x[2])^4)-0.1)^2*0.0001)/0.09)-0.03
    c(f1=f1,f2=f2)
}
我可以毫无错误地运行
multiroot

> multiroot(model,start=c(1,1))
diagonal element is zero 
[1] 2
$root
[1] -1.827359e+00  1.749761e+06

$f.root
       f1        f2 
 2.065032 47.916572 

$iter
[1] 3

$estim.precis
[1] 24.9908

Warning messages:
1: In stode(y, time, func, parms = parms, ...) :
  error during factorisation of matrix (dgefa);         singular matrix
2: In stode(y, time, func, parms = parms, ...) : steady-state not reached
但是警告告诉我,它可能没有找到真正的解决办法。对于这些问题,你必须用起始值进行实验,特别是因为你的问题是非常非线性的。在对
a
b
的各种值调用
model(c(a,b))
进行了一点实验,以查看我可能找到零的方向后,我想到了以下几点:

> multiroot(model,start=c(.1,3.5))
$root
[1] 0.09989584 3.44808411

$f.root
           f1            f2 
-6.647460e-13  3.676781e-13 

$iter
[1] 3

$estim.precis
[1] 5.162121e-13
它没有给出任何警告,并声称非常接近于零。您的答案在
$root
部分

可能还有其他解决方案-您有
x[2]
高达4的幂,因此这可能意味着四个解决方案(其中一些可能是复数)


如果你能得到一个代数系统来精确地解方程(用常数代替十进制数),那么你可能会得到一个解的封闭形式。

请更清楚地说明你的问题。还提到你试过的帽子吗?欢迎来到StackOverflow!获得高质量答案的第一件事就是在这里写高质量的问题。你可能想读书。除此之外,你可能会在这里找到一些关于你的问题的提示:R并不真正适合代数(尽管可能有一个包,或者你可能会使用一个优化函数)。试试maxima:谢谢你的推荐~现在包括你尝试时收到的错误消息。你的问题是(首先)你还没有学会如何正确地用R写表达式
x[1](1+x[2])
不是乘法!!!非常感谢您的回答~!你能点击勾号显示我回答你问题的答案吗?