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

在R语言中使用optimize/uniroot求解正态分布方程的X值

求解正态分布CDF方程的正确方法

你的代码失败的核心原因是:定义的函数f返回的是逻辑值(TRUE/FALSE),而uniroot和optimize都需要输入返回数值的函数——uniroot要找函数零点(需区间两端函数值符号相反),optimize要找函数极值,逻辑值无法满足这些要求。

下面提供三种正确的求解方式:

方法一:直接用反函数qnorm(最简便)

因为正态分布的累积分布函数pnorm是严格单调递增的,存在反函数qnorm。原方程可变形为:
pnorm(x) = y + pnorm(0)
直接代入反函数即可得到解:

y <- 0.07925971
x <- qnorm(y + pnorm(0))
x  # 输出约为0.2

# 验证结果
pnorm(x) - pnorm(0) == y  # 返回TRUE

方法二:用uniroot找零点

构造差值函数(将等式转化为求零点问题):

g <- function(x, y = 0.07925971) {
  pnorm(x) - pnorm(0) - y
}

# 在区间[-4,4]内找零点
result <- uniroot(g, interval = c(-4, 4))
result$root  # 输出约为0.2

# 验证
g(result$root)  # 输出接近0

方法三:用optimize找残差平方最小值

通过最小化残差平方的方式求解,适合更复杂的非线性方程:

h <- function(x, y = 0.07925971) {
  (pnorm(x) - pnorm(0) - y)^2
}

# 在区间[-4,4]内找最小值点
opt_result <- optimize(h, interval = c(-4, 4))
opt_result$minimum  # 输出约为0.2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:15:07