我有两个方程。它们如下:
( 1 - 0.25 ^ {1/alpha} ) * lambda = 85
( 1 - 0.75 ^ {1/alpha} ) * lambda = 11
我想通过求解上述两个方程来计算alpha
和lambda
的值。如何使用R做到这一点?
答案 0 :(得分:2)
一种方法是通过引入损失函数将其转化为优化问题:
- debug:
msg: read write SIDs are {{ rw_sid_list }}
vars:
rw_sid_list: '{{ om.results
| selectattr("stdout", "eq", "READ WRITE")
| map(attribute="sid")
| list }}'
如果从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
将是一个包含lambda和alpha的向量。当我尝试此操作时,我得到了通过嗅探测试的答案:
estimate
答案 1 :(得分:1)
@olooney的答案是最好的。
求解这些方程式的另一种方法是使用var Query2 =
from b in list
group b.BookPubid by b.BookPubid into g
orderby g.Key
select new
{
PublisherID = g.Key,
TotalBooks = g.Count()
};
函数。我们可以取消uniroot
的值,并可以使用lambda
查找alpha的值。然后代回以找到uniroot
。
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)