Thread: [Mathlib-commitlog] mathlib/Source/MathLib/Tokens DataToken.java, 1.16, 1.17 NumberToken.java, 1.98
Status: Beta
Brought to you by:
st_mueller
|
From: Stefan M. <st_...@us...> - 2007-01-09 18:58:57
|
Update of /cvsroot/mathlib/mathlib/Source/MathLib/Tokens In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv29655/Source/MathLib/Tokens Modified Files: DataToken.java NumberToken.java Log Message: better support for ND-NumberToken Index: NumberToken.java =================================================================== RCS file: /cvsroot/mathlib/mathlib/Source/MathLib/Tokens/NumberToken.java,v retrieving revision 1.98 retrieving revision 1.99 diff -C2 -d -r1.98 -r1.99 *** NumberToken.java 8 Jan 2007 19:09:20 -0000 1.98 --- NumberToken.java 9 Jan 2007 18:58:51 -0000 1.99 *************** *** 529,535 **** { int n = yx2n(y,x); ! return values[n]; } /** --- 529,544 ---- { int n = yx2n(y,x); ! return getValueComplex(n); } + /** + * + * @param n + * @return + */ + public double[] getValueComplex(int n) + { + return values[n]; + } /** *************** *** 784,798 **** NumberToken nArg = ((NumberToken)arg); - int argSizeX = nArg.getSizeX(); - int argSizeY = nArg.getSizeY(); - - NumberToken result = new NumberToken(); // Check dimensions of matrices ! if((sizeX == argSizeX) && (sizeY == argSizeY)) { ! // Add (n*m) + (n*m) ErrorLogger.debugLine("NumberToken: add (n*m) + (n*m)"); ! result.setSize(sizeY, sizeX); for(int n = 0; n < noElem; n++) --- 793,804 ---- NumberToken nArg = ((NumberToken)arg); // Check dimensions of matrices ! if(checkEqualDimensions(sizeA, nArg.sizeA)) { ! // Add (n*m) + (n*m) or ! // same dimensions (n,m,r)==(n,m,r) ErrorLogger.debugLine("NumberToken: add (n*m) + (n*m)"); ! NumberToken result = new NumberToken(sizeA, null, null); for(int n = 0; n < noElem; n++) *************** *** 806,814 **** return result; } ! else if((sizeX==1) && (sizeY==1)) { // 1 + [3,4,5] ErrorLogger.debugLine("NumberToken: add (1*1) + (n*m)"); ! result.setSize(argSizeY, argSizeX); for(int n = 0; n < nArg.getNumberOfElements(); n++) --- 812,820 ---- return result; } ! else if(isScalar()) { // 1 + [3,4,5] ErrorLogger.debugLine("NumberToken: add (1*1) + (n*m)"); ! NumberToken result = new NumberToken(nArg.sizeA, null, null); for(int n = 0; n < nArg.getNumberOfElements(); n++) *************** *** 822,830 **** return result; } ! else if((argSizeX==1) && (argSizeY==1)) { // [3,4,5] +1 ErrorLogger.debugLine("NumberToken: add (n,m) + (1,1)"); ! result.setSize(sizeY, sizeX); for(int n = 0; n < noElem; n++) --- 828,836 ---- return result; } ! else if(nArg.isScalar()) { // [3,4,5] +1 ErrorLogger.debugLine("NumberToken: add (n,m) + (1,1)"); ! NumberToken result = new NumberToken(sizeA, null, null); for(int n = 0; n < noElem; n++) *************** *** 855,869 **** NumberToken nArg = ((NumberToken)arg); - int argSizeX = nArg.getSizeX(); - int argSizeY = nArg.getSizeY(); - - NumberToken result = new NumberToken(); //Check dimensions of matrices ! if((sizeX == argSizeX) && (sizeY == argSizeY)) { ! // Sub (n*m) - (n*m) ErrorLogger.debugLine("NumberToken: sub (n*m) - (n*m)"); ! result.setSize(argSizeY, argSizeX); for(int n = 0; n < noElem; n++) --- 861,872 ---- NumberToken nArg = ((NumberToken)arg); //Check dimensions of matrices ! if( checkEqualDimensions(this.sizeA, nArg.sizeA) ) { ! // Sub (n*m) - (n*m) or ! // multidimensional (n*m*r) - (n*m*r) ErrorLogger.debugLine("NumberToken: sub (n*m) - (n*m)"); ! NumberToken result = new NumberToken(sizeA, null, null); for(int n = 0; n < noElem; n++) *************** *** 876,884 **** return result; } ! else if((sizeX == 1) && (sizeY == 1)) { // 1 - [2,3,4] ErrorLogger.debugLine("NumberToken: sub (1*1) - (n*m)"); ! result.setSize(argSizeY, argSizeX); for(int n = 0; n < nArg.getNumberOfElements(); n++) --- 879,887 ---- return result; } ! else if( isScalar() ) { // 1 - [2,3,4] ErrorLogger.debugLine("NumberToken: sub (1*1) - (n*m)"); ! NumberToken result = new NumberToken(nArg.sizeA, null, null); for(int n = 0; n < nArg.getNumberOfElements(); n++) *************** *** 891,899 **** return result; } ! else if((argSizeX == 1) && (argSizeY == 1)) { // [3,4,5] - 5 ErrorLogger.debugLine("NumberToken: sub (n*m) - (1*1)"); ! result.setSize(sizeY, sizeX); for(int n = 0; n < noElem; n++) --- 894,902 ---- return result; } ! else if( nArg.isScalar() ) { // [3,4,5] - 5 ErrorLogger.debugLine("NumberToken: sub (n*m) - (1*1)"); ! NumberToken result = new NumberToken(sizeA, null, null); for(int n = 0; n < noElem; n++) *************** *** 909,913 **** { // Matrices have unequal size: (n*m) != (o*p) ! ErrorLogger.debugLine("NumberToken: sub matrices of unequal size"); return null; } --- 912,916 ---- { // Matrices have unequal size: (n*m) != (o*p) ! Errors.throwMathLibException("NumberToken: sub matrices of unequal size"); return null; } *************** *** 924,927 **** --- 927,931 ---- // get operand data and size + NumberToken nArg = (NumberToken)arg; double[][] argValuesRe = ((NumberToken)arg).getValuesRe(); double[][] argValuesIm = ((NumberToken)arg).getValuesIm(); *************** *** 929,933 **** int argSizeY = ((NumberToken)arg).getSizeY(); ! if ((sizeX==1) && (sizeY==1)) { // e.g. 4.^[1,2,3;4,5,6] --- 933,937 ---- int argSizeY = ((NumberToken)arg).getSizeY(); ! if ( this.isScalar() ) { // e.g. 4.^[1,2,3;4,5,6] *************** *** 940,943 **** --- 944,948 ---- for (int x=0; x<argSizeX; x++) { + double re = Math.log(getValueAbs(0, 0)); double im = getValueArg(0, 0); *************** *** 955,959 **** return new NumberToken(results); } ! else if ((argSizeX==1) && (argSizeY==1)) { // e.g. [1,2,3;4,5,6].^2 --- 960,964 ---- return new NumberToken(results); } ! else if ( nArg.isScalar() ) { // e.g. [1,2,3;4,5,6].^2 *************** *** 981,985 **** return new NumberToken(results); } ! else if ((sizeX==argSizeX) && (sizeY==argSizeY)) { // e.g. [1,2,3;4,5,6].^[3,4,5;6,7,8] --- 986,990 ---- return new NumberToken(results); } ! else if ( checkEqualDimensions(this.sizeA, nArg.sizeA) ) { // e.g. [1,2,3;4,5,6].^[3,4,5;6,7,8] *************** *** 1025,1028 **** --- 1030,1034 ---- // get operand data and size + NumberToken nArg = (NumberToken)arg; double[][] argValuesRe = ((NumberToken)arg).getValuesRe(); double[][] argValuesIm = ((NumberToken)arg).getValuesIm(); *************** *** 1030,1034 **** int argSizeY = ((NumberToken)arg).getSizeY(); ! if ((sizeX==1) && (sizeY==1) && (argSizeX==1) && (argSizeY==1)) { // e.g. 4.^5 --- 1036,1040 ---- int argSizeY = ((NumberToken)arg).getSizeY(); ! if (this.isScalar() && (argSizeX==1) && (argSizeY==1)) { // e.g. 4.^5 *************** *** 1077,1080 **** --- 1083,1087 ---- Errors.throwMathLibException("NumberToken: multiply: no number"); + NumberToken nArg = (NumberToken)arg; NumberToken argValues = ((NumberToken)arg); int argSizeX = ((NumberToken)arg).getSizeX(); *************** *** 1082,1086 **** /* Check if arg is a scalar */ ! if((argSizeX == 1) && (argSizeY == 1)) { // Multiply (n*m) = (n*m) * scalar --- 1089,1093 ---- /* Check if arg is a scalar */ ! if( nArg.isScalar() ) { // Multiply (n*m) = (n*m) * scalar *************** *** 1104,1108 **** return new NumberToken(results); } ! else if((sizeX == 1) && (sizeY == 1)) { /* the NumberToken of this class is a scalar */ --- 1111,1115 ---- return new NumberToken(results); } ! else if( this.isScalar() ) { /* the NumberToken of this class is a scalar */ *************** *** 1114,1118 **** return arg.multiply(this); } ! else if (sizeX == argSizeY) { /* Multiply (n*o) = (n*m) * (m*o) */ --- 1121,1125 ---- return arg.multiply(this); } ! else if (sizeX == argSizeY && (sizeA.length==2)) { /* Multiply (n*o) = (n*m) * (m*o) */ *************** *** 1142,1146 **** { /* dimensions do not match */ ! ErrorLogger.debugLine("NumberToken: multiply: dimensions don't match"); return null; } --- 1149,1153 ---- { /* dimensions do not match */ ! Errors.throwMathLibException("NumberToken: multiply: dimensions don't match"); return null; } *************** *** 1172,1176 **** // Check if arg is a scalar ! if((argSizeX == 1) && (argSizeY == 1)) { // Divide (n*m) = (n*m) / scalar --- 1179,1183 ---- // Check if arg is a scalar ! if( nArg.isScalar() ) { // Divide (n*m) = (n*m) / scalar *************** *** 1191,1195 **** return result; } ! else if((sizeX == 1) && (sizeY == 1)) { // the NumberToken of this class is a scalar --- 1198,1202 ---- return result; } ! else if( this.isScalar() ) { // the NumberToken of this class is a scalar *************** *** 1209,1213 **** else { ! ErrorLogger.debugLine("NumberToken: divide: dimensions don't match"); return null; } --- 1216,1220 ---- else { ! Errors.throwMathLibException("NumberToken: divide: dimensions don't match"); return null; } *************** *** 1287,1344 **** NumberToken nArg = ((NumberToken)arg); - double[][] argValues = nArg.getValuesRe(); - double[][] argValuesImg = nArg.getValuesIm(); - int argSizeX = nArg.getSizeX(); - int argSizeY = nArg.getSizeY(); ! if ((sizeX == argSizeX) && (sizeY == argSizeY)) { // scalar multiplication (n*m) = (n*m) .* (n*m) ErrorLogger.debugLine("NumberToken: multiply (n*m) .* (n*m)"); ! double[][][] results = new double[sizeY][sizeX][2]; ! ! for (int yy=0; yy<sizeY; yy++) { ! for (int xx=0; xx<sizeX; xx++) ! { ! int n = yx2n(yy,xx); ! double[] argVal = nArg.getValueComplex(yy, xx); ! results[yy][xx] = multiply(values[n], argVal); ! } } ! return new NumberToken(results); } ! else if ((argSizeX==1) && (argSizeY==1)) { // scalar multiplication (n*m) .* (1*1) ErrorLogger.debugLine("NumberToken: multiply (n*m) .* (1*1)"); ! double[][][] results = new double[sizeY][sizeX][2]; ! ! for (int yy=0; yy<sizeY; yy++) { ! for (int xx=0; xx<sizeX; xx++) ! { ! int n = yx2n(yy,xx); ! double[] argVal = nArg.getValueComplex(0, 0); ! results[yy][xx] = multiply(values[n], argVal); ! } } ! return new NumberToken(results); } ! else if ((sizeX == 1) && (sizeY == 1)) { // scalar multiplication (1*1) .* (n*m) ErrorLogger.debugLine("NumberToken: multiply (1*1) .* (n*m)"); ! double[][][] results = new double[argSizeY][argSizeX][2]; ! for (int y=0; y<argSizeY; y++) { ! for (int x=0; x<argSizeX; x++) ! { ! double[] val = getValueComplex(0, 0); ! results[y][x] = multiply(val, nArg.getValueComplex(y,x)); ! } } ! return new NumberToken(results); } else --- 1294,1336 ---- NumberToken nArg = ((NumberToken)arg); ! if ( checkEqualDimensions(this.sizeA, nArg.sizeA) ) { // scalar multiplication (n*m) = (n*m) .* (n*m) ErrorLogger.debugLine("NumberToken: multiply (n*m) .* (n*m)"); ! NumberToken result = new NumberToken(sizeA, null, null); ! ! for (int n=0; n<noElem; n++) { ! double[] argVal = nArg.getValueComplex(n); ! result.setValueComplex(n, multiply(values[n], argVal) ); } ! return result; } ! else if ( nArg.isScalar() ) { // scalar multiplication (n*m) .* (1*1) ErrorLogger.debugLine("NumberToken: multiply (n*m) .* (1*1)"); ! NumberToken result = new NumberToken(sizeA, null, null); ! ! for (int n=0; n<noElem; n++) { ! double[] argVal = nArg.getValueComplex(0); ! result.setValueComplex(n, multiply(values[n], argVal) ); } ! return result; } ! else if ( this.isScalar() ) { // scalar multiplication (1*1) .* (n*m) ErrorLogger.debugLine("NumberToken: multiply (1*1) .* (n*m)"); ! NumberToken result = new NumberToken(nArg.sizeA, null, null); ! for (int n=0; n<nArg.noElem; n++) { ! double[] argVal = nArg.getValueComplex(n); ! result.setValueComplex(n, multiply(values[0], argVal) ); } ! return result; } else *************** *** 1385,1389 **** return new NumberToken(results); } ! else if ((argSizeX==1) && (argSizeY==1)) { // divide multiplication (n*m) ./ (1,1) --- 1377,1381 ---- return new NumberToken(results); } ! else if ( nArg.isScalar() ) { // divide multiplication (n*m) ./ (1,1) *************** *** 1402,1406 **** return new NumberToken(results); } ! else if ((sizeX==1) && (sizeY==1)) { // divide multiplication (n*m) ./ (1,1) --- 1394,1398 ---- return new NumberToken(results); } ! else if ( this.isScalar() ) { // divide multiplication (n*m) ./ (1,1) *************** *** 1437,1441 **** NumberToken nArg = ((NumberToken)arg); ! NumberToken num = new NumberToken(nArg.getReValues()); //return num.divide(new NumberToken(values)); --- 1429,1433 ---- NumberToken nArg = ((NumberToken)arg); ! NumberToken num = new NumberToken(nArg.getReValues()); //return num.divide(new NumberToken(values)); *************** *** 1453,1457 **** NumberToken nArg = ((NumberToken)arg); ! NumberToken num = new NumberToken(nArg.getReValues()); //return num.scalarDivide(new NumberToken(values)); --- 1445,1449 ---- NumberToken nArg = ((NumberToken)arg); ! NumberToken num = new NumberToken(nArg.getReValues()); //return num.scalarDivide(new NumberToken(values)); *************** *** 2149,2160 **** { // real numbers only ! for (int yy=0; yy<sizeY; yy++) ! { ! for (int xx=0; xx<sizeX; xx++) ! { ! int n = yx2n(yy,xx); ! results[yy][xx][REAL] = java.lang.Math.abs(values[n][REAL]); ! } ! } } else --- 2141,2151 ---- { // real numbers only ! NumberToken result = new NumberToken(sizeA, null, null); ! ! for(int n = 0; n < noElem; n++) ! { ! result.setValue(n, Math.abs(getValueRe(n)), 0 ); ! } ! return result; } else *************** *** 2231,2237 **** for(int n = 0; n < noElem; n++) { ! result.setValue(n, ! -getValueRe(n) , ! -getValueIm(n) ); } return result; --- 2222,2226 ---- for(int n = 0; n < noElem; n++) { ! result.setValue(n, -getValueRe(n), -getValueIm(n) ); } return result; *************** *** 2256,2260 **** double arg2 = ((NumberToken)arg).getValueRe(0); ! double result = java.lang.Math.max(values[0][REAL], arg2); return new NumberToken(result); } --- 2245,2249 ---- double arg2 = ((NumberToken)arg).getValueRe(0); ! double result = Math.max(values[0][REAL], arg2); return new NumberToken(result); } *************** *** 2268,2272 **** for(int n = 0; n < noElem; n++) { ! double amount = java.lang.Math.rint(getValueRe(n)); result.setValue(n, factorial(amount) , --- 2257,2261 ---- for(int n = 0; n < noElem; n++) { ! double amount = Math.rint(getValueRe(n)); result.setValue(n, factorial(amount) , *************** *** 2313,2323 **** public boolean isNull() { ! boolean result = true; ! for (int n=0; n<noElem && result; n++) { if( (getValueRe(n)!=0) || (getValueIm(n)!=0) ) ! result = false; } ! return result; } --- 2302,2312 ---- public boolean isNull() { ! ! for (int n=0; n<noElem; n++) { if( (getValueRe(n)!=0) || (getValueIm(n)!=0) ) ! return false; } ! return true; } *************** *** 2333,2340 **** public boolean isScalar() { ! if ((sizeX==1) && (sizeY==1)) ! return true; ! else ! return false; } --- 2322,2335 ---- public boolean isScalar() { ! ! for (int i=0; i<sizeA.length; i++) ! { ! // in case one entry in the size-array is unequal 1 it ! // is not a scalar any more ! if (sizeA[i]!=1) ! return false; ! } ! ! return true; } Index: DataToken.java =================================================================== RCS file: /cvsroot/mathlib/mathlib/Source/MathLib/Tokens/DataToken.java,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** DataToken.java 8 Jan 2007 16:20:44 -0000 1.16 --- DataToken.java 9 Jan 2007 18:58:51 -0000 1.17 *************** *** 64,67 **** --- 64,85 ---- } + + public boolean checkEqualDimensions(int[] size1, int[] size2) + { + + if ((size1==null) || (size2==null)) + return false; + + if (size1.length != size2.length) + return false; + + for (int i=0; i<size1.length; i++) + { + if (size1[i]!=size2[i]) + return false; + } + + return true; + } //abstract |