У меня есть набор линейных алгебраических уравнений, Ax = By. Там, где является матрица 36x20 и х представляет собой вектор 20х1, Б является 36x13 и у является 13x1. Ранг (A) = 20. Поскольку система переопределена, возможно решение наименьших квадратов, i, e; x = (A^TA)^- 1A^TBy. Я хочу решение так, чтобы остаточная ошибка e = Ax-By была минимизирована. Я использовал Maple, чтобы взять транспонирование и инверсию матриц, но для обращения к такой большой матрице требуется намного больше времени и ОЗУ. Я даже потратил целый день на матрицу обратного, но из-за нехватки оперативной памяти она была прервана. Это очень медленно, и я думаю, что это невозможно достичь с помощью Maple.Решение линейных (переопределенных) алгебраических уравнений
Может ли кто-нибудь предложить какое-либо решение способа сделать это на C++ или каким-либо другим способом решения уравнений, а не принимать инверсии и транспонировать.
Формирование матриц,
[ 1 0 0 ...0]
[ 0 1 0 ...0]
[ 0 0 1 ...0] [LinearVelocity_x]
[ 0 0 0 ...1] [LinearVelocity_y]
[ . . . ....], x=[LinearVelocity_z]
A = [ . . . ....] [RotationalVelocity_ROLL]
[ . . . ....] [RotationalVelocity_PITCH]
[ 1 0 0 ...0] [RotationalVelocity_YAW]
[ 0 1 0 ...0]
[ 0 0 1 ...0]
[ 0 0 0 ...1]
х в основном положении (х, у, г) и ориентации (крен, тангаж и рыскание) вектор. Однако B не является матрицей фиксированных ones
и zeros
. B - матрица с элементами sin
, cos
углов, которые являются данными датчиков реального времени, а не фиксированными данными. В клене B есть почти матрица переменных и фиксированных элементов, вы можете сказать, что матрица dense sparse
. Между тем, y является вектором всех датчиков или энкодеров.
Я сейчас редактировал свой вопрос с более подробной формулировкой матриц. –
Что вы подразумеваете под «минимальной 2-нормой»? остаточная ошибка? –
Я пробовал, но .... Ошибка, (в LinearAlgebra: -LeastSquares) объект слишком большой –