/// <summary> /// Calculates both Square-Roots of a complex number /// </summary> /// <param name="number"></param> /// <returns></returns> public ComplexD[] Sqrt(ComplexD number) { ComplexD res0 = ComplexD.CreateRadial((double)System.Math.Sqrt(number.Norm), number.Argument / 2.0f); ComplexD res1 = ComplexD.CreateRadial((double)System.Math.Sqrt(number.Norm), number.Argument / 2.0f + (double)Constant.Pi); return new ComplexD[2] { res0, res1 }; }
/// <summary> /// Exponentiates a complex by another /// </summary> /// <returns></returns> public static ComplexD Pow(ComplexD number, ComplexD exponent) { double r = number.Norm; double phi = number.Argument; double a = exponent.Real; double b = exponent.Imag; return ComplexD.CreateRadial((double)System.Math.Exp(System.Math.Log(r) * a - b * phi), a * phi + b * (double)System.Math.Log(r)); }
/// <summary> /// Calculates the n-th Root of a Complex number and returns n Solutions /// </summary> /// <param name="number"></param> /// <param name="order">n</param> /// <returns></returns> public ComplexD[] Root(ComplexD number, int order) { ComplexD[] values = new ComplexD[order]; double phi = number.Argument / 2.0f; double dphi = (double)Constant.PiTimesTwo / (double)order; double r = (double)System.Math.Pow(number.Norm, 1.0f / order); for (int i = 1; i < order; i++) { values[i] = ComplexD.CreateRadial(r, phi + dphi * i); } return values; }