Как удивительна жизнь! Решение кубического уравнения, собственные векторы, etc.

Feb 13, 2022 22:46


Кажется, что на днях, а на самом деле чуть меньше месяца назад писал я тут о способе решения кубического уравнения, которое, как я потом признался в комментариях, необходимо было для нахождения собственных значений одного линейного оператора в трёхмерном пространстве. Ну а собственные значения, как обычно, нужны были для нахождения по ним собственных векторов. При этом сами эти собственные векторы мне нужны не были, просто хотелось, наконец, на примере понять, что это такое и зачем. В итоге уравнение я решил, векторы нашёл, а для чего они могли бы пригодиться так и не понял.

А тут вдруг возникла такая задача. Есть трёхмерное пространство, а в нём есть линейный оператор, который все точки этого пространства отображает на плоскость. Т.е. в этом трёхмерном пространстве есть двумерное подпространство - плоскость. Таким образом, в этом пространстве существует направление, от которого ничего не зависит. Если двигать точку вдоль этого направления, то оператор все эти положения точки будет отображать в одну и ту же точку на плоскости. Матрица линейного оператора задана, а это «невидимое» направление нужно найти. Может быть, задача на первый взгляд кому-то покажется очень простой, поэтому на всякий случай добавлю, что просто из вида матрицы это направление не следует. Возьмём два вектора, один назовём a - это вектор, проведённый в «невидимом» направлении, другой назовём x - это просто произвольный вектор, k - произвольное значение. Сумму этих векторов будем отображать на плоскость с помощью линейного оператора D, b - вектор результата:

D(ka+x) = b.

Раскроем скобки:

kDa + Dx = b.

Как было указано, вектор a направлен вдоль «невидимой» прямой, а значит, от значения k ничего не зависит, вектор x будет всегда отображаться в один и тот же вектор b независимо от значения k. А это возможно только в том случае, если Da = 0. Из решения этого уравнения получим вектор a. Разумеется, нулевое решение нам не интересно, нужен ненулевой вектор. Кажется, это называется фундаментальной системой решений однородной системы линейных уравнений.

Возникает вопрос, как такое уравнение решать. Определитель матрицы D, очевидно, равен нулю, поскольку ранг этой матрицы равен двум, а не трём. Можно по очереди вычёркивать из матрицы строки и столбцы, добиваясь того, чтобы определитель оставшейся матрицы стал ненулевым, после чего найти две координаты вектора a (в зависимости от третьей, вычеркнутой). Можно привести матрицу к диагональному виду. Но есть более простой способ, если есть в руках функция нахождения собственных значений и собственных векторов. Ведь тот вектор, который нужно найти - это и есть собственный вектор, соответствующий нулевому собственному значению линейного оператора D! А вот не задумайся я в прошлом месяце о смысле собственных векторов - и вряд ли догадался бы.

Таким образом, вызываем в Питоне функцию lambdas, vectors = numpy.linalg.eig(D) и получаем в массиве lambdas три собственных значения, а в массиве vectors три соответствующие этим значениям вектора-столбца. Здесь, конечно, есть избыточность, ведь сами собственные значения искать не нужно, нужно только значение, равное нулю, а оно среди значений точно есть. А из векторов нужен только тот, который соответствует нулевому значению. Остальные придётся выбросить. Поэтому необходимо перебрать все собственные значения, найти из них близкое к нулю и вытащить из массива соответствующий ему собственный вектор. Но это проще, чем приводить матрицу к диагональному виду.

В процессе поиска решения наткнулся на интересный сайт: https://abakbot.ru/. Тут есть и метод нахождения фундаментальной системы решений с использованием векторного произведения, и формулы для нахождения корней кубического уравнения и уравнения четвёртой степени. Да и чего только нет.

Линейная алгебра, Питон, Элементарная математика

Previous post Next post
Up