Вопрос к математикам

 

Если вам не очень сложно,то подскажите пожалуйста как сделать следующее в коде:
Существует массив с элементами, значения которых на графике примерно выглядят линейно, но с выбросами вверх (синяя линия). Т.е., нижние экстремумы примерно примерно на прямой линии, а верхние нет . Необходимо определить последнее значение этой линии, чтобы сравнить значение последнего элемента массива с её значением. Линия "проведена" через нижние экстремумы, которые примерно с ней совпадают ("примерно" - допуск задаётся). Другими словами, как-бы нижняя линия канала.


Если нижние экстремумы это сложно, то вариант 2: прямая линия через все значения массива.


Извините з сумбур. Буду благодарен!



 
Линейная регрессия вам в помощь
 
Проще пареной репы - см. тут http://en.wikipedia.org/wiki/Linear_regression
Можно брать любые точки, хоть верхние, хоть нижние.
 
timbo писал (а) >>
Проще пареной репы - см. тут http://en.wikipedia.org/wiki/Linear_regression
Можно брать любые точки, хоть верхние, хоть нижние.




Если это проще "пареной репы", тогда я Папа Римский... :) Спрашивал математиков, т.к. сам взрывотехник :)

Не могли бы Вы "репу" в MQLe, pls? Желательно нижние...

 
mamma писал (а) >>

Если это проще "пареной репы", тогда я Папа Римский... :) Спрашивал математиков, т.к. сам взрывотехник :)


Не могли бы Вы "репу" в MQLe, pls? Желательно нижние...

Try this one http://people.hofstra.edu/stefan_waner/RealWorld/calctopic1/regression.html



 

Прямая линия через все значения массива

//+------------------------------------------------------------------+
//| Рассчет коэффициентов A и B в уравнении                          |
//| y(x)=A*x+B                                                       |
//|        |
//| Вход массив координаты:                                          |
//| точек по оси X, это X[]                                          |
//| точек по оси Y, это Y[]                                          |
//| N - количество точек в массиве                                   |
//| Выход                                                            |
//| A - угол наклона                                                 |
//| В - смещение                                                     |
//| используються формулы 'Помогите написать линейную регрессию'       |
//+------------------------------------------------------------------+


void LinearRegr(double X[], double Y[], int N, double& A, double& B)
{
      double mo_X = 0.0, mo_Y = 0.0, var_0 = 0.0, var_1 = 0.0;
      
    for ( int i = 0; i < N; i ++ )
      {
        mo_X +=X[i];
        mo_Y +=Y[i];
      }
    mo_X /=N;
    mo_Y /=N;
        
    for ( i = 0; i < N; i ++ )
      {
        var_0 +=(X[i]-mo_X)*(Y[i]-mo_Y);
        var_1 +=(X[i]-mo_X)*(X[i]-mo_X);
      }
        A = var_0 / var_1;
        B = mo_Y - A * mo_X;
}

Если по нижним, то нужно правило отбора, какую точку считать нижней.

Те сканы что вы привели, это построение через точки массива кривой заданной некой моделью. Оптимальная роцедура выглядит вот так 'Теория случайных потоков и FOREX'

Но построение её без матричных операций (которых нет в MQL) головная боль и очень большая.

в MatCade это несколько строк 'Теория случайных потоков и FOREX' в MQL, так легко это не реализовать

 

That's better... much clearer. Appreciate your help

 
Prival писал (а) >>

Прямая линия через все значения массива

Если по нижним, то нужно правило отбора, какую точку считать нижней.

Те сканы что вы привели, это построение через точки массива кривой заданной некой моделью. Оптимальная роцедура выгладит вот так 'Теория случайных потоков и FOREX'

Но построение её без матричных операций (которых нет в MQL) головная боль и очень большая.

в MatCade это несколько строк 'Теория случайных потоков и FOREX' в MQL, так легко это не реализовать

Уважаемый Prival, большое спасибо! не могли бы Вы прокомментировать входные параметры функции в плане прикладного применения в моей ситуации?

 
подскажите полуграмотному, как можно задать числовой ряд в Эксел: (1+3)*0,5=2, (2+3)*0,5=2,5, (2,5+3)*0,5=2,65, (2,65+3)=2,825 ... одной формулой
 
Ты даже хуже, чем я: (2,5+3)*0,5=2,65 (проверь!)

А так:

Потом скопируй формулу вниз...
 
45- писал (а) >>
подскажите полуграмотному, как можно задать числовой ряд в Эксел: (1+3)*0,5=2, (2+3)*0,5=2,5, (2,5+3)*0,5=2,65, (2,65+3)=2,825 ... одной формулой

В ячейку А1 записать 1, в А2 - =(A1+3)/2 и растянуть вниз.

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