Точность MATLAB

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

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

Ответ 1

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

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

Ответ 2

В MATLAB у меня есть арифметический инструментарий с арифметикой с плавающей точкой с высокой точностью, который не требует символического инструментария. Теперь он доступен в File Exchange. Например, в 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 цифр греха (pi). Он должен быть нулевым, конечно.

>> tic,sin(hpf('pi',1000)),toc
ans =
    0
Elapsed time is 0.201679 seconds.

Ответ 3

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

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

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

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