我有一个公式(称为 Chritoffersen 测试),如下所示: ∑(1-C(i) )(log(a * b * D(i)^(b-1))-1))
其中 a = ∑(1 - C(i)/∑D(i)^b 和 b 是 double 值求和是 i 从 1 到 n ( +ve 整数) 和 C & D 是等长向量。
我想找到 0 < b < infinity 的第一个表达式的最大值
这就是我到目前为止的方式。我找不到日志,或者如何表达 b 范围(如果我说 b 是双精度,那么那些表达式和约束不起作用,如果我说 b 是实数,那么那些乘法不起作用)
val lp = new LinearProgram()
import lp._
val d = DenseVector(0.1, 0.23, 0.45)
val c = DenseVector(2.3, 4.5, 0.45)
val b= Real()
import breeze.numerics._
val one = Integer()
val apowerb = (one - (c(0)+ c(1) + c(2))) * pow(Real(pow(d(0), b)) + Real(pow(d(1), b)) + Real(pow(d(2), b)), -1)
val dpowerbminusone = Real(pow(d(0), b-1)) + Real(pow(d(1), b-1))+ Real(pow(d(2), b-1))
val objective : lp.Expression = (1 - (c(0)+c(1)+c(2)))(apowerb.*(b).*(dpowerbminusone) -1)
val constraintb = ((objective)
subjectTo ( b < Double.PositiveInfinity )
)
是否可以轻而易举地表达这一点以找到优化的解决方案?