Why power function give a complex number result?

20 次查看(过去 30 天)
I have tried to create Rosin-Rammler function for own use with my code
function q = rosinrammler(x, x50, n)
q = 1 - exp((-x/x50)^n);
However, when I input the value for example x = 2e-9, x50 = 100e-9 and n = 0.1 the output show me the complex number such as
q = rosinrammler(2e-9, 100e-9, 0.1)
q =
-0.861067915307539 - 0.394670349292600i
Where I think the result shoud be real number such as 0.491476239432908. This results I mannually calculate from 1 - exp(-0.02^0.1). I have found that the complex numer is generated when I try to power (-x/x50)^n.
So if anyone can help me, please I am very appreciate
Thank you
Bundit

采纳的回答

Walter Roberson
Walter Roberson 2019-11-1
1 - exp(-0.02^0.1)
implies taking 0.02^0.1 and taking the negative of that, and taking exp() of the result; this would be the same as 1/exp(0.02^01)
However, that is not what is coded. What is coded is exp((-x/x50)^n) which is exp((-positive/positive)^n) which is exp((negative number)^n) . negative number raised to a non-integer power is going to give a complex result
Be careful with where you put the negative signs.

更多回答(1 个)

Ildeberto de los Santos Ruiz
The "problem" appears when you raise the base (-x / x50) to power n.
In IEEE floating-point computations:
a ^ n = exp(n * log(a))
In your example, the base a is negative, hence the logarithm is a complex number.

类别

Help CenterFile Exchange 中查找有关 MATLAB 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by