假设我有以下数值:
ue <- c(0.1784545, 0.2248318, 0.2561000, 0.2722773, 0.2629545, 0.2797364 0.2294227)
ff <- c(679, 631, 588, 514, 380, 192 , 60)
r <- c(0.6167, 0.8099, 0.9902, 1.0767, 1.1359, 1.2550, 1.6187)
我想解决以下代数方程:
weighted.mean((1-(ue+x)*r), ff) = .58498
我要为x
解决的问题。换句话说,为了使加权平均值减去ue*r
和ff
的乘积等于.58498,我需要增加多少才能增加ue。
我可以通过for循环来近似这个答案,但我无法弄清楚如何以代数方式进行此操作。
答案 0 :(得分:4)
这将完成这项工作:
> ue <- c(0.1784545, 0.2248318, 0.2561000, 0.2722773, 0.2629545, 0.2797364, 0.2294227)
> ff <- c(679, 631, 588, 514, 380, 192 , 60)
> r <- c(0.6167, 0.8099, 0.9902, 1.0767, 1.1359, 1.2550, 1.6187)
> f <- function(x) (weighted.mean((1-(ue+x)*r), ff) - .58498)
> uniroot(f, lower=-100000000, upper=100000000)$root
[1] 0.2012965
请确保以适当的方式指定lower
和upper
(根据您对问题的了解),以确保根位于区间内。
如果不这样做会给你一个错误:
> uniroot(f, lower=50, upper=100000000)$root
Error in uniroot(f, lower = 50, upper = 1e+08) :
f() values at end points not of opposite sign
答案 1 :(得分:4)
如果您只是编写等式并进行数学计算,那么找到x
的以下表达式并不难:
((1-.58498) * sum(ff) - sum(ff*r*ue)) / sum(ff*r)
# [1] 0.2012965
以下是使用R
样式编写的计算的主要步骤。 (它们不是要执行的代码行,而只是一个快速解释。)
weighted.mean((1-(ue+x)*r), ff) == .58498
sum(ff * (1 - (ue+x)*r)) == .58498 * sum(ff)
sum(ff) - sum(ff*(ue+x)*r) == .58498 * sum(ff)
sum(ff*(ue+x)*r) == (1-.58498) * sum(ff)
sum(ff*ue*r) + x*sum(ff*r) == (1-.58498) * sum(ff)
因此结果:x == ((1-.58498) * sum(ff) - sum(ff*r*ue)) / sum(ff*r)