예제 #1
0
        //Метод возведения в степень
        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);
        }
예제 #2
0
        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})");
        }
예제 #3
0
        //Метод обработки функций и присваивания значения переменной
        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);
        }