Точность MATLAB
Как я могу реализовать четырехкратную точность (128-битная арифметика) в MATLAB при решении задачи на собственные значения матрицы ?
Я пытаюсь решить задачу анализа линейной устойчивости для несжимаемого плоского потока Куэтта, и 64-битной точности по умолчанию MATLAB недостаточно для более высоких значений числа Рейнольдса (около 4000).
3 ответов
вы можете выполнить переменная точность арифметики С помощью Symbolic Math Toolbox в MATLAB. Вы должны получить примерно такую же точность как четырехкратное точное число с плавающей запятой Если вы используете 34
в количестве значащих цифр на VPA.
Если у вас нет доступа к символическому Math Toolbox, я бы проверил представление " множественный набор инструментов точности для MATLAB" С Бен Barrowes на Обмен Файлами MathWorks.
у меня есть общий точный арифметический набор инструментов с плавающей запятой в 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.
Multiprecision Computing Toolbox для MATLAB имеет быстрый четырехшпиндельный режим точности.
в частности, он способен вычислять собственные значения и векторы матрицы 100 x 100 в x70-x100 раз быстрее, чем Symbolic Math Toolbox (используя ту же четырехкратную точность).
посмотреть быстрые четырехкратные вычисления точности в MATLAB страница для сравнений и деталей.
кроме предложенных альтернатив-Symbolic Math Toolbox и Бен Барроуз библиотека имеет существенные ограничения, см. Мой ответ здесь.