//Метод возведения в степень private Complex Power(string s) { Complex element; string el = ""; foreach (char ch in s) { if (ch == '^') { break; } el += ch; } if (Char.IsLetter(el[0])) { element = arg; } else { element = Complex.ToComplex(el); } if (s.Length - el.Length > 0) { element = Complex.Pow(element, Element(s.Substring(el.Length + 1)).Re); } return(element); }
public void OneRootInDegree(double rootx, double rooty, double degree) { Complex root = new Complex(rootx, rooty); ComplexFunc f = (Complex z) => Complex.Pow(z - root, degree); Complex val = Muller(f, new Complex(0, 1), new Complex(3, 3), new Complex(9, 5), 1e-16); Assert.IsTrue((root - val).Abs < 1e-2, message: $"Expected {root}, but was {val} (distance = {(root - val).Abs})"); }
//Метод обработки функций и присваивания значения переменной private Complex Func(string s) { Complex element = 0.0; string el = ""; foreach (char ch in s) { if (!Char.IsLetter(ch) || ch == 'i' /*|| ch!='x'*/) { break; } el += ch; } if (!IsFunc(el)) { element = arg; } else { if (el == "I") { element = Complex.I; } else if (el == "pi") { element = Math.PI; } else { var val = Complex.ToComplex(s.Substring(el.Length)); if (el == "sin") { element = Complex.Sin(val); } if (el == "cos") { element = Complex.Cos(val); } if (el == "exp") { element = Complex.Exp(val); } if (el == "ln") { element = Complex.Ln(val); } if (el == "abs") { element = val.Abs; } if (el == "sqrt") { element = Complex.Sqrt(val); } if (el == "sqr") { element = Complex.Pow(val, 2); } if (el == "cube") { element = Complex.Pow(val, 3); } if (el == "sh") { element = Complex.Sh(val); } if (el == "ch") { element = Complex.Ch(val); } if (el == "Re") { element = val.Re; } if (el == "Im") { element = val.Im; } } } return(element); }