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

求解公式c=(a^x)/(a^x+b^x)中最小化逐行误差的未知指数x

求解方法

你这个公式可以直接做代数变形得到x的解析解,根本不需要用迭代优化,逐行算就行,结果能让所有行的预测误差为0,自然满足误差总和最小的要求。
原公式:
c = (a^x) / (a^x + b^x)
变形过程:

  • 两边乘分母展开:c*a^x + c*b^x = a^x
  • 把含a^x的项移到同一边合并:c*b^x = a^x*(1-c)
  • 两边取自然对数去掉指数:log(c) + x*log(b) = log(1-c) + x*log(a)
  • 把含x的项单独整理到一侧,最终得到:x = (log(c) - log(1 - c)) / (log(a) - log(b))

代码实现

# 示例数据,加随机种子方便复现结果
set.seed(123)
dat <- data.frame(a = runif(5, 1, 100), b = runif(5, 10, 20), c = runif(5, 0, 1))

# 直接逐行计算x
dat$x <- with(dat, (log(c) - log(1 - c)) / (log(a) - log(b)))

# 回算验证误差
dat$c_pred <- with(dat, (a^x)/(a^x + b^x))
dat$residual <- dat$c_pred - dat$c

运行后查看residual列,所有值都为0(受计算机浮点计算精度影响可能出现1e-16级别的极微小误差,属于正常情况),已经达到理论最小误差。

边界情况处理

如果你的数据里存在c=0或者c=1的样本,直接代入公式会算出无穷大,这种情况先把c做极小截断即可,比如把0替换成1e-6,1替换成1-1e-6再计算。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:24:16