Точность 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 и Бен Барроуз библиотека имеет существенные ограничения, см. Мой ответ здесь.