This is almost certainly occurring because MATLAB is doing the math by first converting to log space so that it can just multiply the exponent by the log of the argument and then convert it back. This is similar to how computers and calculators commonly do complicated arithmetic like multiplication (which becomes addition in log space) by first converting to log space, because adding logs is typically much easier, faster, and usually the only option available to the computer in the first place. The following is likely how MATLAB/the computer goes through the calculation:
(-1)^(1/3) = exp(exp( log(log(-1)) - log(3) ))
log(-1) = pi*i
log(pi*i) = 1.1447 + 1.5708i
log(3) = 1.0986
log(log(-1)) - log(3) = (1.1447 + 1.5708i) - (1.0986) = 0.0461 + 1.5708i
exp(0.0461 + 1.5708i) = exp(0.0461)*exp(1.5708i) = 1.0472i
exp(1.0472i) = 0.5 + 0.866i
Since the log of a negative number (namely -1 in this case) is going to be complex, this is what (almost certainly) makes the output of the operation also complex and why there won't be a setting to change it to default to real. Having said that, it is fairly easy to get the real answer of a cube root by doing something like
assuming your inputs are real. This takes advantage of what we already know to be true, namely that
and should, in theory, work for Ruye's issue, though I am no expert on symbolic forms and am almost certainly using a later MATLAB release (R2016a).
At this point, it should be worth mentioning that MATLAB already has a function called
which works for any root and will return a real result or bust. If you look at the code for nthroot(), you will see that it is essentially doing the above sign*abs method, but with fancy checking to see that the root will be real first.
(I know this is an old question, but I wanted to compile previous answers and give a plausible explanation for why it might give a complex number)