Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Построение ортогонального дополнения


Автор: comcon1 25.3.2008, 12:36
Дана матрица NxM (N<M), представляет из себя N векторов (линейно независимых). Как найти оставшиеся N-M векторов так чтобы каждый был ортогонален предыдущим N векторам?

Задача построения ортогонального дополнения. Можете послать меня на соответствующий учебник линала - я просто щас вот ничего не нашел. Помню, что делал когда-то.

Автор: maxim1000 25.3.2008, 13:27
я уже не помню, как нам рассказывали на линейной алгебре, так что, возможно, моё решение не самое оптимальное, но можно попробовать:

1. ортогонализируем имеющиеся вектора
2. по одному начинаем добавлять базисные вектора (0,...,0,1,0,...0), при каждом добавлении ортогонализируем его со всеми предыдущими
какие-то вектора уйдут в ноль (иначе получили бы N+M линейно независимых векторов), их нужно убрать, оставшиеся, начиная с N+1-го, - базис дополнения

Автор: comcon1 25.3.2008, 20:59
Я, пока катался в метро, придумал алгоритм. В нем не нужно менять предыдущие вектора (ортогонализовывать). Хочется услышать комментарии, не через ж*пу ли алгоритм.

Допустим есть 3 вектора в 7мерном пространстве. Нужно найти четвертый, так чтобы он был ортогонален предыдущим трём. Для этого будем искать его числа, решая систему уравнений:
Код

a11*x1+a12*x2+...+a17*x7 = 0
a21*x1+a22*x2+...+a27*x7 = 0
a31*x1+a32*x2+...+a37*x7 = 0

Находим в матрице 7x3 3 столбца таким образом, чтобы они образовывали невырожденную матрицу. Допустим, это столбцы 1,4 и 7. 
Присваиваем x2,x3,x5,x6 по единице (например).
Код

a11*x1+a14*x2+a17*x7 = (a12+a13+a15+a16)
a21*x1+a24*x2+a27*x7 = (a22+a23+a25+a26)
a31*x1+a34*x2+a37*x7 = (a32+a33+a35+a36)

Решаем методом крамера. 

все. вектор готов.

Автор: maxim1000 25.3.2008, 21:24
если вспомнить, что алгоритм Гаусса - практически дословное описание алгоритма ортогонализации, то сведение к системе линейных уравнений, по сути, делает то же самое
только тут Крамер вместо Гаусса
как по мне, так лучше Гаусс - в общем случае он удобнее, а то для метода Крамера определители считать придётся

Автор: comcon1 25.3.2008, 22:04
Меня какбы это не напрягает, потомукмо я юзаю линал-библотеки.)) 

А в жизни всегда предпочитал Крамера юзать, кстати.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)