0

考虑一个通用复数:

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

现在考虑 的第 n 个根提取操作z。众所周知,当遇到诸如z^n = w(具有zw复数和n正非空整数)之类的问题时,方程返回n不同的复数,它们都位于半径等于z( |z|) 模的复圆上。

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

Complex[] NRoot(Complex number);

我怎样才能找到这个方法。我真的需要自己实现吗?

4

1 回答 1

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();
    }
}

大部分工作都转移到了框架上。我相信他们已经正确地(坏Complex.Phase,坏,坏)和正确地实施了。Complex.Magnitude(Complex complex) => Math.Sqrt(complex.Real * complex.Real + complex.Imaginary * complex.Imaginary)Math.Pow

于 2013-05-28T18:20:06.323 回答