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

📄 movingaverage.m

📁 人工智能的matlab程序
💻 M
字号:
#import "MovingAverage.h"
#include <math.h>

@implementation MovingAverage
/*"This is a general purpose class for creating Moving Averages, either flat "equally weighted" moving averages or exponentially weighted moving averages"*/

- initWidth: (int)w
{
  int i;
  width=w;
  maInputs=[[self getZone] allocBlock: w * sizeof(double) ];
  for(i=0; i < w; i++)
    {
      maInputs[i] = 0;
    }
  numInputs=0;
  sumOfInputs=0;
  arrayPosition=0;
  uncorrectedSum=0;
 
  bweight = -expm1(-1.0/w);  //weight for expWMA
  aweight = 1.0 - bweight;   //weight for expWMA; ma=a*ma(x)+b*x

  return self;			   
}



- initWidth: (int)w Value: (double)val
{
  int i;
  width=w;
  maInputs=[[self getZone] allocBlock: w * sizeof(double) ];
  for(i=0; i < w; i++)
    {
      maInputs[i] = val;
    }
  numInputs=w;
  sumOfInputs=w*val;
  arrayPosition=0;
  uncorrectedSum=w*val;
 
  bweight = -expm1(-1.0/w);  //weight for expWMA
  aweight = 1.0 - bweight;   //weight for expWMA; ma=a*ma(x)+b*x
  expWMA = val;

  return self;			   
}


- (int)getNumInputs
{
  return numInputs;
}


- (double)getMA;
{
  double movingAverage;
  if (numInputs == 0) return 0;

  else if (numInputs < width)
    {
      movingAverage=  (double)sumOfInputs / (double)  numInputs;
    }
  else
    {
      movingAverage = (double)sumOfInputs / (double) width;
    }
  //printf( "Object: ma=%f  sumOfInput: %f numInputs: %d \n",movingAverage, sumOfInputs, numInputs);
  return movingAverage;
}

- (double)getAverage
{
  if (numInputs ==0) return 0;
  else return (double)uncorrectedSum/numInputs;
}

-(double) getEWMA
{
  return expWMA; 	
}

- (void)addValue: (double)x;
{
  arrayPosition = (width + numInputs) % width;

  if(numInputs < width)
    {
    sumOfInputs+=x;
    maInputs[arrayPosition]=x;
    }
  else
    {
      sumOfInputs=sumOfInputs - maInputs[arrayPosition] + x ;
      maInputs[arrayPosition]=x;
    }
  numInputs++;

  uncorrectedSum+=x;

  expWMA = aweight*expWMA + bweight*x;
}


- (void)drop
{
  
  [[self getZone] freeBlock: maInputs  blockSize: width*sizeof(double)];
  [super drop];
}



@end


⌨️ 快捷键说明

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