Умножение на самосопряженную и упрощение выражений я поручал MatLab'у, который с вашей матрицей видимо не справился.
Этого не может быть с современными пакетами. Просто ему надо было явно указать, что
и, возможно,
. Сам он до этого, действительно, не додумается.
Oam писал(а):
Скажите, а что будет при x=-1? В вашей матрице при этом появляются нули в знаменателе, в то время как вектор с такой координатой является допустимым объектом для поворота. Меня это смущает тем, что в моей макромолекуле много атомов, и я не могу заранее исключить возможность того, что у нужного мне атома не окажется x=-1.
В этом случае неопределена ось поворота (векторное произведение равно нулю).
означает
, а
влечёт что-то вроде
, и в пределе матрица принимает вид
, вполне законный.
Как этот предел реализовать в программировании пока не думал, но приёмы стандартны.
Навскидку, иметь код типа
Код:
if x>=0 {этот вариант} else {некий второй вариант} end if
(Так делают даже в казалось бы простом случае решения квадратного уравнения, когда заботятся о точности вычислений.)Недодуманное удалено.Oam писал(а):
Возможно ли в принципе построить такую матрицу поворота, чтобы ее элементы были определены для любого ненулевого вектора?
Не знаю. Боюсь, другие предложенные здесь методы упрутся в ту же проблему. Так, в варианте сначала уложить вектор горизонтально потребуется
с аналогичными проблемами.
Oam писал(а):
Математики на этот вопрос внимания не обращают.
Глубоко неверное утверждение. Ответ даден
ewertом.
-- 12 июн 2009, 15:58 --В конце концов, Вы можете написать
Код:
if x=-1 {предельная матрица } else {общая матрица } end if
, понимая, что рискуете потерять точность при x=-0.999999 (ибо при x=-0.999 компьютер Вас всё же, видимо, выручит).
Или при
совершить предварительно простой поворот всей системы с указанной предельной матрицей, после чего смело применять предложенное преобразование.
(Это, видимо, и есть предложенный выше "некий второй вариант".)