给出表达式的对数,给出变量的对数

时间:2014-03-21 09:33:58

标签: math optimization logarithm expression-evaluation natural-logarithm

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

 S = log(x1y1 + x2y2 + x3y3 ...) 

仅使用以下值:

lxi = log(xi)
lyi = log(yi)

计算每个 lx i ly 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);
}

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

1 个答案:

答案 0 :(得分:1)

直接的方法是执行两次取幂:

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

log_add函数使用稍微不同的方法来获得与 one 相同的结果:

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)