Пример #1
0
  /**
   * return a matrix
   *
   * @param operands[0] = number of rows
   * @param operands[1] = number of columns
   */
  public OperandToken evaluate(Token[] operands) {

    // at least one operand
    if (getNArgIn(operands) < 1) throwMathLibException("ones: number of arguments <1 ");

    // number of arguments
    int n = getNArgIn(operands);

    // set up dimension array
    int[] dim = new int[n];

    // only DoubleNumberTokens accepted
    // each token is one dimension
    for (int i = 0; i < n; i++) {
      if (!(operands[i] instanceof DoubleNumberToken))
        throwMathLibException("ones: arguments must be numbers");

      // get requested dimension
      dim[i] = (int) ((DoubleNumberToken) operands[i]).getValueRe();

      if (dim[i] < 0) throwMathLibException("ones: dimension <0");
    }

    // special case for rand(k)  -> rand(k,k)
    if (dim.length == 1) {
      int d = dim[0];
      dim = new int[] {d, d};
    }

    // ceate array of correct size with dimensions "dim"
    DoubleNumberToken num = new DoubleNumberToken(dim, null, null);

    // create "1" value for all values of num
    for (int i = 0; i < num.getNumberOfElements(); i++) {
      num.setValue(i, 1, 0);
    }

    return num;
  } // end eval