-package org.simantics.spreadsheet.graph;\r
-\r
-import java.io.Serializable;\r
-\r
-import org.simantics.databoard.binding.mutable.Variant;\r
-import org.simantics.spreadsheet.graph.formula.FormulaError2;\r
-\r
-public class SpreadsheetMatrix implements Serializable {\r
-\r
- private static final long serialVersionUID = 5729700370527844640L;\r
- \r
- private int w;\r
- private int h;\r
- public Object[] values;\r
- \r
- public SpreadsheetMatrix(int w, int h) {\r
- this.w = w;\r
- this.h = h;\r
- this.values = new Object[w*h];\r
- }\r
- \r
- public Object get(int row, int column) {\r
- return values[w*row+column];\r
- }\r
- \r
- public void set(int row, int column, Object value) {\r
- values[w*row+column] = value;\r
- }\r
-\r
- public int getWidth() {\r
- return w;\r
- }\r
-\r
- public int getHeight() {\r
- return h;\r
- }\r
- \r
- public double sum() {\r
- double result = 0;\r
- for(int i=0;i<values.length;i++) {\r
- Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);\r
- if(n != null) result += n.doubleValue();\r
- }\r
- return result;\r
- }\r
- \r
- public Object sumWithFormulaError(){\r
- Double result = 0.0;\r
- for(int i = 0; i < values.length; i++){\r
- Object obj = values[i];\r
- if(obj != null){\r
- FormulaError2 error = FormulaError2.forObject(obj);\r
- if(error!=null) return error.getString();\r
- \r
- Number n = SpreadsheetGraphUtils.asValidNumber(obj);\r
- if(n != null) result += n.doubleValue();\r
- }\r
- }\r
- return result;\r
- }\r
-\r
- public double average() {\r
- double result = 0;\r
- double count = 0;\r
- for(int i=0;i<values.length;i++) {\r
- Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);\r
- if(n != null) {\r
- result += n.doubleValue();\r
- count++;\r
- }\r
- }\r
- if(count == 0) return result;\r
- return result / count;\r
- }\r
- \r
- public double countOfActualDoubleValues(){\r
- double count = 0.0;\r
- for(int i = 0; i < values.length; i++){\r
- Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);\r
- if(n!=null) count++;\r
- }\r
- return count;\r
- }\r
- \r
- public Object productWithFormulaError(){\r
- Double result = 1.0;\r
- boolean atLeastOne = false;\r
- for(int i = 0; i < values.length; i++){\r
- Object obj = values[i];\r
- if(obj != null){\r
- FormulaError2 error = FormulaError2.forObject(obj);\r
- if(error!=null) return error.getString();\r
- \r
- Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);\r
- if(n != null) {\r
- double dval = n.doubleValue();\r
- if(dval<=0) return FormulaError2.NUM.getString();\r
- result = result*dval;\r
- atLeastOne = true;\r
- }\r
- }\r
- }\r
- if(atLeastOne) return result;\r
- else return 0.0;\r
- }\r
- \r
- public SpreadsheetMatrix pow(Object exponent_) {\r
- if(exponent_ instanceof SpreadsheetMatrix) {\r
- SpreadsheetMatrix exponent = (SpreadsheetMatrix)exponent_;\r
- SpreadsheetMatrix result = new SpreadsheetMatrix(exponent.w, h);\r
- for(int i=0;i<h;i++) {\r
- for(int j=0;j<exponent.w;j++) {\r
- result.set(i,j, Math.pow(SpreadsheetGraphUtils.asNumber(get(i, 0)),\r
- SpreadsheetGraphUtils.asNumber(exponent.get(0, j))));\r
- }\r
- }\r
- return result;\r
- } else {\r
- double n = SpreadsheetGraphUtils.asNumber(exponent_);\r
- SpreadsheetMatrix result = new SpreadsheetMatrix(w, h);\r
- for(int i=0;i<result.values.length;i++) {\r
- result.values[i] = Math.pow(SpreadsheetGraphUtils.asNumber(values[i]), n);\r
- }\r
- return result;\r
- }\r
- }\r
- \r
- \r
+package org.simantics.spreadsheet.graph;
+
+import java.io.Serializable;
+
+import org.simantics.databoard.binding.mutable.Variant;
+import org.simantics.spreadsheet.graph.formula.FormulaError2;
+
+public class SpreadsheetMatrix implements Serializable {
+
+ private static final long serialVersionUID = 5729700370527844640L;
+
+ private int w;
+ private int h;
+ public Object[] values;
+
+ public SpreadsheetMatrix(int w, int h) {
+ this.w = w;
+ this.h = h;
+ this.values = new Object[w*h];
+ }
+
+ public Object get(int row, int column) {
+ return values[w*row+column];
+ }
+
+ public void set(int row, int column, Object value) {
+ values[w*row+column] = value;
+ }
+
+ public int getWidth() {
+ return w;
+ }
+
+ public int getHeight() {
+ return h;
+ }
+
+ public double sum() {
+ double result = 0;
+ for(int i=0;i<values.length;i++) {
+ Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);
+ if(n != null) result += n.doubleValue();
+ }
+ return result;
+ }
+
+ public Object sumWithFormulaError(){
+ Double result = 0.0;
+ for(int i = 0; i < values.length; i++){
+ Object obj = values[i];
+ if(obj != null){
+ FormulaError2 error = FormulaError2.forObject(obj);
+ if(error!=null) return error.getString();
+
+ Number n = SpreadsheetGraphUtils.asValidNumber(obj);
+ if(n != null) result += n.doubleValue();
+ }
+ }
+ return result;
+ }
+
+ public double average() {
+ double result = 0;
+ double count = 0;
+ for(int i=0;i<values.length;i++) {
+ Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);
+ if(n != null) {
+ result += n.doubleValue();
+ count++;
+ }
+ }
+ if(count == 0) return result;
+ return result / count;
+ }
+
+ public double countOfActualDoubleValues(){
+ double count = 0.0;
+ for(int i = 0; i < values.length; i++){
+ Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);
+ if(n!=null) count++;
+ }
+ return count;
+ }
+
+ public Object productWithFormulaError(){
+ Double result = 1.0;
+ boolean atLeastOne = false;
+ for(int i = 0; i < values.length; i++){
+ Object obj = values[i];
+ if(obj != null){
+ FormulaError2 error = FormulaError2.forObject(obj);
+ if(error!=null) return error.getString();
+
+ Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);
+ if(n != null) {
+ double dval = n.doubleValue();
+ if(dval<=0) return FormulaError2.NUM.getString();
+ result = result*dval;
+ atLeastOne = true;
+ }
+ }
+ }
+ if(atLeastOne) return result;
+ else return 0.0;
+ }
+
+ public SpreadsheetMatrix pow(Object exponent_) {
+ if(exponent_ instanceof SpreadsheetMatrix) {
+ SpreadsheetMatrix exponent = (SpreadsheetMatrix)exponent_;
+ SpreadsheetMatrix result = new SpreadsheetMatrix(exponent.w, h);
+ for(int i=0;i<h;i++) {
+ for(int j=0;j<exponent.w;j++) {
+ result.set(i,j, Math.pow(SpreadsheetGraphUtils.asNumber(get(i, 0)),
+ SpreadsheetGraphUtils.asNumber(exponent.get(0, j))));
+ }
+ }
+ return result;
+ } else {
+ double n = SpreadsheetGraphUtils.asNumber(exponent_);
+ SpreadsheetMatrix result = new SpreadsheetMatrix(w, h);
+ for(int i=0;i<result.values.length;i++) {
+ result.values[i] = Math.pow(SpreadsheetGraphUtils.asNumber(values[i]), n);
+ }
+ return result;
+ }
+ }
+
+
}
\ No newline at end of file