1 package org.simantics.spreadsheet.graph;
\r
3 import java.io.Serializable;
\r
5 import org.simantics.databoard.binding.mutable.Variant;
\r
6 import org.simantics.spreadsheet.graph.formula.FormulaError2;
\r
8 public class SpreadsheetMatrix implements Serializable {
\r
10 private static final long serialVersionUID = 5729700370527844640L;
\r
14 public Object[] values;
\r
16 public SpreadsheetMatrix(int w, int h) {
\r
19 this.values = new Object[w*h];
\r
22 public Object get(int row, int column) {
\r
23 return values[w*row+column];
\r
26 public void set(int row, int column, Object value) {
\r
27 values[w*row+column] = value;
\r
30 public int getWidth() {
\r
34 public int getHeight() {
\r
38 public double sum() {
\r
40 for(int i=0;i<values.length;i++) {
\r
41 Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);
\r
42 if(n != null) result += n.doubleValue();
\r
47 public Object sumWithFormulaError(){
\r
48 Double result = 0.0;
\r
49 for(int i = 0; i < values.length; i++){
\r
50 Object obj = values[i];
\r
52 FormulaError2 error = FormulaError2.forObject(obj);
\r
53 if(error!=null) return error.getString();
\r
55 Number n = SpreadsheetGraphUtils.asValidNumber(obj);
\r
56 if(n != null) result += n.doubleValue();
\r
62 public double average() {
\r
65 for(int i=0;i<values.length;i++) {
\r
66 Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);
\r
68 result += n.doubleValue();
\r
72 if(count == 0) return result;
\r
73 return result / count;
\r
76 public double countOfActualDoubleValues(){
\r
78 for(int i = 0; i < values.length; i++){
\r
79 Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);
\r
80 if(n!=null) count++;
\r
85 public Object productWithFormulaError(){
\r
86 Double result = 1.0;
\r
87 boolean atLeastOne = false;
\r
88 for(int i = 0; i < values.length; i++){
\r
89 Object obj = values[i];
\r
91 FormulaError2 error = FormulaError2.forObject(obj);
\r
92 if(error!=null) return error.getString();
\r
94 Number n = SpreadsheetGraphUtils.asValidNumber(values[i]);
\r
96 double dval = n.doubleValue();
\r
97 if(dval<=0) return FormulaError2.NUM.getString();
\r
98 result = result*dval;
\r
103 if(atLeastOne) return result;
\r
107 public SpreadsheetMatrix pow(Object exponent_) {
\r
108 if(exponent_ instanceof SpreadsheetMatrix) {
\r
109 SpreadsheetMatrix exponent = (SpreadsheetMatrix)exponent_;
\r
110 SpreadsheetMatrix result = new SpreadsheetMatrix(exponent.w, h);
\r
111 for(int i=0;i<h;i++) {
\r
112 for(int j=0;j<exponent.w;j++) {
\r
113 result.set(i,j, Math.pow(SpreadsheetGraphUtils.asNumber(get(i, 0)),
\r
114 SpreadsheetGraphUtils.asNumber(exponent.get(0, j))));
\r
119 double n = SpreadsheetGraphUtils.asNumber(exponent_);
\r
120 SpreadsheetMatrix result = new SpreadsheetMatrix(w, h);
\r
121 for(int i=0;i<result.values.length;i++) {
\r
122 result.values[i] = Math.pow(SpreadsheetGraphUtils.asNumber(values[i]), n);
\r