在C#中查找复数的所有第n个根

时间:2013-05-28 17:10:32

标签: c# .net numeric

考虑一个通用的复数:

System.Numerics.Complex z = new System.Numerics.Complex(0,1); // z = i

现在考虑z的第n个根提取操作。大家都知道,遇到z^n = wzw复数,n为正非空整数)等问题时,等式返回n不同的复数全部位于复数圆上,其半径等于z|z|)的模块。

System.Numerics命名空间中,我找不到这样的方法。我显然需要这样的方法:

Complex[] NRoot(Complex number);

如何找到此方法。我真的需要自己实施吗?

1 个答案:

答案 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.PhaseComplex.Magnitude(Complex complex) => Math.Sqrt(complex.Real * complex.Real + complex.Imaginary * complex.Imaginary)为坏,坏,坏)和Math.Pow正确实施。