Математики и программисты! Нужна помощь!

 

Всем доброго времени суток!

...настал творческий тупняк...

второй день бьюсь не могу придумать  функцию для сжатия временного ряда...

что бы из:  

получить: 

прим.: пример

...чуйкой чуюю что без y/n здесь не обойтись..))

 
int Sizer(int n, double &inputs, int y, double &outs)
{
   int s=y/n;
   for(int i=0;i<y;i++)
   {
      //на этом мысли останавливаются...(((
      
   }
   return(1);
}
 
при делении y на n без остатка (т.е. 10/2=5) как то мысли вроде просветляются, а вот с дробными (7/5=1,4) вот тут начинается тупаик.
 
Michael Dolgushin:

Всем доброго времени суток!

...настал творческий тупняк...

второй день бьюсь не могу придумать  функцию для сжатия временного ряда...

что бы из:  

получить: 

прим.: 

...чуйкой чуюю что без y/n здесь не обойтись..))

 

#property copyright "Copyright 2015, Mikalas"
#property link      "https://www.mql5.com"
#property version   "1.00"
//
double inp_array[23]; //23 взял для примера. Размер может быть любой
double out_array[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void CompressTime()
{
  int out_size = int( ArraySize( inp_array ) / 2 );
  ArrayResize( out_array, out_size );
//---
  inp_array[0] = 1.5;  
  inp_array[1] = 1.4;
  inp_array[2] = 1.45;
  inp_array[3] = 1.55;
  inp_array[4] = 1.67;
  inp_array[5] = 1.63;
  inp_array[6] = 1.59;
  inp_array[7] = 1.61;
  inp_array[8] = 1.55;
  inp_array[9] = 1.53;
//---
  if ( out_size > 0 )
  {
    for ( int i = 0; i < out_size; i++ )
    {
      out_array[i] = ( inp_array[i * 2] + inp_array[i * 2 + 1] ) / 2;
      Print( i + 1, " = ", out_array[i] );
    }
  }  
}
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  CompressTime();
  return(INIT_SUCCEEDED);
}
2015.12.10 12:18:49.321 Test_deinit (RTS-12.15,M1)      11 = 0.0
2015.12.10 12:18:49.321 Test_deinit (RTS-12.15,M1)      10 = 0.0
2015.12.10 12:18:49.321 Test_deinit (RTS-12.15,M1)      9 = 0.0
2015.12.10 12:18:49.321 Test_deinit (RTS-12.15,M1)      8 = 0.0
2015.12.10 12:18:49.321 Test_deinit (RTS-12.15,M1)      7 = 0.0
2015.12.10 12:18:49.321 Test_deinit (RTS-12.15,M1)      6 = 0.0
2015.12.10 12:18:49.321 Test_deinit (RTS-12.15,M1)      5 = 1.54
2015.12.10 12:18:49.321 Test_deinit (RTS-12.15,M1)      4 = 1.6
2015.12.10 12:18:49.321 Test_deinit (RTS-12.15,M1)      3 = 1.65
2015.12.10 12:18:49.321 Test_deinit (RTS-12.15,M1)      2 = 1.5
2015.12.10 12:18:49.321 Test_deinit (RTS-12.15,M1)      1 = 1.45
 

//+------------------------------------------------------------------+ #property copyright "Copyright 2014, MetaQuotes Software Corp." #property link      "http://www.mql5.com" #property version   "1.00" #property strict double n[12]={0,1.5,1.4,1.45,1.55,1.67,1.63,1.59,1.61,1.55,1.53}; double y[6]; int i,k; //+------------------------------------------------------------------+ //| Expert initialization function                                   | //+------------------------------------------------------------------+ void OnInit()   { SR();   }    void  SR(){ i=1;k=1; while(i<11){ y[k]=(n[i]+n[i+1])/2; Print("n[",i,"]=",n[i]," n[",i+1,"]=",n[i+1]," y[",k,"]=",y[k]); i=i+2;k++; } }



 
Yuri Evseenkov:
:)
 

 
Yuri Evseenkov:

:):)
 

c кратными то числами понятно, вот с не кратными....

постарался максимально визуализировать идею: 

(y) и (n) - должны быть любые целые числа

 
Michael Dolgushin:

c кратными то числами понятно, вот с не кратными....

постарался максимально визуализировать идею: 

(y) и (n) - должны быть любые целые числа

Какое Т.З, таков и результат.

То, что Вы вновь нарисовали - опять не правильно.

Нужно так:

1. Есть исходные 8 точек, которые соответствуют таким-то отрезкам времени (указать шаг времени)

 2. То, что нужно получить (из каких параметров Вы строите первую красную точку? Почему первая синяя точка = 1, а первая красная = 0,6 ?)

 

 
Michael Dolgushin:

То, что вы хотите, называется передискретизация.

https://ru.wikipedia.org/wiki/Передискретизация 

Передискретизация — Википедия
  • ru.wikipedia.org
Иллюстрация эффекта наложения спектров (алиасинга) при уменьшении разрешения (децимации) растрового изображения. Сверху — изображение, уменьшенное без фильтрации. Снизу — изображение, уменьшенное с применением фильтра нижних частот. Отсчёты сигнала, соответствующие новой частоте дискретизации, вычисляются по уже имеющимся отсчётам и не...