为什么log和exp matlab函数会产生相反的结果?

Sam*_*NLP 2 matlab logarithm exponential

为什么a是不一样bmatlab

a = signal;
b = exp(log(signal));
Run Code Online (Sandbox Code Playgroud)

如果我绘制a和b,信号不一样,有什么帮助吗?

hor*_*ler 5

负数的对数-xy = log(x)+pi*1i.因此,当您应用指数函数时,y您将留下零虚部(或看起来像零的东西).试试这个例子:

format long
x = -1;
y = exp(log(x))
abserr = abs(x-y)
Run Code Online (Sandbox Code Playgroud)

在这里阅读有关复数对数的更多信息.

当然,由于浮点也可能存在不准确性.如果您的signal值接近1/eps(或-1/eps),则绝对误差可能尤为显着.尝试

x = 1/eps;
y = exp(log(x));
abserr = abs(y-x)  
relerr = abs(y-x)/abs(x)
Run Code Online (Sandbox Code Playgroud)

返回

abserr =

  11.500000000000000


relerr =

     2.553512956637860e-15
Run Code Online (Sandbox Code Playgroud)

请注意,相对误差很小.在浮点计算中,相对误差通常是我们希望控制的.