带数组的标准正态分布

Posted

技术标签:

【中文标题】带数组的标准正态分布【英文标题】:Standard Normal Distribution With Arrays 【发布时间】:2014-01-05 17:37:18 【问题描述】:

对于正态标准分布,我需要用 -2.0 到 2.0 的 x 值填充一个数组。我无法使用数学逻辑来填充数组。我也把方程分解成两部分。我当前的算法是在具有 20 个循环的 for 循环中实例化一个数组,每个循环运行等式中从 -2.0 开始的当前值。然后将最终值添加到第二个数组中并重新运行循环。

import java.lang.Math;
public class Distribution 

    public static void main (String[] args)
    

        double mean, omega, pi, e, distribution1, distribution2 , x, y;


        mean = 0.0;
        omega = 1.0;
        pi = 3.14159;
        e = 2.71828;

        double[] xarray;

        for (int i = 0; i < 20, i++)
           
            xarray[1] = -2.0;
        distribution1 = -((xarray[2.0]-mean)*(xarray[2.0]-mean))/(2.0*omega);

        distribution2[20] = 1.0 /((sqrt(2*pi)))*e*distribution1;

        xarray[1] = xarray[1] + 0.2;

        





【问题讨论】:

另外,使用隐含索引的常量,并且 e*distribution1 与 Math.power(e, distribution1) 不同...这里有很多错误可供选择。 至少阅读java tutorials for arrays 【参考方案1】:

编辑:我现在意识到您只想用连续的 standard normal distribution 值填充数组(而不是从正态分布中采样)。这更简单:

final double C = 1 / Math.sqrt(2 * Math.PI);

final double start = -2.0;
final double end = 2.0;

double[] xarray = new double[20];  // <--    

for (int i = 0; i < xarray.length; i++) 

    double x = start + i * (end - start)/xarray.length;

    xarray[i] = C * Math.exp(-0.5 * x * x);

以上注意事项仍然适用。另请注意,标准正态分布没有任何参数(即均值和方差),而一般的normal distribution 有。概括上面的代码相当简单。


(原帖)

我会使用Box-Muller transform 来代替(它将均匀分布的变量映射到正态分布的变量)。实现起来相当容易:

double[] xarray = new double[20];  // <--

for (int i = 0; i < xarray.length; i++) 

    double u1 = Math.random();
    double u2 = Math.random();

    double r = Math.sqrt(-2 * Math.log(u1));

    xarray[i] = r * Math.cos(2 * Math.PI * u2);

注意事项:

我们需要初始化数组:new double[20]。 我们使用xarray[i] 来引用数组中的第i 个元素(从0 开始)。

【讨论】:

好的。我现在有这个输出它: System.out.print(xarray1);但是当我这样做时,它只会打印内存地址。如何输出实际值? @user3112609 System.out.println(Arrays.toString(xarray))(使用java.util.Arrays)。 好的,知道为什么我在第一次输出后得到一堆 0 值吗?看起来像这样:另外,我怎么能把它输出为使用线条的java图形绘图? [0.05399096651318806, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] @user3112609 我发布的代码填充了整个数组。如果您对 0 有疑问,那么它就在您的其他地方。至于绘图部分,我不可能用一条评论来概括;我会试试谷歌。 使用 drawLine(0,0,5,Y) drawLine(0,0,10,Y) drawLine(0,0,15,Y) 到 x 不是问题吗= 100 表示 20 个总输出?

以上是关于带数组的标准正态分布的主要内容,如果未能解决你的问题,请参考以下文章

如何创建用于生成 hsl 颜色数组的标准化分布?

java基础面试题大全带答案,帮你解决95%以上的问题!

数据的标准化和正态化变换

30分钟带您了解分布式锁

20分钟带你熟悉Redisson分布式锁设计方案

参数|统计量|抽样分布|估计标准误差|标准误差|标准误|标准差|二项分布|泊松分布|中心极限定理|样本方差|