Численная проблема при вычислении дополнительной проекции

Я использую Matlab для вычисления следующей проблемы:

A, B два m от n ортогональные матрицы, A'*A = I а также B'*B = I где I это единичная матрица. А также m намного больше чем n, Я вычисляю C = (2B*B'-I)*A, который также является ортогональной матрицей.

Но в Matlab точность числа приводит к следующей проблеме:

max(max(abs(A'*A-I))) = e0 > 0
max(max(abs(B'*B-I))) = e0 > 0

И вычислил C имеет max(max(abs(C'*C-I))) = e1 > e0,

Если я повторю вышеупомянутый процесс, вычисляя D = (2C*C'-I)*Bэта ошибка связана поднять на DС увеличением числа таких итераций эта ошибка взрывается.

Есть ли способ вычислить без увеличения этой ошибки?

Спасибо!

1 ответ

Решение

Как правило, чем больше вычислений и преобразований вы выполняете, тем больше вам нужно беспокоиться об ошибке с плавающей запятой.

Чтобы смягчить последствия, есть несколько возможностей:

1) Используйте программное обеспечение, такое как Maple или Mathematica, которое поддерживает точную арифметику, что в основном устранит проблему за счет большей вычислительной нагрузки. Насколько я понимаю, Matlab не поддерживает точную арифметику (но я могу ошибаться в этом...)

2) Используйте более высокую точность, чем Double, чтобы уменьшить ошибку с плавающей запятой. Например, отправка FEX Multiple Precision Toolbox для MATLAB утверждает, что поддерживает произвольно большие форматы точности. Я никогда не использовал его сам, поэтому я не могу комментировать, насколько хорошо это работает.

3) В зависимости от относительных величин чисел в ваших матрицах, могут быть некоторые числовые приемы или преобразования, которые вы можете использовать для уменьшения ошибки с плавающей запятой. Это большая тема, но в целом идея состоит в том, чтобы попытаться масштабировать вашу проблему так, чтобы все числа были как можно ближе друг к другу в порядке величины.

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

О, еще одна вещь, я просто наткнулся на тесно связанный вопрос ТАК.

Другие вопросы по тегам