Пусть у вас система покоится (не ускоряется), положим, Вам надо получить обратную матрицу поворотов, запишем ее как H=(h_1, h_2, h_3), H \in \R^{3 \times 3}, h_i \in \R^3. Дополнительно потребуем, чтобы оси магнетометра и акселометра полностью совпадали. Положим, что Ваша система такова, что ось X направлена на север, Y - на восток, а Z - вверх. Тогда h_3=-m, h_1=a, где m - результат данных с магнетометра, a - результат данных с акселометра. Помня, что H - унитарная, и зная, что датчики безбожно врут, Вам надо будет перенормировать векторы h_3 и h_1, а, также возможно доортогонализовать их друг к другу, если есть ошибка измерения в датчиках (а она точно есть!!!) относительно положения осей магнетометра и акселометра. После того, как вы получите ортонормированные векторы h_3 и h_1, вычисление h_2 можно провести в виде векторного произведения h_3 и h_1. Сама же матрица поворота может быть вычислена из обратной H ее транспонированием.
К сожалению, все это красиво в теории, но на практике, Вы столкнетесь с большими ошибками измерений, перенастройкой систем координат между датчиками... Для устойчивого решения этой задачи я обычно использую несколько датчиков, по-разному развернутых друг относительно друга, но там уже совсем другая математика