在c#中求一个复数的所有n个根
本文关键字:个根 一个 | 更新日期: 2023-09-27 18:15:39
考虑一个一般复数:
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);
我怎样才能找到这个方法。我真的需要自己实现它吗?
我怎样才能找到这个方法。
你不能,它不是内置于框架。
我真的需要自己实现它吗?
是的。
对不起,如果这是一个小翻转,我不是故意的,但我怀疑你已经知道这将是答案。
也就是说,没有什么神奇的:
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
。