Увеличение скорости путем снижения точности

Увеличение 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.

Примечание

Если необходимо увеличить точность, см. Раздел «Увеличение точности числовых вычислений».