00001 #ifndef __RBFWEIGHTS_H 00002 #define __RBFWEIGHTS_H 00003 00004 #include <Random.hpp> 00005 #include <Exception.hpp> 00006 #include <Vector.hpp> 00007 00008 //#include <iostream> 00009 00013 class RBFWeights 00014 { 00015 public: 00016 RBFWeights(unsigned int size) 00017 { 00018 m_size = size; 00019 m_weights = new double[size]; 00020 if(m_weights == 0) 00021 throw Exception("out of memory"); 00022 00023 for(unsigned int i=0; i<size; i++) 00024 m_weights[i] = Random::Randomize(); // between -1.0 and 1.0 00025 } 00026 00027 ~RBFWeights() { delete [] m_weights; } 00028 00029 double GetWeight(unsigned int i) { return m_weights[i]; } 00030 void SetWeight(unsigned int i, double w) { m_weights[i] = w; } 00031 00032 void SetSignal(double i) { m_signal = i; } 00033 double GetWeightedSignal(unsigned int i) { return m_weights[i] * m_signal; } // här kan man optimera hastighet om man sparar resultatet. 00034 00035 void UpdateWeights(Vector & etaDiff) 00036 { 00037 //std::cout << "A: " << m_signal << " " ; 00038 00039 Vector::iterator it = etaDiff.begin(); 00040 for(unsigned int i=0; it!=etaDiff.end(); it++, i++) 00041 m_weights[i] += (*it) * m_signal; 00042 } 00043 00044 private: 00045 unsigned int m_size; 00046 double * m_weights; 00047 double m_signal; 00048 }; 00049 00050 00051 #endif