код для функции линейного предсказания - страница 2

 

А вот ещё функция :)

void memcof(double data[], int n, int m, double& xms, double& d[]) {
//Given a real vector of data[1..n], and given m, this routine returns m linear prediction
//coefficients as d[1..m], and returns the mean square discrepancy as xms.
  int k,j,i;
  double p=0.0;
  double wk1[];
  double wk2[];
  double wkm[];
  ArrayResize(wk1,n+1);
  ArrayResize(wk2,n+1);
  ArrayResize(wkm,m+1);
  double dres1;
  double dres2;
  for (j=1;j<=n;j++) {
    dres1 = data[j];
    p += dres1*dres1;
  }
  xms=p/n;
  wk1[1]=data[1];
  wk2[n-1]=data[n];
  for (j=2;j<=n-1;j++) {
    wk1[j]=data[j];
    wk2[j-1]=data[j];
  }
  for (k=1;k<=m;k++) {
    double num=0.0;
    double denom=0.0;
    for (j=1;j<=(n-k);j++) {
      dres1 = wk1[j];
      dres2 = wk2[j];
      num += dres1*dres2;
      denom += dres1*dres1+dres2*dres2;
    }
    d[k]=2.0*num/denom;
    dres1 = d[k];
    xms *= (1.0-dres1*dres1);
    for (i=1;i<=(k-1);i++) d[i]=wkm[i]-d[k]*wkm[k-i];
    if (k == m) return;
    for (i=1;i<=k;i++) wkm[i]=d[i];
    for (j=1;j<=(n-k-1);j++) {
      wk1[j] -= wkm[k]*wk2[j];
      wk2[j]=wk2[j+1]-wkm[k]*wk1[j+1];
    }
  }
  Alert("memcof: never get here in memcof.");
  return;
}
Integer >>:
Что с этим делат дальше - большой вопрос.

Первое, что нужно сделать - вынести за пределы функции выделение памяти. Это относится и к "моей" функции. Хотя вопрос, думаю, был не об этом :)

 

для чего нужно выделение памяти? встретил тоже в коде для с++

коэфициенты предсказания находить научился, теперь как их использовать? встречал в конечных формулах добавочный элемент - возбуждающая последовательность, а как её посчитать непонял..

вот тут например формула


 
anubis >>:

для чего нужно выделение памяти? встретил тоже в коде для с++

коэфициенты предсказания находить научился, теперь как их использовать? встречал в конечных формулах добавочный элемент - возбуждающая последовательность, а как её посчитать непонял..

вот тут например формула

Поскольку размер массива заранее неизвестен вводится только указатель на него, а сам массив размещается уже во время выполнения программы. Но ценовые ряды нестационарны, поэтому можно предположить, что функции придётся вызывать многократно. В этой ситуации выделение памяти вне функции может дать существенную экономию в смысле быстродействия.

Возбуждающая последовательность - это X(n)? Думаю её надо(если надо) вводить исходя из своего подхода к решению конкретной задачи. Другими словами, возможно для достижения успеха как раз и нужно придумать, как её посчитать :)

Причина обращения: