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

已知均值和众数,求解对数正态分布CDF及相关问题

对数正态分布:已知均值和众数求P(X<均值)的解决方案

问题梳理

已知对数正态分布的均值为4744、众数为3777,需要计算随机变量X小于均值的概率,但当前无法通过已知量推导出标准差,且用SymPy编写的求解代码出现卡顿。

核心公式回顾

若随机变量( X \sim \text{LogN}(\mu, \sigma^2) ),则( Y = \ln X \sim N(\mu, \sigma^2) ),对应的关键公式:

  • 众数:mode(X) = e^(μ - σ²)
  • 均值:E(X) = e^(μ + σ²/2)

推导步骤

设( \mu - \sigma^2 = \ln(\text{mode}) ),( \mu + \sigma^2/2 = \ln(\text{mean}) ),令( a = \mu ),( b = \sigma^2 ),得到线性方程组:

  1. ( a - b = \ln(3777) )
  2. ( a + b/2 = \ln(4744) )

用消元法求解:

  • 用方程2减去方程1:( (a + b/2) - (a - b) = \ln(4744) - \ln(3777) )
  • 化简得:( 3b/2 = \ln(4744/3777) ),解得( b = (2/3) \times \ln(4744/3777) )
  • 将( b )代入方程1,可得( a = \ln(3777) + b )

得到( \mu )和( \sigma )后,计算( P(X < \text{mean}) )等价于( P(\ln X < \ln(\text{mean})) = \Phi\left( \frac{\ln(\text{mean}) - \mu}{\sigma} \right) ),其中( \Phi )是标准正态分布的CDF。

原代码问题分析

你编写的SymPy代码存在两处关键错误:

  1. 公式逻辑错误:错误构造了mode - np.e**(mean - x)的表达式,完全偏离了对数正态分布均值和众数的关系
  2. 符号混用:同时使用SymPy符号变量和numpy的np.e,导致求解逻辑混乱,进而出现卡顿

修正后的代码示例

import sympy as sp
from scipy.stats import norm

# 已知参数
mode = 3777
mean = 4744

# 定义符号变量
mu, sigma_sq = sp.symbols('mu sigma_sq')

# 根据对数正态分布公式列方程
eq1 = sp.Eq(mu - sigma_sq, sp.ln(mode))
eq2 = sp.Eq(mu + sigma_sq / 2, sp.ln(mean))

# 解方程组
solution = sp.solve((eq1, eq2), (mu, sigma_sq))
mu_val = float(solution[mu])
sigma_val = float(sp.sqrt(solution[sigma_sq]))

# 计算目标概率
ln_mean = sp.ln(mean)
z_score = (ln_mean - mu_val) / sigma_val
probability = norm.cdf(z_score)

print(f"μ = {mu_val:.4f}, σ = {sigma_val:.4f}")
print(f"P(X < {mean}) = {probability:.4f}")

结果说明

运行代码后会得到( \mu )、( \sigma )的具体数值,以及X小于均值的概率。核心思路是将对数正态分布的问题转换为正态分布的CDF计算,关键是正确推导均值和众数对应的线性方程组,而非错误构造表达式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:35:34