考虑一个通用的复数:
System.Numerics.Complex z = new System.Numerics.Complex(0,1); // z = i
现在考虑z
的第n个根提取操作。大家都知道,遇到z^n = w
(z
和w
复数,n
为正非空整数)等问题时,等式返回n
不同的复数全部位于复数圆上,其半径等于z
(|z|
)的模块。
在System.Numerics
命名空间中,我找不到这样的方法。我显然需要这样的方法:
Complex[] NRoot(Complex number);
如何找到此方法。我真的需要自己实施吗?
答案 0 :(得分:1)
我怎样才能找到这种方法。
你不能,它没有内置到框架中。
我真的需要自己实施吗?
是
对不起,如果这有点翻转,我不是故意的,但我怀疑你已经知道这将是答案。
那就是说,没有魔力:
public static class ComplexExtensions {
public static Complex[] NthRoot(this Complex complex, int n) {
Contract.Requires(n > 0);
var phase = complex.Phase;
var magnitude = complex.Magnitude;
var nthRootOfMagnitude = Math.Pow(magnitude, 1.0 / n);
return
Enumerable.Range(0, n)
.Select(k => Complex.FromPolarCoordinates(
nthRootOfMagnitude,
phase / n + k * 2 * Math.PI / n)
)
.ToArray();
}
}
大部分工作已卸载到Framework。我相信他们已正确实施Complex.Phase
,Complex.Magnitude
((Complex complex) => Math.Sqrt(complex.Real * complex.Real + complex.Imaginary * complex.Imaginary)
为坏,坏,坏)和Math.Pow
正确实施。