我正在尝试用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;
}
我错误地使用数学函数吗?
答案 0 :(得分:11)
要匹配公式,
double lnRicker = 1 - (2 * p) * Math.exp(-p);
需要
double lnRicker = (1 - (2 * p)) * Math.exp(-p);
由于*
的运算符优先级高于-
,因此在您的表达式中,(2 * p)
与Math.exp(-p)
的乘法将首先完成,这不是您想要的。< / p>
答案 1 :(得分:3)
我只想补充一点,Math.pow(x, 2)
可以更简单地编写(并且可能更准确,更有效)x * x
...用于任何变量或常量x
。
答案 2 :(得分:2)
如果您了解BODMAS方法,请查看您执行的等式:
你应该这样做:(1-(2*p))* Math.exp(-p);
我刚刚在1-2*p
附近插入圆括号来改变你的等式。