Максимальная длина матрицы для инвертирования матрицы на atmega32

Какая максимальная длина матрицы может быть использована для инверсии матрицы на atmega32, например, можем ли мы реализовать инверсию матрицы для матрицы 15x15 на atmega32? И если это можно сделать на atmega32... сделает ли это atmega32 медленнее? Я хочу реализовать фильтр kalamn 15 состояний для оценки углов Эйлера... данные матрицы будут с плавающей запятой..

, 👍1

Обсуждение

Это не очень четко сформулированный вопрос. Вы имели в виду конкретное приложение (чтобы его можно было оптимизировать) или вам нужен общий алгоритм обращения матриц? Что вы имеете в виду под «это сделает ATMega32 медленнее»? Нет, ATMega32 останется такой же быстрой. Ваш код может стать медленнее, но это зависит от вопроса №1: для чего вам это нужно?, @StarCat

Какой тип данных вы храните в матрице? Как определяется матрица? Пожалуйста, покажите нам код., @the busybee

Я хочу реализовать фильтр kalamn 15 состояний для оценки углов Эйлера... данные матрицы будут с плавающей запятой.., @user255471

Я хочу реализовать фильтр kalamn 15 состояний для оценки углов Эйлера... данные матрицы будут с плавающей запятой.., @user255471

*это сделает atmega32 медленнее?* - медленнее чего? Конечно, это будет медленнее, чем **без** инвертирования любых матриц., @Nick Gammon


1 ответ


1

Плавающие числа в Arduino IDE обычно имеют размер 4 байта. Таким образом, вы можете вычислить с помощью калькулятора, что ваша матрица займет не менее 15 х 15 х 4 байта (900 байт). Это из 2048 байт ОЗУ на Atmega32.

Может показаться, что оперативной памяти достаточно, но другие вещи, такие как библиотеки, также потребуют оперативной памяти. Некоторое время назад я ответил на вопрос об оперативной памяти. Даже очень простой скетч (в данном случае) занимал 346 байт.

Кроме того, вашей библиотеке или тому, что вы используете для инверсии матриц, может потребоваться ОЗУ для переменных и т. д.

Мое предложение состоит в том, чтобы заставить ваш код инвертировать очень маленькую матрицу (например, 1 x 1) и посмотреть, сколько оперативной памяти она использует. Затем вы можете довольно просто экстраполировать, сколько потребуется для большей матрицы.

,

Для инвертирования потребуется как минимум 2 массива (src, dest), поэтому 15х15 весьма сомнительно., @DataFiddler

Не могли бы вы сделать это [на месте] (https://www.mathsisfun.com/алгебра/matrix-inverse.html)? Не то чтобы библиотека, которую они предлагают использовать, обязательно это сделает., @Nick Gammon

Я вполне могу ошибаться в этом. После прочтения [Обратной матрицы с использованием элементарных операций со строками] (https://www.mathsisfun.com/алгебра/matrix-inverse-row-operations-gauss-jordan.html), похоже, вам может понадобиться больше памяти для операции инверсии., @Nick Gammon