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

 
Если вектор1 ортогонален вектору2, а вектор 2 ортогонален вектору 3, то вектор1 далеко не всегда ортогонален вектору3 даже в 3-мерном пространстве, не говоря уже о большем количестве измерений
 
alsu:
Он может стать не сонаправленным, а просто под непрямым углом ко всем или некоторым векторам
А вот и не может! к тем что уже обработаны - не может, а со следующими входными, может, но с ними следующие итерации как раз и разберутся.
 
MetaDriver:
А вот и не может! к тем что уже обработаны - не может, а со следующими входными, может, но с ними следующие итерации как раз и разберутся.
следующие итерации в общем случае не сохраняют орогональность к предыдущим обработанным векторам - см. мой прошлый пост
 
alsu:
Если вектор1 ортогонален вектору2, а вектор 2 ортогонален вектору 3, то вектор1 далеко не всегда ортогонален вектору3 даже в 3-мерном пространстве, не говоря уже о большем количестве измерений

Значит ты не понял ОСНОВНУЮ фишку. Трансформация на каждом шаге строго плоская - ставит вектор в орто-положение к предыдущему оставляя его ортогональным ко всем предпредпредыдущим. Я с самого начала к этому и стремился. В этом и была проблема (которая теперь решена).

Подумай ещё раз. Проверь.

 
alsu:
следующие итерации в общем случае не сохраняют орогональность к предыдущим обработанным векторам - см. мой прошлый пост

сохраняют.

может я плохо алгоритм донёс. щас напишу полную схему. она небольшая получилась.

 
MetaDriver:

Значит ты не понял ОСНОВНУЮ фишку. Трансформация на каждом шаге строго плоская - ставит вектор в орто-положение к предыдущему оставляя его ортогональным ко всем предыдущим. Я с самого начала к этому и стремился. В этом и была проблема (которая теперь решена).

Подумай ещё раз. Проверь.

Проверил))

Трансформация-то, конечно, строго плоская, и результат в общем-то с точностью до знака не зависит от выбора изначального произвольного вектора - но! только в этой плоскости. Кто сказал нам, что из бесконечного числа вариантов провести плоскость через данный вектор мы выбрали правильный?

Вот пример. Пусть у тебя есть два вектора в 3-мерном пространстве: (1,0,0) и (0,sqrt(2),sqrt(2)). Они ортогональны, как можно видеть. Ты начал с того, что взял произвольный x1 в плоскости z=0 и построил с помощью него ортогональный первому вектору вектор (0,1,0). Получаем, что алгоритм закончен, а результат не получен - третий вектор не ортогонален оставшемуся второму. А для того, чтобы получить правильный ответ, тебе нужно заранее озаботиться выбором правильной плоскости при первом построении - и тогда ты придешь к варианту (0,-sqrt(2),sqrt(2)) или второму возможному решению.

 
double[dim]  GetOrtoVector(int dim, int count, double[][dim] &Input)

  {

    bool error=false;

    double[dim]  Result = RandomInit(dim);

    for (i=0; i<count; i++)  { Result = Ortogonalize(Result, Input[i], error); }
    
    if (error) return GetOrtoVector(dim,count,Input);  else    return Result;

  }

double[dim] Ortogonalize(double[dim] a, double[dim] b, bool &err)

  {

    double SP = sp(a,b);

    if (sp==1.0) {err = true; return a;} else {return  (a-SP*b);  }

  }

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

И ещё не стал расписывать вычитание векторов и умножение вектора на число. Псевдокод он и в африке..

 
alsu:

Проверил))

Трансформация-то, конечно, строго плоская, и результат в общем-то с точностью до знака не зависит от выбора изначального произвольного вектора - но! только в этой плоскости. Кто сказал нам, что из бесконечного числа вариантов провести плоскость через данный вектор мы выбрали правильный?

Вот пример. Пусть у тебя есть два вектора в 3-мерном пространстве: (1,0,0) и (0,sqrt(2),sqrt(2)). Они ортогональны, как можно видеть. Ты начал с того, что взял произвольный x1 в плоскости z=0 и построил с помощью него ортогональный первому вектору вектор (0,1,0). Получаем, что алгоритм закончен, а результат не получен - третий вектор не ортогонален оставшемуся второму. А для того, чтобы получить правильный ответ, тебе нужно заранее озаботиться выбором правильной плоскости при первом построении - и тогда ты придешь к варианту (0,-sqrt(2),sqrt(2)) или второму возможному решению.

да не буду я брать в плоскости Z=0 :))

я возьму просто произвольный x1 = {random, random, random};

какова вероятность, что он попадёт в плоскость Z=0 ??

;-))

 
MetaDriver:

да не буду я брать в плоскости Z=0 :))

я возьму просто произвольный x1 = {random, random, random};

какова вероятность, что он попадёт в плоскость Z=0 ??

;-))

ровно такая же, что и вероятность того, что он попадет в "нужную" плоскость, т.е. нулевая ))
 
alsu:
ровно такая же, что и вероятность того, что он попадет в "нужную" плоскость, т.е. нулевая ))
Выбор произвольного вектора фиксирует плоскость расчета - через 2 вектора можно провести единственную плоскость. В моем примере можно взять любую из бесконечного множества плоскостей, и получить бесконечное множество решений, но пока ты не взял правильную плоскость, ты не получишь правильный ответ.
Причина обращения: