⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interval.cc

📁 小波分析程序
💻 CC
字号:
//****************************************************************************// Interval.cc                                 Implementation of class Interval//****************************************************************************#include <assert.h>#include <math.h>#include <iostream.h>#include <fstream.h>#include <new.h>#include "Interval.h"Interval::Interval(const integer &alpha, const integer &omega, const real *data) : origin(0){  if(data == 0) Set( alpha, omega );  else Set( alpha, omega, data );}///////////////////////////////////////////////////////////////////////////////Interval::Interval(const integer &p, const real *data) : origin(0){  if(data==0) Set(0, (1<<p)-1);  else Set(0, (1<<p)-1, data);}///////////////////////////////////////////////////////////////////////////////Interval::Interval(const Interval &Rhs) : origin(0){    Set( Rhs.beg, Rhs.end, Rhs.origin + Rhs.beg);}Interval::~Interval(){  if(origin)  delete [] (origin + beg);   origin=0;}///////////////////////////////////////////////////////////////////////////////const Interval &Interval::operator=(const Interval &Rhs){  if(this != &Rhs)     {      if(Rhs.origin) Set( Rhs.beg, Rhs.end, Rhs.origin + Rhs.beg );      else Set(0, -1, 0);    }  return *this;}///////////////////////////////////////////////////////////////////////////////real &Interval::operator[](const integer &i){  assert(beg<=i && i<=end);  return origin[i];}///////////////////////////////////////////////////////////////////////////////const real &Interval::operator[](integer i)  const{  assert(beg<=i && i<=end);  return origin[i];  }///////////////////////////////////////////////////////////////////////////////const Interval &Interval::operator+=(const Interval &I){  if(I.origin)          // if I empty, return without any changes    {      if(beg==I.beg && end==I.end)	{	  for(integer j=beg; j<=end; j++) origin[j] += I.origin[j];	}      else	{	  Interval Temp( minimum(beg, I.beg), maximum(end, I.end) );	  integer j;	  for(j=beg; j<=end; j++) Temp.origin[j] += origin[j];    // add  *this	  for(j=I.beg; j<=I.end; j++) origin[j] += I.origin[j];   // add  I	  *this = Temp;	}    }  return *this;}   ///////////////////////////////////////////////////////////////////////////////const Interval &Interval::operator+=(const real &c){  for(integer i=beg; i<=end; i++) origin[i] += c;  return *this;}  ///////////////////////////////////////////////////////////////////////////////Interval Interval::operator+(const Interval &I) const{  Interval Temp(*this);  Temp += I;  return Temp;}///////////////////////////////////////////////////////////////////////////////Interval Interval::operator+(const real &c) const{  Interval Temp(*this);  Temp += c;  return Temp;}///////////////////////////////////////////////////////////////////////////////const Interval &Interval::operator*=(const real &c){ for(integer i=beg; i<=end; i++) origin[i] *= c; return *this;}///////////////////////////////////////////////////////////////////////////////Interval Interval::operator*(const real &c) const{  Interval Temp(*this);  Temp *= c;  return Temp;}///////////////////////////////////////////////////////////////////////////////void Interval::Set(integer alpha, integer omega, const real *data) {  if(origin) delete [] (origin+beg);    // if redefining the existing interval  length=omega-alpha+1;  beg=alpha; end=omega;   if(length > 0)    {           origin=new real [length];      assert(origin);      origin -= beg;      if(data == 0)  for(integer i=beg; i<=end; i++) origin[i]=0;      else for(integer i=0; i<length; i++) origin[beg+i]=data[i];    }   else origin=0;}/*********************** Interval utilities **********************************/Interval Absval(const Interval &I){  Interval Temp;  if(I.origin)    {      Temp.Set(I.beg, I.end);      for(integer i=I.beg; i<=I.end; i++) Temp.origin[i] = absval(I.origin[i]);    }  else      cout << "Returning empty interval as absolute value of empty interval."	 << endl;  return Temp;}///////////////////////////////////////////////////////////////////////////////real L2norm(const Interval &I){  if(I.origin)    {      real temp=0;      for(integer j=I.beg; j<=I.end; j++) temp += I.origin[j] * I.origin[j];      return sqrt(temp);    }  else    {      cout << "Interval empty. Returning 0 as its norm." << endl;      return 0;    }}///////////////////////////////////////////////////////////////////////////////real Average(const Interval &I){  if(I.origin)    {      real a=0;      for(integer j=I.beg; j<=I.end; j++) a += I.origin[j];      return a/I.length;    }  else    {      cout << "Interval empty. Returning 0 as its average." << endl;      return 0;    }}///////////////////////////////////////////////////////////////////////////////real StDev(const Interval &I){  if(I.origin)    {      real a=Average(I);      real var=0;      for(integer j=I.beg; j<=I.end; j++) 	var += (I.origin[j]-a) * (I.origin[j]-a);      var /= I.length - 1.0;      return sqrt(var);    }  else     {      cout << "Interval empty. Returning 0 as its stdev." << endl;      return 0;    }}       

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -