0

我有一个死亡风险计算,需要确定自然对数和 exp 衰减。下面详细介绍该方法。我很想知道为什么计算 exp 等的方法不是静态的,如果存在计算不正确的风险,我是否将单个 Log(或 Exp)对象用于多个参数。那就是我可以使用单个 Log 实例来计算 Log(2.3)和 Log(567)吗?

public Double getROD(Integer score) {

        Double beta0 = new Double(-7.7631);
        Double beta1 = new Double(0.0737);
        Double beta2 = new Double(0.9971);

        Log log = new Log();
        Exp exp = new Exp();

        Double logit = beta0 + (beta1 * score) + (beta2 * log.value(new Double(score + 1)));
        Double mortality = exp.value(logit) / (1 + exp.value(logit));

        return mortality;
    }

我尝试了以下方法:

Log log = new Log();

Double arg1 = log.value(new Double(12.3));
Double arg2 = log.value(new Double(29.12));

System.out.println(arg1.toString() + " : " + arg2.toString());

这导致

2.509599262378372 : 3.3714252233284854

但是,关于这是所有用途的预期行为仍然存在问题。

4

2 回答 2

3

,ExpLog类不存储状态。他们的value方法不是静态的原因是为了实现UnivariateFunction接口。所以,是的,您可以安全地重用这些对象。

接口的优点之一UnivariateFunction是您可以编写一个接受此类对象的函数,并且用户可以通过传入适当的函数对象来参数化您的函数。这个概念被称为高阶函数(如果你像我一样来自FP阵营)或策略模式(如果你来自OOP阵营)。

于 2014-07-09T02:27:36.357 回答
1

如果您只是想计算一个值的 log 和 exp,通常最好使用 FastMath,它为此和其他基本数学函数提供静态方法(类似于 Math,但提供纯 java 实现并且其中一些更快)。

于 2014-10-16T21:19:17.597 回答