我有這個資料框
product = data.frame(length = c(100, 200, 300, 400), qty = c(1, 2, 1, 3))
價格由這個等式定義,(product[["length"]] * old_const * 2) setup_price
其中old_const = 0.0158 and setup_price = 20.8
product[["old_price"]] = (product[["length"]] * old_const * 2) setup_price
我想通過增加 old_const 來擺脫 const setup_price 并獲得 new_const ,它乘以價格并保持我的收入:
rev1 = sum((product[["length"]] * old_const * 2 setup_price)* product[["qty"]])
所以我想找到rev1 - rev2 = 0
sum((product[["length"]] * old_const * 2 setup_price)* product[["qty"]]) - sum((product[["length"]] * old_const * 2)* product[["qty"]]) = 0
我生成了新的常量const = seq(from = 0.0158, to = 0.018, by = 0.00000001)
并將新常數回圈到我的方程
eval = NULL
diff = NULL
for(j in 1:length(const)){
eval[j] = sum(((product[["length"]] * const[j] * 2 ))* product[["qty"]])
diff[j] = rev1 - eval[j]
}
plot(const, diff)
我可以看到有一個 const 的值,它的某個值接近于零,但我不知道如何獲得 const 的確切值?
有什么建議嗎?如果有人知道更優雅的方式,我將不勝感激。
uj5u.com熱心網友回復:
for
用回圈中的公式撰寫一個函式并使用uniroot
它來找到它的根。
product <- data.frame(length = c(100, 200, 300, 400), qty = c(1, 2, 1, 3))
old_const <- 0.0158
setup_price <- 20.8
rev1 <- sum((product[["length"]] * old_const * 2 setup_price)* product[["qty"]])
fun <- function(x, data, rev1) {
rev1 - 2 * x * sum(data[["length"]] * data[["qty"]])
}
sol <- uniroot(fun, c(0, 1), product, rev1 = rev1)
ev <- sum(((product[["length"]] * sol$root * 2 ))* product[["qty"]])
rev1 - ev
#> [1] -2.842171e-14
由reprex 包(v2.0.1)于 2022-09-02 創建
評估的函式sol$root
為零,給出或采用浮點精度。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/504643.html