Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Serge Kanilo                         2:5020/400     26 Jul 2001  23:11:19
 To : All
 Subject : Re: Linear (In)Dependence
 -------------------------------------------------------------------------------- 
 
 "Sergey Kviat" <madkroz@i.am> wrote in message
 news:9jpjmo$1g2c$1@ddt.demos.su...
 
 > А теперь мне понравилась идея, предложенная Serge Kanilo, но, если я не
 > ошибаюсь, есть в ней глюк:
 
 Идея не моя. Если глюки есть - то мои :)
 
 > SK>2) Отрогонализируем V к векторам U
 > SK>for i=1,M-1
 > SK>  V=V-U_i*(V*U_i)/(U_i*U_i)
 > SK>end
 > 1. Ортогонализировать надо не V к векторам U, а вектора U к вектору V,
 
 т.е.:
 
 > for i=1,M-1
 >    U[i]=U[i]-V*(V*U_i)/(V*V)
 > end
 
 Это что в лоб, что по лбу. С точностью до обозначения. В одном случае
 мы явно выбрасываем из одного вектора компоненты других, а потом переходим к
 следующему. В другом случае, постепенно выбрасываем из
 всех векторов компоненту выбранного, а потом выбираем следующий
 и продолжаем.
 
 Запиши это (первый и второй пункты) как два вложенных цикла и можешь
 переставлять из местами сколько хочешь :).
 
 for i=1,M
   for j=1,M
     if j!=i
       U[i]=U[i]-U[j]*(U[j]*U[i])/(U[j]*U[j])      или
 U[j]=U[j]-U[i]*(U[i]*U[j])/(U[i]*U[i])
     end
   end
 end
 
 Естественно, здесь совершенно нет оптимизации вычислений,
 которая достаточно очевидна.
 
 > 2. Далее выбираем новый вектор V из U_i, и повторяем пункт 1 (причём,
 > разумеется, предыдущий вектор V уже можно не изменять).
 > 3. Если какой-то вектор обратился в 0, то он линейно зависим.
 
 > Hедостатки - использование плавающей точки даже, если координаты векторов
 > целочисленные.
 
 Это не недостаток, поскольку явно предназначенно для плавающей точки.
 
 Для целочисленных векторов можно переписать как
 U=U*(V*V) -V*(V*U),
 но это годится только для малого количества векторов (M=6-10 если
 повезет), т.к. числа будут расти со страшной скоростью, а искать общий
 делитель или использовать длинную арифметику будет скорее всего
 накладнее плавающей точки.
 
 Можно также построить таблицы U[i]U[j] и
 U[i]U[j]/sqrt((U[i]U[i])*(U[j]U[j]))
 и начинать с наиболее близко-лежащих векторов и вычитать наиболее
 короткие.  Тоже небольшие дополнительные расходы, но сразу
 отлавливаются сопряженные вектора и рост чисел более управляем.
 
 Cheers,
 Serge
 
 --- ifmail v.2.15dev5
  * Origin: Excite@Home - The Leader in Broadband http://home.com/f (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Linear (In)Dependence   Sergey Kviat   21 Jul 2001 16:25:27 
 Linear (In)Dependence   Max Alekseyev   21 Jul 2001 19:37:54 
 Re: Linear (In)Dependence   Sergey Kviat   22 Jul 2001 18:02:11 
 Linear (In)Dependence   Alex Cvetkov   24 Jul 2001 00:10:39 
 Re: Linear (In)Dependence   Sergey Kviat   26 Jul 2001 21:23:54 
 Re: Linear (In)Dependence   Serge Kanilo   26 Jul 2001 23:11:19 
 Linear (In)Dependence   Max Alekseyev   26 Jul 2001 14:59:48 
 Re: Linear (In)Dependence   Sergey Kviat   26 Jul 2001 21:27:57 
 Re: Linear (In)Dependence   Sergei Katkovsky   22 Jul 2001 18:08:12 
 Re: Linear (In)Dependence   Serge Kanilo   23 Jul 2001 21:07:02 
Архивное /ru.algorithms/21067f56287ee.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional