带数组的标准正态分布
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);但是当我这样做时,它只会打印内存地址。如何输出实际值? @user3112609System.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 个总输出?以上是关于带数组的标准正态分布的主要内容,如果未能解决你的问题,请参考以下文章