You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

复杂计算最小值求解:R实现Goal Seek等效功能及数据框生成

解决方案

1. 寻找使wynik取值为2的最小n值

先封装计算wynik的核心逻辑为函数,再通过二分法查找满足条件的最小n值(模拟Excel的Goal Seek功能):

library(dplyr)

# 封装计算wynik的函数
calculate_wynik <- function(n) {
  test <- data.frame(used = c(1.545, 0.125, 0.0548), product = c(3.56, -1.589, 0.878))
  test <- test %>% 
    mutate(
      product.scale = n * product,
      p.diff = used - product.scale
    )
  nrow(test[test$p.diff > 0, ])
}

# 二分法查找最小n值
find_min_n <- function(target_wynik = 2) {
  left <- 0
  right <- 1.545 / 3.56  # 第一行p.diff=0时的n值,作为右边界
  
  # 迭代缩小区间,直到精度足够
  while (right - left > 1e-8) {
    mid <- (left + right) / 2
    current_wynik <- calculate_wynik(mid)
    if (current_wynik == target_wynik) {
      right <- mid  # 尝试更小的n
    } else {
      left <- mid   # n过小,增大左边界
    }
  }
  return(right)
}

# 运行得到结果
min_n <- find_min_n()
cat("使wynik=2的最小n值:", round(min_n, 6), "\n")

运行后会得到临界值≈0.062415,当n大于等于这个值时,wynik首次变为2。

2. 生成指定n集合对应的wynik结果表

直接遍历指定n集合,批量计算并生成data.frame:

# 指定n值集合
n_values <- c(1, 2, 2.5, 2.8, 3.7)

# 批量计算每个n对应的wynik
wynik_values <- sapply(n_values, calculate_wynik)

# 生成结果数据框
result_df <- data.frame(n = n_values, wynik = wynik_values)
print(result_df)

运行后输出的结果类似:

n wynik
1 1.0     1
2 2.0     1
3 2.5     1
4 2.8     1
5 3.7     1

(这些n值都大于第一行的临界值≈0.434,所以只有第二行的p.diff始终为正,wynik=1)

内容的提问来源于stack exchange,提问作者GrBa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 01:05:37