Esempio n. 1
0
 //
 public static Func <ComplexDouble> Fa2c(HyperEquation h, Fabcz fa1c, ComplexDouble a, ComplexDouble c)
 {
     return(z => (
                h[2].Calc(a, 0d, c, z) +
                h[0].Calc(a, 0d, c, z) * fa1c(a + h[0].AbcShift.A, 0d, c + h[0].AbcShift.C, z)
                ) / -h[1].Calc(a, 1d, c, z));
 }
Esempio n. 2
0
        private static Fabcz _strToFunc(string s)
        {
            switch (s)
            {
            case "a": return((a, b, c, z) => a);

            case "b": return((a, b, c, z) => b);

            case "c": return((a, b, c, z) => c);

            case "z": return((a, b, c, z) => z);

            case "i": return((a, b, c, z) => ComplexDouble.I);
                //case "e": return (a, b, c, z) => ComplexDouble.E;
                //case "p": return (a, b, c, z) => ComplexDouble.Pi;
            }
            if (Expression.IsNum(s))
            {
                var d = double.Parse(s, NumberStyles.None, NumberFormatInfo.InvariantInfo);
                return((a, b, c, z) => d);
            }
            //if(Expression.IsWord(s)) return (a, b, c, z) => dfltN;
            IEnumerable <KeyValuePair <char, string> > sum = Expression.SplitSum(s);
            Fabcz addf = (a, b, c, z) => 0d;

            //if(sum == null) return addf;
            foreach (var pairS in sum)
            {
                IEnumerable <KeyValuePair <char, string> > prod = Expression.SplitProduct(pairS.Value);
                Fabcz af = addf, mulf = (a, b, c, z) => 1d;
                //if(prod == null) return mulf;
                foreach (var pairP in prod)
                {
                    Fabcz mf = mulf, stf = _strToFunc(Expression.TrimBrackets(pairP.Value));
                    if (pairP.Key == '*')
                    {
                        mulf = (a, b, c, z) => mf(a, b, c, z) * stf(a, b, c, z);
                    }
                    else
                    {
                        mulf = (a, b, c, z) => mf(a, b, c, z) / stf(a, b, c, z);
                    }
                }
                if (pairS.Key == '+')
                {
                    addf = (a, b, c, z) => af(a, b, c, z) + mulf(a, b, c, z);
                }
                else
                {
                    addf = (a, b, c, z) => af(a, b, c, z) - mulf(a, b, c, z);
                }
            }
            return(addf);
        }
Esempio n. 3
0
 public ComplexDouble Calc(ComplexDouble a, ComplexDouble b, ComplexDouble c, ComplexDouble z /* = new ComplexDouble()*/)
 {
     return((_func ?? (_func = _strToFunc(StrFunc)))
                (a /* + AbcShift.A*/, b /* + AbcShift.B*/, c /* + AbcShift.C*/, z));
 }
Esempio n. 4
0
        public Func <ComplexDouble> Calc(ComplexDouble a, ComplexDouble b, ComplexDouble c)
        {
            var f = (_func ?? (_func = _strToFunc(StrFunc)));

            return(z => f(a, b, c, z));
        }
Esempio n. 5
0
 public static Func <ComplexDouble> Fa2c(int h, Fabcz fa1c, ComplexDouble a, ComplexDouble c)
 {
     return(Fa2c(Fa2czSet[h].Data.Data, fa1c, a, c));
 }