7

我正在尝试用 Java 编写一个程序来计算 Ricker 小波的公式:

在此处输入图像描述

但结果与真实结果不符。

这就是我正在使用的:

private static double rickerWavelet(double t, double f){

   double p = (Math.pow(Math.PI, 2))*(Math.pow(f, 2))*(Math.pow(t, 2));

   double lnRicker = 1 - (2 * p) * Math.exp(-p);

   return lnRicker;
}

我是否错误地使用了数学函数?

4

3 回答 3

11

为了匹配公式,

double lnRicker = 1 - (2 * p) * Math.exp(-p);

需要是

double lnRicker = (1 - (2 * p)) * Math.exp(-p);

由于*具有比 更高的运算符优先级,因此在您的表达式中,与-的乘法将首先完成,这不是您想要的。(2 * p)Math.exp(-p)

于 2013-10-17T12:16:09.373 回答
3

我只想补充一点,对于任何 variable 或 constant ,Math.pow(x, 2)可以更简单(并且可能更准确和更有效地)写成...x * xx

于 2013-10-17T12:18:29.660 回答
2

如果您了解 BODMAS 方法,请查看您的执行方程式:

你应该做: (1-(2*p))* Math.exp(-p);

1-2*p我刚刚通过在.周围插入圆括号来改变你的等式

于 2013-10-17T12:17:16.467 回答