如何在java中评估e^(-x)^2?

Posted

技术标签:

【中文标题】如何在java中评估e^(-x)^2?【英文标题】:How to evaluate e^(-x)^2 in java?如何在java中评估e^(-x)^2? 【发布时间】:2017-04-06 19:42:02 【问题描述】:

在 Allen B. Downey 的“Think Java”中,我被困在问题 7.6 上。该问题要求在不使用阶乘或指数函数的情况下评估 e^(-x)^2。我得到的代码适用于 x = 2,但不适用于其他数字。

public static double gauss2(double x, double n) 
    double i = 2;
    double count = n;
    double num = 1;

    while (i <= n)
        num = ((x*x)/(i - 1))*num;
        i = i + 1;  
    

    if (n == 1) 
        return 1;
    
    else if (n%2 == 0) 
        return num*(-1) + gauss2(x,n-1);
    
    else 
        return num + gauss2(x, n-1);
    

【问题讨论】:

“不工作”是什么意思? 首先要注意的是(-x)^2 == x*x 【参考方案1】:

The Maclaurin series for ex 很有用。它去:

ex = Σn = 0 to ∞ (xn/n!)

所以,获得近似结果的一些简单代码是:

public final class Exponential 
    private static final int ITERATIONS = 32;

    public static final double exp(final double x) 
        double power = 1.0;
        double factorial = 1.0;
        double result = 1.0;

        for (int n = 1; n <= ITERATIONS; n++) 
            power *= x;
            factorial *= n;
            result += power/factorial;
        

        return result;
    

    public static final void main(String[] args) 
        System.out.println("Testing Math.exp against Exponential.exp for a few inputs");
        for (double exponent = -5.0; exponent <= 5.0; exponent += 0.1) 
            System.out.printf("e^%f = %f = %f\n", exponent, Math.exp(exponent), exp(exponent));
        
    

然后您可以使用exp((-x)*(-x))

【讨论】:

以上是关于如何在java中评估e^(-x)^2?的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一个函数中传递/评估函数参数以用于 ggplot?

如何在chrome headless + puppeteer评估()中使用xpath?

如何在2.7.x中使用Mockito.doReturn

如何从评估器(由 glEvalPoint1 创建)获取顶点信息(X,Y)

如何在python 2.7中使用“e”(欧拉数)和幂运算

模型的性能评估