MATLAB точность - PullRequest
       66

MATLAB точность

14 голосов
/ 06 апреля 2011

Как я могу реализовать четырехкратную точность (128-битную арифметику) в MATLAB при решении проблемы собственных значений матрицы?

Я пытаюсь решить задачу анализа линейной устойчивости для несжимаемой плоскости потока Куэтта и 64-битного значения по умолчаниюТочность MATLAB недостаточна для более высоких значений числа Рейнольдса (около 4000).

Ответы [ 3 ]

12 голосов
/ 06 апреля 2011

Вы можете выполнить арифметику переменной точности , используя Symbolic Math Toolbox в MATLAB. Вы должны получить почти такую ​​же точность, как число с плавающей запятой четверной точности , если вы используете 34 в качестве числа значащих цифр для vpa функция.

Если у вас нет доступа к Symbol Math Toolbox, я бы ознакомился с представлением "Multiple Precision Toolbox for MATLAB" из Бена Барроуза на MathWorks Обмен файлами .

8 голосов
/ 06 апреля 2011

У меня есть набор точных арифметических инструментов общей точности в MATLAB, который не требует символьных инструментов.Это доступно на Файловом обмене теперь.Например, с точностью до 200 цифр ...

>> X = hpf('1.2',200)
X =
    1.2

>> X^723 - 2
ans =
    1770275636625441478440184064843963160282702377364043536065.674784028
335311702907341138106304578079399191891193908698215227428501441099262538
4031886249461115861966367898404170725299823585166135087107488           

Если вы хотите выполнить всю арифметику с точностью до 200 цифр при использовании чисел HPF, просто укажите это как значение по умолчанию.

>> DefaultNumberOfDigits 200
>> hpf('pi')
ans =
    3.141592653589793238462643383279502884197169399375105820974944592307
816406286208998628034825342117067982148086513282306647093844609550582231
7253594081284811174502841027019385211055596446229489549303819           

HPF не является инструментом с переменной точностью, так как он работает с фиксированным числом цифр.Он достаточно эффективен с точностью до нескольких десятков тысяч цифр.Таким образом, чтобы получить 100 цифр exp (pi), это займет около 1/4 секунды.

>> timeit(@() exp(hpf('pi',100)))
ans =
   0.2643

Функции триггера тоже.Здесь 1000 цифр греха (пи).Конечно, должно быть ноль.

>> tic,sin(hpf('pi',1000)),toc
ans =
    0
Elapsed time is 0.201679 seconds.
2 голосов
/ 07 марта 2012

Multiprecision Computing Toolbox для MATLAB имеет режим быстрой четверной точности.

В частности, он способен вычислять собственные значения и векторы матрицы 100 x 100 в x70-x100 раз быстрее, чем Symbolic Math Toolbox (с той же четверной точностью).

См. Страницу Быстрые четырехкратные прецизионные вычисления в MATLAB для сравнения и подробностей.

Помимо предложенных альтернатив - Symbolic Math Toolbox и библиотека Бена Барроуза имеют существенные ограничения, см. Мой ответ здесь .

...