Собственный код не работает в режиме выпуска, но работает в режиме отладки

Привет всем, кто использует Eigen, я столкнулся со странным вопросом здесь.

Я реализовал фильтр без запаха Калмана с собственный.

На моем ПК это работает очень хорошо, но тот же фрагмент кода вызовет ошибку сегментации в моей встроенной системе, Odroid XU Архитектура Armv7.

После нескольких часов отладки я обнаружил, что проблема была с этой частью:

qrSolver.compute(OS.transpose());
m_q=qrSolver.householderQ();
m_r = qrSolver.matrixQR().triangularView<Upper>();

S_pre = m_r.block(0,0,n,n).transpose();

if (w_c0 < 0)
internal::llt_inplace<float,Upper>::rankUpdate(S_pre,
sqrt(-w_c0)*(sigmaPoints.col(0) - state_pre),
-1);
else
internal::llt_inplace<float,Upper>::rankUpdate(S_pre,
sqrt(w_c0)*(sigmaPoints.col(0) - state_pre),
1);

где я сначала вычисляю QR-разложение матрицы Операционные системы (измерение n-by-3n), а затем выполнить обновление ранга его компонента R (измерение n-by-n). внутренний :: llt_inplace :: rankUpdate это функция в библиотеке Eigen, которая не документирована Он просто выполняет обновление ранга 1 до первого аргумента. Эту функцию можно найти в ~ / path_to_Eigen / Cholesky / LLT.h

Самое странное в этом фрагменте кода -DCMAKE_BUILD_TYPE = Debug он отлично работает, а если я скомпилирую с -DCMAKE_BUILD_TYPE = Release, этот код не работает.

Я хотел бы спросить, может ли кто-нибудь понять это или у кого-то есть подобные проблемы раньше. Пожалуйста, помогите, большое спасибо.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]