// 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)); }
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); }
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)); }
public Func <ComplexDouble> Calc(ComplexDouble a, ComplexDouble b, ComplexDouble c) { var f = (_func ?? (_func = _strToFunc(StrFunc))); return(z => f(a, b, c, z)); }
public static Func <ComplexDouble> Fa2c(int h, Fabcz fa1c, ComplexDouble a, ComplexDouble c) { return(Fa2c(Fa2czSet[h].Data.Data, fa1c, a, c)); }