求正态分布标准差σ

2021-02-21 15:39:25 +08:00
 fuxinya

已知某正态分布μ=550, 落在 518~560 区间的累计概率为 80%, 求σ

有没有大神给出求解公式?

或使用Java求解

2427 次点击
所在节点    数学
12 条回复
Ultraman
2021-02-21 15:45:23 +08:00
Ultraman
2021-02-21 15:46:39 +08:00
@Ultraman #1 对不起,,请忽略我😶
fuxinya
2021-02-21 15:59:08 +08:00
@Ultraman 查表也可 只要误差不大就行
ipwx
2021-02-21 17:12:54 +08:00
给楼主一个思路:用 Erf 写出你的方程,然后用牛顿迭代法解。
ipwx
2021-02-21 17:13:29 +08:00


这个是要解的方程。在你的问题里,mu=550,l=518,r=560,p=0.8
ipwx
2021-02-21 17:15:02 +08:00
顺便多说一嘴:如果是单边或者对称的就容易多了。因为单边的话,把 erf 函数放到一边,然后直接用 erf 反函数就行了。C 语言和 numpy 都有 erf 和 erf 反函数的数值实现的。。。可惜你是双边不对称
fuxinya
2021-02-21 17:17:16 +08:00
@ipwx 感谢解答, 刚查资料也看见了 erf 反函数 这就去试试
lcdtyph
2021-02-21 17:27:21 +08:00
能调 mathematica 的话可以直接直接

G[x_] := CDF[NormalDistribution[550, sigma], x];
FindRoot[G[560] - G[518] == 0.8 , {sigma, 1}]

解出来 sigma=11.7233
ipwx
2021-02-21 17:34:30 +08:00
@lcdtyph Mathematica 果然牛逼,自动帮搞定各种求根。
lcdtyph
2021-02-21 17:38:51 +08:00
@ipwx
是的,符号运算太强大了
同样功能的代码我用 matlab 写起来这个别扭
fuxinya
2021-02-21 17:54:21 +08:00
@lcdtyph 666
SharkU
2021-02-21 21:56:40 +08:00
自己写的 Matlab 代码
% main script
tolerance = 1e-8;
residual = Inf;
sigma = 15;
h = 1e-6;
while residual > tolerance
der = (cdfeq(sigma+h) - cdfeq(sigma-h))/h;
sigma = sigma -cdfeq(sigma)/der
residual = abs(cdfeq(sigma));
end

% cdfeq function
function output = cdfeq( sigma)
% 方程: f(sigma) - 0.8 = 0
output = normcdf(560, 550, sigma) - normcdf(518, 550, sigma) - 0.8;
end

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/754848

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX