Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Вычисление автокорреляционной функции

Delphi , Синтаксис , Математика



Автор: Lookin
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> 
Зависимости: Math
Автор:       lookin, lookin@mail.ru, Екатеринбург
Copyright:   lookin
Дата:        2 июня 2002 г.
***************************************************** }

//TDoubleArray = array of double

procedure AutoCorrelation(ValueArray: TDoubleArray; var ACArray: TDoubleArray;
  FromValue, ToValue: integer);
var
  i, j, N: integer;
  avr, dev, xxsum: double;
begin
  //ValueArray - массив типа double для которого вычисляется функция
  //FromValue - номер точки, начиная с которого выбираются элементы массива
  //ToValue - номер точки, на котором заканчивается выбор элементов массива
  //ACArray - массив возвращаемых значений автокорреляционной функции
  //для 5-и точек
  N := ToValue - FromValue;
  SetLength(ACArray, 5);
  if N < 5 then
  begin
    for i := 0 to 4 do
      ACArray[i] := 0;
    Exit;
  end
  else
  begin
    SetLength(rv, N);
    dev := 0;
    for i := 0 to N - 1 do
      rv[i] := ValueArray[i + FromValue];
    avr := Mean(rv);
    for i := 0 to N - 1 do
      dev := dev + Sqr(rv[i] - avr);
    dev := dev / N;
    for j := 0 to 4 do
    begin
      xxsum := 0;
      for i := 0 to (N - 1) - j do
        xxsum := xxsum + (rv[i] - avr) * (rv[i + j] - avr);
      ACArray[j] := xxsum / (dev * (N - j));
    end;
  end;
end;

Пример использования:

var
  SourceArray, ACCoefs: TDoubleArray;
begin
  AutoCorrelation(SourceArray, ARCoefs, 0, Length(SourceArray) - 1);
  for i := 0 to Length(ACCoefs) - 1 do
    showmessage(FloatToStr(ACCoefs[i]));

Программный код на языке Delphi для расчета функции автокорреляции массива двойных значений. Функция AutoCorrelation принимает четыре параметра:

  • ValueArray: входной массив двойных значений, для которого будет рассчитана функция автокорреляции.
  • ACArray: выходной массив, где будут храниться рассчитанные коэффициенты автокорреляции.
  • FromValue: начальный индекс входного массива, откуда начнется расчет.
  • ToValue: конечный индекс входного массива, до которого будет выполнен расчет.

Функция рассчитывает среднее и стандартное отклонение входного массива, а затем использует эти значения для расчета коэффициентов автокорреляции для 5 точек. Рассчитанные коэффициенты хранятся в ACArray.

Программный код разбивается на следующие шаги:

  1. N устанавливается как разница между ToValue и FromValue.
  2. Если N меньше 5, создается массив нулей длиной 5 и возвращается.
  3. Входной массив копируется в временный массив rv.
  4. Среднее значение входного массива рассчитывается и хранится в avr.
  5. Стандартное отклонение входного массива рассчитывается и хранится в dev.
  6. Для каждой точки автокорреляции (j от 0 до 4) функция рассчитывает сумму произведений пар значений из входного массива, разделенных на j элементов.
  7. Сумма делится на произведение стандартного отклонения и длины входного массива минус j, чтобы получить коэффициент автокорреляции для этой точки.

Пример использования функции показывает, как вызывать функцию с входным массивом SourceArray и хранить рассчитанные коэффициенты автокорреляции в выходном массиве ACCoefs.

Советы по улучшению кода:

  • Код можно улучшить добавлением обработки ошибок для случаев, когда входной массив пуст или имеет недопустимые индексы.
  • Расчет стандартного отклонения можно оптимизировать с помощью алгоритма онлайн-обновления Вельфорда, который позволяет выполнять обновления в.incremental.
  • Функцию можно модифицировать для расчета коэффициентов автокорреляции для более чем 5 точек, если это необходимо.
  • Код можно переписать в стиле функционального программирования с использованием встроенных функций и операторов Delphi для упрощения расчетов.

Статья описывает процедуру AutoCorrelation для вычисления автокорреляционной функции массива double, которая позволяет оценить зависимость между значениями массива на различных временных шагах.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Математика ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 12:52:46/0.0050179958343506/1