コード例 #1
0
        private async Task RefreshPlot(Math.Expression func, double from, double to)
        {
            _ctx.Points.Clear();
            await Task.Run(() =>
            {
                for (var i = from; i <= to; i++)
                {
                    func.addArguments(new Math.Argument($"x = {i}"));
                    _ctx.Points.Add(new DataPoint(i, func.calculate()));
                    func.removeAllArguments();
                }
            });

            FuncPlot.InvalidatePlot();
        }
コード例 #2
0
 /**
  * Constructor for function definition in natural math language,
  * for instance providing on string "f(x,y) = sin(x) + cos(x)"
  * is enough to define function "f" with parameters "x and y"
  * and function body "sin(x) + cos(x)".
  *
  * @param functionDefinitionString      Function definition in the form
  *                                      of one String, ie "f(x,y) = sin(x) + cos(x)"
  * @param elements                      Optional elements list (variadic - comma separated)
  *                                      of types: Argument, Constant, Function
  *
  * @see    PrimitiveElement
  *
  */
 public Function(String functionDefinitionString, params PrimitiveElement[] elements)
     : base(Function.TYPE_ID)
 {
     parametersNumber = 0;
     if (mXparser.regexMatch(functionDefinitionString, ParserSymbol.functionDefStrRegExp)) {
         HeadEqBody headEqBody = new HeadEqBody(functionDefinitionString);
         this.functionName = headEqBody.headTokens[0].tokenStr;
         functionExpression = new Expression(headEqBody.bodyStr, elements);
         functionExpression.setDescription(headEqBody.headStr);
         if (headEqBody.headTokens.Count > 1)
         {
             Token t;
             for (int i = 1; i < headEqBody.headTokens.Count; i++)
             {
                 t = headEqBody.headTokens[i];
                 if (t.tokenTypeId != ParserSymbol.TYPE_ID)
                     functionExpression.addArguments(new Argument(t.tokenStr));
             }
         }
         parametersNumber = functionExpression.getArgumentsNumber() - countRecursiveArguments();
         description = "";
         addFunctions(this);
     }
     else {
         functionExpression = new Expression();
         functionExpression.setDescription(functionDefinitionString);
         String errorMessage = ""; errorMessage = errorMessage + "\n [" + functionDefinitionString + "] " + "--> pattern not mathes: f(x1,...,xn) = ... reg exp: " + ParserSymbol.functionDefStrRegExp;
         functionExpression.setSyntaxStatus(Expression.SYNTAX_ERROR_OR_STATUS_UNKNOWN, errorMessage);
     }
 }
コード例 #3
0
 /**
  * Constructor - creates function from function name,
  * function expression string and argument names.
  *
  * @param      functionName              the function name
  * @param      functionExpressionString  the function expression string
  * @param      argumentsNames            the arguments names (variadic parameters)
  *                                       comma separated list
  *
  * @see        Expression
  */
 public Function(String functionName
     ,String  functionExpressionString
     ,params String[] argumentsNames)
     : base(Function.TYPE_ID)
 {
     if (mXparser.regexMatch(functionName, ParserSymbol.nameOnlyTokenRegExp)) {
         this.functionName = functionName;
         functionExpression = new Expression(functionExpressionString);
         functionExpression.setDescription(functionName);
         foreach (String argName in argumentsNames)
             functionExpression.addArguments(new Argument(argName));
         parametersNumber = argumentsNames.Length - countRecursiveArguments();
         description = "";
         addFunctions(this);
     }
     else {
         parametersNumber = 0;
         description = "";
         functionExpression = new Expression("");
         functionExpression.setSyntaxStatus(SYNTAX_ERROR_OR_STATUS_UNKNOWN, "[" + functionName + "]" + "Invalid function name, pattern not matches: " + ParserSymbol.nameTokenRegExp);
     }
 }