Увеличение MATLAB®"s скорость путем снижения точности ваших вычислений. Уменьшите точность при помощи арифметики переменной точности, предоставленной vpa
и digits
функции в Symbolic Math Toolbox™. Когда вы снижаете точность, вы набираете эффективность, снижая точность. Для получения дополнительной информации смотрите Выбрать числовую или символьную арифметику.
Например, нахождение дзета-функции Римана от большой матрицы C
занимает много времени. Во-первых, инициализируйте C
.
[X,Y] = meshgrid((0:0.0025:.75),(5:-0.05:0)); C = X + Y*i;
Затем найдите время, необходимое для вычисления zeta(C)
.
tic zeta(C); toc
Elapsed time is 340.204407 seconds.
Теперь повторите эту операцию с меньшей точностью при помощи vpa
. Во-первых, измените точность, используемую vpa
к более низкой точности 10
цифры при помощи digits
. Затем используйте vpa
чтобы уменьшить точность C
и найти zeta(C)
снова. Операция проходит значительно быстрее.
digits(10) vpaC = vpa(C); tic zeta(vpaC); toc
Elapsed time is 113.792543 seconds.
Примечание
vpa
выход символьный. Чтобы использовать символьный выход с функцией MATLAB, которая не принимает символические значения, преобразуйте символические значения в двойную точность при помощи double
.
Для больших матриц различие во времени расчета может быть еще более значительной. Для примера рассмотрим 1001
-by- 301
матрица C
.
[X,Y] = meshgrid((0:0.0025:.75),(5:-0.005:0)); C = X + Y*i;
Выполняемые zeta(vpa(C))
с 10-значной точностью занимает 15 минут, во время бега zeta(C)
принимает в три раза больше.
digits(10) vpaC = vpa(C); tic zeta(vpaC); toc
Elapsed time is 886.035806 seconds.
tic zeta(C); toc
Elapsed time is 2441.991572 seconds.
Примечание
Если необходимо увеличить точность, см. Раздел «Увеличение точности числовых вычислений».