0

我必须以编程方式确定表达式的值:

S = log(x 1 y 1 + x 2 y 2 + x 3 y 3 ...)

仅使用以下值:

lx= 日志(x)
ly i = log(y i )

计算lx ily i中的每一个的反对数可能是不切实际的,也是不希望的......

有什么方法可以将这种评估分解为一个简单的总结?

编辑

我在某处看到了一个 C 函数,它以简单的求和方式进行计算:

double log_add(double lx, double ly)
{
   double temp,diff,z;

   if (lx<ly) {
      temp = lx; lx = ly; ly = temp;
   }
   diff = ly-lx;
   z = exp(diff);
   return lx+log(1.0+z);
}

为每对值添加返回值,这似乎给出了正确的答案。但我无法弄清楚它是如何以及为什么起作用的!

4

1 回答 1

1

直接的方法是执行两个幂运算:

ln(x+y) = ln(e ln(x) + e ln(y) )

log_add函数使用稍微不同的方法来获得相同的结果,只有一个

ln(x+y) = ln((x+y)x/x)
= ln((x+y)/x) + ln(x)
= ln(1 + y/x) + ln(x)
= ln (1 + e ln(y/x) ) + ln(x)
= ln(1 + e ln(y)-ln(x) ) + ln(x)

于 2014-03-23T22:19:53.113 回答