Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 阵列的标准正态分布_Java_Arrays_Loops_Math_Logic - Fatal编程技术网

Java 阵列的标准正态分布

Java 阵列的标准正态分布,java,arrays,loops,math,logic,Java,Arrays,Loops,Math,Logic,对于正态标准分布,我需要用-2.0到2.0的x值填充一个数组。我在数学逻辑方面遇到了问题,无法让它填充数组。我也把方程分解成两部分。我当前的算法是在一个for循环中实例化一个数组,该循环有20个周期,每个周期从等式中的-2.0开始运行当前值。然后将最终值添加到第二个数组中并重新运行循环 import java.lang.Math; public class Distribution { public static void main (String[] args) {

对于正态标准分布,我需要用-2.0到2.0的x值填充一个数组。我在数学逻辑方面遇到了问题,无法让它填充数组。我也把方程分解成两部分。我当前的算法是在一个for循环中实例化一个数组,该循环有20个周期,每个周期从等式中的-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;

        }


}

}
import java.lang.Math;
公共阶级分配{
公共静态void main(字符串[]args)
{
双平均值,ω,π,e,分布1,分布2,x,y;
平均值=0.0;
ω=1.0;
pi=3.14159;
e=2.71828;
双[]xarray;
对于(int i=0;i<20,i++)
{   
xarray[1]=-2.0;
分布1=-((xarray[2.0]-平均值)*(xarray[2.0]-平均值))/(2.0*ω);
分配2[20]=1.0/(sqrt(2*pi))*e*distribution1;
xarray[1]=xarray[1]+0.2;
}
}
}

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

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);
}
final double C=1/Math.sqrt(2*Math.PI);
最终双启动=-2.0;
最终双端=2.0;

double[]xarray=新的双精度[20];//另外,在隐含索引的地方使用常量,e*distribution1与
Math.power(e,distribution1)
。。。这里有相当多的错误可供选择。至少阅读Ok。我现在可以输出它: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]@user3112609我发布的代码填充了整个数组。如果你对0有问题,那么它就在你这边的其他地方。至于绘画部分,我不可能用一句话来概括;我会试试谷歌。这不是一个使用drawLine(0,0,5,Y)drawLine(0,0,10,Y)drawLine(0,0,15,Y)直到x=100的问题吗?
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);
}