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

自定义连续变量CDF函数输出值翻倍问题求助

解决自定义CDF函数输出值翻倍的问题

你的问题出在积分拆分后的计算逻辑错误——对拆分后的两个积分段都错误套用了1 - 归一化积分的公式再相加,导致结果比预期值大了1,所以输出范围从正常的0-1变成了1-2。

错误原因分析

原本的正确逻辑是:你要计算的是1 - Φ(t)(其中Φ(t)是标准正态分布的CDF),而Φ(t)等于归一化后的(-∞到t)积分总和。当拆分积分后,应该先把两段积分加起来,再代入公式计算,而不是分别对每段积分做1 - 归一化后再相加。

举个简单的数值例子:假设(-∞到35)的归一化积分是A,(35到t)的归一化积分是B,正确结果是1 - (A+B),但你之前的代码计算的是(1-A)+(1-B) = 2 - (A+B),直接比正确值多了1,这就是输出偏移1的根源。

修正后的代码

import numpy as np
from scipy.integrate import quad

def cdf_t(d):
    t = ((np.exp(-(0.08*((d*1.2)-60))-1))-1.1)/0.5
    def integrand(x):
        return np.exp((-x**2)/2)
    norm_factor = 1 / np.sqrt(2 * np.pi)
    
    if d < 10:
        total_integral = quad(integrand, -np.inf, t)[0]
    else:
        # 拆分积分避免quad处理超大区间的精度问题
        integral_left = quad(integrand, -np.inf, 35)[0]
        integral_right = quad(integrand, 35, t)[0]
        total_integral = integral_left + integral_right
    
    return 1 - norm_factor * total_integral

额外说明

  • 代码把归一化因子1/√(2π)提取出来,避免重复计算,逻辑更清晰。
  • 拆分积分的思路是对的,quad处理极端大的区间时可能出现精度问题,拆分后能提升计算稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:35:32