Ejemplo n.º 1
0
        public NeldorMid(object evaluatorInstance, int nMer)
        {
            ContractHlp.Assert(evaluatorInstance != null, "Error 9451610. Исполнительный файл для подсчета отклонений не найден.");

            _evaluatorInstance = evaluatorInstance;
            _nMer = nMer;
        }
Ejemplo n.º 2
0
        public double[,] Evaluator(string expression, double start, double finish, double step)
        {
            var    n    = 0;
            string code = string.Empty;

            code += "using System;";
            code += "namespace CSEvaluator";
            code += "{ public class Evaluate";
            code += "  { public double GetResult(int number){ return(" + expression.Replace("x", "EvaluatorXY[0,number]") + "); }";

            code += "       private void Reader()";
            code += "       {";

            for (double i = start; i >= finish; i = i - step)
            {
                n++;
                code += "               EvaluatorXY[0," + (n - 1) + "] = " + Math.Round(i, 4).ToString(CultureInfo.InvariantCulture) + ";";
            }
            code += "       }";

            code += "       private double Pow(double arg, double leaf)";
            code += "       {";
            code += "           if (arg > 0) return Math.Pow(arg, leaf);";
            code += "           double result = 0;";
            code += "           int floatlenght = 0;";
            code += "           double tmp = arg;";
            code += "           while ((int)tmp % 10 == 0  && tmp!=0)";
            code += "           {";
            code += "               tmp *= 10;";
            code += "               floatlenght++;";
            code += "           }";
            code += "           bool negatArg = false;";

            code += "           if ((leaf ) % 2 != 0 )";
            code += "           {";
            code += "               arg = arg * -1;";
            code += "              negatArg = true;";
            code += "           }";
            code += "           result = Math.Pow(arg, leaf);";
            code += "           if (negatArg == true) result = result * -1;";
            code += "           return result;";
            code += "       }";
            code += "       private double Cos(double arg) { return Math.Cos(arg); }";
            code += "       private double Sin(double arg) { return Math.Sin(arg); }";
            code += "       private double Tan(double arg) { return Math.Tan(arg); }";
            code += "       private double EXP(double arg) { return Math.Exp(arg); }";
            code += "       private double Log(double leaf, double arg) { return Math.Log(arg, leaf); }";

            code += "       double[,] EvaluatorXY = new double[2," + n + "];";

            code += "       public void GetEvaluatorXY()";
            code += "       {";
            code += "       Reader();";
            code += "           for (int i = 0;i<=" + (n - 1) + ";i++)";
            code += "               EvaluatorXY[1,i] = Math.Round(GetResult(i),4);";
            code += "       }";
            code += "       public double[,] GetResultEvaluatorXY()";
            code += "       {";
            code += "           GetEvaluatorXY();";
            code += "           return EvaluatorXY;";
            code += "       }";
            code += "  }";
            code += "}";

            var ccParams = new CompilerParameters
            {
                //CompilerOptions = "/t:library",
                GenerateInMemory        = true,
                IncludeDebugInformation = true,
                GenerateExecutable      = false,
                OutputAssembly          = "Evaluate.dll",
                CompilerOptions         = "/optimize",
                TempFiles = new TempFileCollection(".", false)
            };

            ccParams.ReferencedAssemblies.Add("system.dll");
            CodeDomProvider compileProvider = CodeDomProvider.CreateProvider("CSharp");

            var results   = compileProvider.CompileAssemblyFromSource(ccParams, code);
            var assembly  = results.CompiledAssembly;
            var evaluator = assembly.CreateInstance("CSEvaluator.Evaluate");

            ContractHlp.Assert(evaluator != null, "Erorr 16420203. Не удалось собрать компилятор.");

            var result = (double[, ])evaluator.GetType().InvokeMember("GetResultEvaluatorXY", BindingFlags.InvokeMethod, null, evaluator, new object[] { }, null, null, null);

            return(result);
        }