00001 #ifndef __BSp1FloatSMatrix_H__
00002 #define __BSp1FloatSMatrix_H__
00003 
00004 
00026 #include <stdio.h>
00027 #include "FloatVector.hpp"
00028 
00029 #include "AFSymMatrix.hpp"
00030 
00031 class BSp1FloatSMatrix 
00032 {
00033 protected:
00034 
00035 int                     width;                  
00036 
00037 int                     totalWidth;                     
00038 int                     widthSubMatrix;         
00039 
00040 int                     nItems, maxItems;
00041 
00042 int*                    ia;
00043 int*                    ja;
00044 AFSymMatrix**   data;
00045 
00046 public:
00047         
00048 BSp1FloatSMatrix(int w, int nmax);
00049 BSp1FloatSMatrix(const BSp1FloatSMatrix& m);
00050 BSp1FloatSMatrix operator=(const BSp1FloatSMatrix& m);
00051 
00052 virtual ~BSp1FloatSMatrix();
00053 
00054 virtual BSp1FloatSMatrix* copy();
00055 
00056 
00057 int getWidth(){ return totalWidth; }
00058 int getHeight(){ return totalWidth; }
00059 
00060 
00061 int getItemWidth(){ return widthSubMatrix; }
00062 int getItemHeight(){ return widthSubMatrix; }
00063 
00064 
00065 int getBlockWidth(){ return width; }
00066 int getBlockHeight(){ return width; }
00067 int size(){ return width*width; }
00068 
00069 
00070 virtual int numberOfItems(){return nItems;}
00071 virtual int getMaxItems(){return maxItems;}
00072 
00073 virtual void addItem(int x,int y, AFSymMatrix* value=0);
00074 
00075 virtual bool getItem(int index, int* x, int* y, AFSymMatrix** value);
00076 virtual bool setItem(int index, AFSymMatrix* value);
00077 
00078 
00079 
00080 void setBlock0(int i, int j, AFSymMatrix* value);
00081 AFSymMatrix* getBlock0(int i, int j);
00082 
00083 
00084 void setBlock(int i, int j, AFSymMatrix* value){ setBlock0(i-1,j-1, value); }
00085 AFSymMatrix* getBlock(int i, int j){ return getBlock0(i-1,j-1); }
00086 
00087 
00088 virtual void set0(int i, int j, float value);
00089 virtual float get0(int i, int j);
00090 
00091 
00092 virtual void set(int i, int j, float value){ set0(i-1,j-1, value); }
00093 virtual float get(int i, int j){ return get0(i-1,j-1); }
00094 
00095 
00096 virtual void setAll(float value=0.0);
00097 
00098 virtual float det();
00099 virtual float trace();
00100 
00101 virtual float norme2();
00102 virtual float sum();
00103 virtual float sigma(){return 0.0;}
00104 
00105 virtual float minimum();
00106 virtual float maximum();
00107 
00108 
00109 void operator+=(float value);
00110 void operator-=(float value);
00111 void operator*=(float value);
00112 void operator/=(float value);
00113 
00114 virtual void add(float value);
00115 virtual void subst(float value);
00116 virtual void mult(float value);
00117 virtual void div(float value);
00118 
00119 
00120 
00121 virtual FloatVector* mult_Av(FloatVector* v, FloatVector* result=0);
00122 virtual FloatVector* mult_ATv(FloatVector* v, FloatVector* result=0);
00123 
00124 virtual FloatVector* mult_vA(FloatVector* v, FloatVector* result=0)     { return mult_ATv(v, result); }
00125 virtual FloatVector* mult_vAT(FloatVector* vt, FloatVector* result=0){ return mult_Av(vt, result); }
00126 
00127 
00128 
00129 FloatVector* mult_Av(FloatVector* v, int col0, int row0, FloatVector* result=0);
00130 FloatVector* mult_ATv(FloatVector* v, int col0, int row0, FloatVector* result=0);
00131 
00132 FloatVector* mult_vA(FloatVector* v, int col0, int row0, FloatVector* result=0)
00133                         { return mult_ATv(v, row0, col0, result); }
00134 FloatVector* mult_vAT(FloatVector* vt, int col0, int row0, FloatVector* result=0)
00135                         { return mult_Av(vt, row0, col0, result); }
00136 
00137 void output();
00138 void output(FILE* file);
00139 };
00140 
00141 #endif
00142 
00143