[Архив!] Чистая математика, физика, химия и т.п.: задачки для тренировки мозгов, никак не связанные с торговлей - страница 561

 

Сплю я, сплю.

 
Есть же вроде стандартная процедура построения ортонормированного набора. То ли Лагранжа, то ли еще кого. Ну ладно, если решили задачу, да еще и доказали, тогда о чем разговор...
 
Mathemat:
Есть же вроде стандартная процедура построения ортонормированного набора. То ли Лагранжа, то ли еще кого. Ну ладно, если решили задачу, да еще и доказали, тогда о чем разговор...

Ненененене!!! Если есть - давай выкладывай! Очень интересно, я искал не нашёл.

Интересуют разные способы, ибо могут влиять на скорость решения целевой задачи.

 
tara:

Логично. На чем будем деньги делать?

На форексе !
 
MetaDriver: Ненененене!!! Если есть - давай выкладывай! Очень интересно, я искал не нашёл.

Ну я пока не сильно вникал. Процесс Грама-Шмидта, его ж вроде в линейной алгебре проходят. Или в квадратичных формах.

Насколько я понял, достаточно начать и не с первого шага. Там и доказательство есть, и геометрические интертрепации.

Есть у меня такое подозрение, что в функциях OpenCL должно быть что-то нативное для этого процесса.

 

Метод последовательной ортогонализации можно увидеть в нижеприведенном куске кода. Gradient - это случайный вектор из которого убираются проекции на вектора базиса. Базис расположен в одномерном массиве Sarray . Все массивы объявлены глобальными. Процесс, думаю, ясен из комментариев.

//+------------------------------------------------------------------+
//|  в массиве Sarray записан ортонормированный базис из k векторов  |
//|  размерности NeuroCellDim каждый                                 |
//|  строится ортогональная проекция вектора Gradient на базис       |
//|  в случае успеха проекция нормируется                            |
//|  и добавляется в базис, если позволяет признак записи: write > 0 |
//+------------------------------------------------------------------+
int OrthogonalProjection(int k, int write)
{
   int   i, j, err = 0, index = 0;
   double Alpha;
   if (k > 0) // если k>0, то базис не пуст
      for (i = 0; i < k; i++)
      {
         for (j = 0; j < NeuroCellDim; j++)
         {
            InputX[j] = Sarray[index]; // извлекаем i-й орт в InputX
            index++;
         }
         Alpha = ScalarProduct( Gradient, InputX); // скалярное произведение, cos(Gradient, InputX)
         if (Alpha > 1.0 - delta)   // если cos() = 1
         {
            err = -1; // считаем, что такой вектор линейно зависим от векторов базиса
            break;
         }
//       Gradient := Gradient - Alpha * InputX     с нормировкой       
         AddVektors( Gradient, InputX, -Alpha); // орт к базису из i+1 векторов
      }

   if (err >= 0 && write > 0) // если существует проекция и позволяет признак записи
      for (j = 0; j < NeuroCellDim; j++)  // записываем новый орт в базис
      {
         Sarray[index] = Gradient[j]; 
         index++;
      }      

   return(err);
}
//+--- OrthogonalProjection End -------------------------------------+
 

Люди, подскажите. Я потерялся. Задачка в следующем: есть выборка данных, которые очень хорошо аппроксимируются линейной регрессией (независимая переменная - номер отсчета).

На графике видно уравнение линейной регрессии. Я хочу преобразовать данные из выборки так, чтобы они были инвариантны относительно отсчетов. Попробовал арифметическими действиями выделить свободный член уравнения и привести данные из выборки к этому значению. Но в начале получился такой пик на уровне 0,7, 0,46 и т.д., уходящий на асимптоту нужного уровня. Откуда этот пик в начале взялся? Можно ли его убрать как изменив формулу?

Эксель в аттаче на всякий случай.

Файлы:
 
alexeymosc:

Люди, подскажите. Я потерялся. Задачка в следующем: есть выборка данных, которые очень хорошо аппроксимируются линейной регрессией (независимая переменная - номер отсчета).

На графике видно уравнение линейной регрессии. Я хочу преобразовать данные из выборки так, чтобы они были инвариантны относительно отсчетов. Попробовал арифметическими действиями выделить свободный член уравнения и привести данные из выборки к этому значению. Но в начале получился такой пик на уровне 0,7, 0,46 и т.д., уходящий на асимптоту нужного уровня. Откуда этот пик в начале взялся? Можно ли его убрать как изменив формулу?

Эксель в аттаче на всякий случай.

Ладно, если других решений не будет, я поиском решения подобрал значение свободного члена уравнения, минимизируя R^2 уже по новому ряду (производному от исходного и который должен быть инвариантен), то есть, сделал его почти линейным. Видимо, проблема в том, что исходные данные не идеально линейны...
 
alexeymosc:

Люди, подскажите. Я потерялся. Задачка в следующем: есть выборка данных, которые очень хорошо аппроксимируются линейной регрессией (независимая переменная - номер отсчета).

На графике видно уравнение линейной регрессии. Я хочу преобразовать данные из выборки так, чтобы они были инвариантны относительно отсчетов. Попробовал арифметическими действиями выделить свободный член уравнения и привести данные из выборки к этому значению. Но в начале получился такой пик на уровне 0,7, 0,46 и т.д., уходящий на асимптоту нужного уровня. Откуда этот пик в начале взялся? Можно ли его убрать как изменив формулу?

Эксель в аттаче на всякий случай.

Ну, это значит только одно - что относительная ошибка аппроскимации тем больше, чем меньше Х (и Y), собственно а чего вы ожидали, деля маленькое число на другое маленькое? Попробуйте заменить переменную X' = X+100 и построить новый ряд в диапазоне не от 0 до 300, а от 100 до 400 - график будет намного прямее, но сути дела это не поменяет
 

1.

Mislaid 10.03.2012 05:46Метод последовательной ортогонализации можно увидеть в нижеприведенном куске кода. Gradient - это случайный вектор

Mathemat:

1. Ну я пока не сильно вникал. Процесс Грама-Шмидта, его ж вроде в линейной алгебре проходят. Или в квадратичных формах.

Насколько я понял, достаточно начать и не с первого шага. Там и доказательство есть, и геометрические интертрепации.

2. Есть у меня такое подозрение, что в функциях OpenCL должно быть что-то нативное для этого процесса.

1. 1. to Mislaid, Mathemat,

И там и сям везде одно и то же - тот же процесс, который я вчера сам сконструировал. Последовательное вычитание проекций вектора на предыдущие орты.

В такие дни чувствую себя классиком.... :-))

--

Кстати, я уже ночью скрипт проверочный накатал и отладил. Попутно нашёл баг в оптимизаторе пятёры и отправил в сервисдеск. Баг обошёл, чуть изменив код. Так что всё работает. Надёжно и быстро, как мне и нужно было.

2. В опенЦЛ действительно есть, но только для трёхмерного случая. [cross(a, b); строит вектор ортогональный двум заданным ] А мне нужно для произвольной размерности.

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