Работайте только с 8 десятичными знаками в октаве - PullRequest
1 голос
/ 14 апреля 2020

Когда собственные значения матриц с целочисленными записями (даже матрицы 3x3) вычисляются в Octave, иногда он сообщает значение с плавающей запятой, например, 9.1940e-17, тогда как в действительности оно должно быть нулевым.

Хотя я могу Приблизительный ответ до нескольких десятичных знаков позже, он все равно будет внутренне рассчитывать до 17 десятичных знаков при расчете собственного значения и времени вычисления отходов. Можно ли работать только с чем-то вроде 8 десятичных знаков для всех величин с начала?

Если это невозможно, можно ли сказать октаве (раз и навсегда в сценарии) приблизить все количество до 8 знаков после запятой при сообщении?

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

В дополнение к ответу Даниэля дополнительная точность не требует дополнительного времени. Компьютер работает с целым числом, а не с отдельными цифрами.

Возможно, вы захотите использовать

A(abs(A)<1e-8) = 0;

после вычисления вашего окончательного результата A, чтобы установить почти нулевые значения в ноль.

2 голосов
/ 14 апреля 2020

То, о чем вы просите, не поможет, оно ухудшит ситуацию. Установка точности до 8 десятичных знаков (или значащих цифр) не приведет к исчезновению числовых ошибок, это увеличит числовые ошибки до этой величины. Возьмем простой расчет:

x=1/3
y=x*6

Теперь вы получите 1.99999998, гораздо большую ошибку.

Существуют библиотеки, которые делают наоборот, увеличивая точность. В Октаве это называется vpa .

...