问题描述
在数学中,指数和对数函数可以从实数到复数来概括。指数函数使用欧拉公式进行了概括,对数被概括为complex logarithm。后者允许输入为复数或负实数。
感谢R
中的exponential and logarithmic function可以容纳复杂的输入。这两个函数都可以采用复杂的输入,并产生该输入的适当指数或对数。但是,如果输入负数作为数字值(与复数相对),则log
函数不会为此输入产生正确的(复数)输出。这是一个例子。
#Define negative real value as numeric/complex object
minusfour.numeric <- -4
minusfour.complex <- complex(real = -4,imaginary = 0)
#Apply the log function to these inputs
log(minusfour.complex)
[1] 1.386294+3.141593i
log(minusfour.numeric)
[1] NaN
Warning message:
In log(minusfour.numeric) : NaNs produced
理想情况下,当您提供负数值作为输入时,如果log
函数给出了正确的(复杂的)输出,那就太好了。不幸的是,它似乎没有被编程为执行此操作。
我的问题:是否在R
中编程了另一个对数函数来容纳负数字输入(即为这些输入提供适当的复数输出)?
解决方法
基于Hugh的最高评价,看来最简单的方法就是将函数编写为基础基础log
函数的变体。我决定使用一个版本,如果输出中没有虚部,那么它将在计算结束时转换回实数。这是代码:
Log <- function(x,base = exp(1)) {
LOG <- base::log(as.complex(x),base = base)
if (all(Im(LOG) == 0)) { LOG <- Re(LOG) }
LOG }
此代码适用于正数或负数,当您为其提供非负数时,会提供数字输出。
#Apply the Log function to +4 and -4
Log(-4)
[1] 1.386294+3.141593i
Log(4)
[1] 1.386294