Собственные векторы, вычисление фиксированной точки собственных значений в C

** Отредактировано **

Я попытался изменить упомянутый алгоритм Якоби на фиксированную точку, используя libfixmath, но я не получаю правильных результатов. . Что я пропустил??

отредактированный код Якоби

создать файл


C новичком здесь. Я каким-то образом загнал себя в пучину и не могу найти выход. Если бы вы могли помочь, это было бы здорово!

Ситуация: я пытаюсь реализовать алгоритм ICA на C. Я сделал это, используя арифметику с плавающей запятой (double, float). Теперь я хочу, чтобы этот код преобразовал его в фиксированную точку, чтобы я мог импортировать его на 32-битный микроконтроллер ARM (поэтому я не могу использовать двойное число, число с плавающей запятой и т. д.).

Я нашел четыре библиотеки, которые, я думаю, могут мне помочь:

  1. http://sourceforge.net/projects/avrfix/files/
  2. http://www.dsprelated.com/showcode/40.php
  3. http://sourceforge.net/p/fixedptc/code/ci/default/tree/
  4. libfixmath

Я не использовал 1. 2. или 3. В настоящее время я пробую libfixmath, потому что почти все вычисления выполняются с матрицами.

Моя проблема заключается в попытке найти собственные значения и собственные векторы матрицы ковариации (положительная симметричная матрица 3x3). Я искал библиотеки или функции, которые выполняют собственное разложение, SVD и т. д., но ничего не нашел.

Как сделать такие вычисления в фиксированной точке? Есть ли какие-либо функции/библиотеки, которые я не нашел? Должен ли я изменить собственную функцию, которая у меня есть в плавающей запятой (построчное преобразование в фиксированную точку - т.е. fix16_from_dbl() )?

Моя текущая собственная функция (не моя, конечно, я думаю, что она из числовых рецептов)

jacobi.h

Другой актуальный вопрос: вот фиксированный SVD StackOverflow

****Это мой первый вопрос, если есть что поправить в моем вопросе, пожалуйста, так и скажите....не ешьте меня заживо! :)

** Отредактировано **

libfixmath делает Cholesky1, wiki2 и QR-разложение.

Я пытался поиграть с математикой и получить собственные векторы или собственные значения матрицы с этими данными (данными из вышеуказанных функций), но мне это не удалось.

Если кто знает как это сделать, то проблема решена.

*Должен ли я опубликовать его на веб-сайте математического стека?

1 http://rosettacode.org/wiki/Cholesky_decomposition

2 http://en.wikipedia.org/wiki/Cholesky_decomposition#The_Cholesky.E2.80.93Banachiewicz_and_Cholesky.E2. 80.93Crout_algorithms


person Franx    schedule 16.02.2015    source источник


Ответы (1)


Как насчет Научная библиотека GNU? Он имеет количество функций, связанных с декомпозицией собственных значений.

Вы можете использовать что-то вроде IQMath для преобразования с плавающей запятой в фиксированную -точка. Есть также ряд ответов на аналогичный вопрос здесь

person logc    schedule 16.02.2015
comment
Может быть, я что-то не понял, но есть ли в GSL функции для математики/операций с фиксированной точкой? Как я увидел из предложенного вами gsl_eigen.h, все объявлено как двойное. Разве double не является типом с плавающей запятой? - person Franx; 16.02.2015
comment
Ты прав. Позвольте мне немного рассказать о других альтернативах, которые могут вам помочь. - person logc; 16.02.2015
comment
IQMath действительно полезный инструмент. Но на данный момент эта моя простая программа не дает мне ничего большего (я думаю), чем другие библиотеки, которые я упомянул. - person Franx; 23.02.2015