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

 
Svinotavr:

Этот видеофильм тоже развод? PS: Интересно мнение не только Алексея, но и других участников форума.


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


Фильм похож на сектантскую пропаганду. Полная беспонтовость, чтобы его хоть на чуть-чуть всерьез воспринимать... 60 лет он давала давал... и что он дал?

 
MetaDriver:

// Сразу пардон за оффтоп, так как частный случай приложения решений (если решения найдутся) всё-таки связан с торговлей.

// (: а с другой стороны, это ведь стимул, да? :)

// Кто реально поможет, скажу зачем понадобилось... ;) Уверяю - очень может пригодиться..

Задачка:

Дано: набор ортогональных векторов в количестве M штук в N-мерном пространстве (M<N) // в предельном случае М==1

Требуется: построить генератор векторов (!) ортогональных данному набору. Нужны идеи о том как можно быстро генерить случайные вектора соответствующие условию (!) .

Пояснения-напоминания : Для пространства размерности N, размерность пространства решений равна (N-M), т.е. при начальном наборе в количестве (M=N-1) векторов имеем одно однозначное решение (кстати, как его получить в один ход? есть статья в вики, но я до конца не разобрался. кто на пальцах объяснит алгоритм - тому конфетка (опять же - скажу зачем мне всё это.)). При меньшем начальном наборе - таких векторов бесконечное количество, т.е. "есть варианты". Вот эти варианты и нужно генерить.

Фраза "набор ортогональных векторов А ортогонален набору В" несколько неоднозначна (в смысле что конкретно чему ортогонально)... Можно задать точное условие, лучше формулой?
 
alsu:
Фраза "набор ортогональных векторов А ортогонален набору В" несколько неоднозначна (в смысле что конкретно чему ортогонально)... Можно задать точное условие, лучше формулой?

Можно и уточнить. Словами мне проще. Все вектора ортогональны друг-другу. :) Мне не нужен набор В. Ну т.е. нужен, но не сразу, а постепенно. :))

Нужно сделать функцию на mql(5), которая берёт на вход начальный набор векторов (А) в виде массива и возвращает один вектор, ортогональный всем входным векторам.

Ну типа такой :

bool GetOrtoVector(int Dimention, int InputCount, double &Input[], double &Out[]); 
  { 
    .....  
    return succes; 
  }

Выходной вектор случайный, но гарантированно из дополняющего пространства. (В случае когда InputCount == Dimention-1, возвращается единственно возможный однозначный вектор)

Важное условие : функция должна быть [насколько возможно] быстрой. Тормозную я и сам могу.. :)

 
alsu:
Фраза "набор ортогональных векторов А ортогонален набору В" несколько неоднозначна (в смысле что конкретно чему ортогонально)... Можно задать точное условие, лучше формулой?

Насчёт формулой : взаимные попарные скалярные произведения всех входящих и исходящего вектора == 0

Это условие позволяет однозначно решить систему уравнений и получить последний вектор (при M==N-1).

В случае же (M<N-1) система имеет уже пространство решений.

Вот из этого-то пространства решений мне и нужно случайные вектора выдёргивать. Желательно очень быстро.

 
MetaDriver:

Это условие позволяет однозначно решить систему уравнений и получить последний вектор (при M==N-1).

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

Пример: для набора {(1,0,0), (0,2,0)} любой вектор вида (0,0,z) будет ортогонален

 
alsu:

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

Пример: для набора {(1,0,0), (0,2,0)} любой вектор вида (0,0,z) будет ортогонален

Да, конечно. Все векторы нормированные. И на входе и на выходе.
 
MetaDriver:
Да, конечно. Все векторы нормированные. И на входе и на выходе.
Есть простое решение... на языке вертится как говорят))) щас
 
alsu:
Есть простое решение... на языке вертится как говорят))) щас

Для одного вектора (x0) на входе решение я легко и давно придумал (для пространства произвольной размерности):

. . 1. Генерируем случайный вектор (x1r)

. . 2. Нормируем его -> (x1rn)

. . 3. Находим сумму и разность вродного (х0) и полученного (x1rn) -> (sX, dX)

. . 4. Складываем sX+dX и нормируем сумму.

. . 5. Готово. Возвращаем из функции и берём с полки пирожок.

--

Но для большего чем один входной вектор этот алгоритм не годится. Или я не смог приспособить толком.

Если есть идеи как приспособить так, чтоб итерации не множились как снежный ком - сгодится.

 

Блин, пока объяснял, кажется сам въехал. :)

Если для каждого входного вектора проделать описанную выше процедура, то все полученные векторы при суммировании с последующим нормированием суммы и дадут искомый псевдослучайный вектор!

alsu, поправь если наглючил.

--

// ага, почти наглючил. Чуть посложнее, так просто не получится. Нужно после получения xi вектора на каждом шаге, сначала его "складывать-вычитать-нормировать" со следующим входным и т.д. до исчерпания входных векторов. Как-то так.

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