如何获得随机数来测试数学方程?

时间:2017-04-29 22:12:48

标签: java math random

我对这个等式有疑问:E * cotangent((q * E)/(k * t)) = nkT/q

我正在寻找E的价值观,以实现平等 知道: q k 是常数, t n 是变量。 为此我尝试了这段代码,但显然失败了:

public class Equation {
    public static double q = 1.6E-19;
    public static double k = 1.38E-23;

    //double y = E * 1/Math.tan(E*q/k*t);
    //DecimalFormat df = new DecimalFormat("#.#####");
    public static double[] nktq = new double[]{0.02857,0.02674,0.03118,0.02829,0.02976,0.02898,0.03001,0.02953,0.032};
    public static double[] t = new double[]{80,100,150,200,250,280,300,320,350};
    public static double[] n = new double[]{4.14,3.1,2.41,1.64,1.38,1.20,1.16,1.07,1.06};
    private static DecimalFormat df2 = new DecimalFormat(".##");

    public static double genE(){
       double start = 0;
       double end = 30;
       double random = new Random().nextDouble();
       // DecimalFormat df = new DecimalFormat("#.##");
       // df.setRoundingMode(RoundingMode.FLOOR);
        double E = start + (random * (end - start));

        //double E = new Double(df.format(result));
        System.out.println(df2.format(E));
    return E;
    }



    public static void main(String[] args) {
        //double y = E * 1/Math.tan(E*q/k*t);
        //DecimalFormat df = new DecimalFormat("#.#####")
        double E = 0;
        while ( Math.round(E *  1/Math.tan((q * E)/(k * t[0]))*100000)!= nktq[0]){
             genE();
        }
    } 
}

感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

您为每个值创建一个新的Random实例。那是错的。

以下是我建议您尝试的内容:

public class Equation {
    private Random random;

    public Equation() { this(null); }

    public Equation(Long seed) {
        this.random = (seed == null) ? new Random() : new Random(seed.longValue());
    }

    public double nextConst() { return this.random.nextDouble(); }

    public double nextConst(double start, double end) {
        return start + (end-start)*this.random.nextDouble();
    }

    // Add the rest of your stuff here.
}