1 package org.simantics.spreadsheet;
3 import java.io.Serializable;
5 import org.simantics.spreadsheet.solver.formula.FormulaError2;
7 public class SpreadsheetMatrix implements Serializable {
9 private static final long serialVersionUID = 5729700370527844640L;
13 public Object[] values;
15 public SpreadsheetMatrix(int w, int h) {
18 this.values = new Object[w*h];
21 public Object get(int row, int column) {
22 return values[w*row+column];
25 public void set(int row, int column, Object value) {
26 values[w*row+column] = value;
29 public int getWidth() {
33 public int getHeight() {
39 for(int i=0;i<values.length;i++) {
40 Number n = Spreadsheets.asValidNumber(values[i]);
41 if(n != null) result += n.doubleValue();
46 public Object sumWithFormulaError(){
48 for(int i = 0; i < values.length; i++){
49 Object obj = values[i];
51 FormulaError2 error = FormulaError2.forObject(obj);
52 if(error!=null) return error.getString();
54 Number n = Spreadsheets.asValidNumber(obj);
55 if(n != null) result += n.doubleValue();
61 public double average() {
64 for(int i=0;i<values.length;i++) {
65 Number n = Spreadsheets.asValidNumber(values[i]);
67 result += n.doubleValue();
71 if(count == 0) return result;
72 return result / count;
75 public double countOfActualDoubleValues(){
77 for(int i = 0; i < values.length; i++){
78 Number n = Spreadsheets.asValidNumber(values[i]);
84 public Object productWithFormulaError(){
86 boolean atLeastOne = false;
87 for(int i = 0; i < values.length; i++){
88 Object obj = values[i];
90 FormulaError2 error = FormulaError2.forObject(obj);
91 if(error!=null) return error.getString();
93 Number n = Spreadsheets.asValidNumber(values[i]);
95 double dval = n.doubleValue();
96 if(dval<=0) return FormulaError2.NUM.getString();
102 if(atLeastOne) return result;
106 public SpreadsheetMatrix pow(Object exponent_) {
107 if(exponent_ instanceof SpreadsheetMatrix) {
108 SpreadsheetMatrix exponent = (SpreadsheetMatrix)exponent_;
109 SpreadsheetMatrix result = new SpreadsheetMatrix(exponent.w, h);
110 for(int i=0;i<h;i++) {
111 for(int j=0;j<exponent.w;j++) {
112 result.set(i,j, Math.pow(Spreadsheets.asNumber(get(i, 0)),
113 Spreadsheets.asNumber(exponent.get(0, j))));
118 double n = Spreadsheets.asNumber(exponent_);
119 SpreadsheetMatrix result = new SpreadsheetMatrix(w, h);
120 for(int i=0;i<result.values.length;i++) {
121 result.values[i] = Math.pow(Spreadsheets.asNumber(values[i]), n);