问题描述:在matlab中,对负数开立方根,不出意外你将得到虚数。
例如 − 27 3 \sqrt[3]{-27} 3−27,我们知道其实数解是-3,但在matlab中的计算结果如下:
问题原因:matlab中的立方根运算是在复数域进行的,有3个,而matlab取的是辐角最小的那个。
解决方案:最小辐角是 π 3 \frac{\pi}{3} 3π,相邻两立方根辐角之差为 2 π 3 \frac{2\pi}{3} 32π,因此这三个根中,有一个实数根、两个复数根。
所以在matlab中对负数进行立方根运算时,可以按如下方式处理:
x = -27
root = solveCubr(x)function root = solveCubr(x)if x >= 0root = x^(1/3)elseroot = cos(pi)*(abs(x)^(1/3))end
end
参考链接:
- https://www.zhihu.com/question/23107259/answer/2132830703