/** * 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