如何使用 R 求解两个未知数的方程组?

How to solve set of equations for two unknowns using R?

我有两个方程。它们如下:

( 1 - 0.25 ^ {1/alpha} ) * lambda = 85

( 1 - 0.75 ^ {1/alpha} ) * lambda = 11

我想通过求解上述两个方程来计算 alphalambda 的值。我如何使用 R 执行此操作?

一种方法是通过引入损失函数将其转化为优化问题:

loss <- function(X) {
  L = X[1]
  a = X[2]
  return(sum(c(
    (1 - 0.25^(1/a))*L - 85, 
    (1 - 0.75^(1/a))*L - 11
  )^2))
}

nlm(loss, c(-1,-1))

如果从 nlm() 返回的结果有一个 minimum 接近零,那么 estimate 将是一个包含 lambda 和 alpha 的向量。当我尝试这个时,我得到了一个通过嗅探测试的答案:

> a = -1.28799
> L = -43.95321
> (1 - 0.25^(1/a))*L
[1] 84.99999
> (1 - 0.75^(1/a))*L
[1] 11.00005

@olooney 的回答是最好的。

求解这些方程的另一种方法是使用 uniroot 函数。我们可以取消 lambda 值,并可以使用 uniroot 来找到 alpha 的值。然后替换回去找到 lambda.

f <- function(x) {

  (11/85) - ((1 - (0.75) ^ (1/x)) / (1 - (0.25) ^ (1/x)) )

}

f_alpha <- uniroot(f, lower = -10, upper = -1, extendInt = "yes")

f_lambda <- function(x) {

  11 - ((1 - (0.75) ^ (1/f_alpha$root)) * x)

}

lambda = uniroot(f_lambda, lower = -10, upper = -2, extendInt = "yes")$root

sprintf("Alpha equals %f", f_alpha$root)
sprintf("Lambda equals %f", lambda)

结果

[1] "Alpha equals -1.287978"
[1] "Lambda equals -43.952544"