exponenta event banner

Увеличение скорости за счет снижения точности

Увеличьте скорость MATLAB ®, снизив точность вычислений. Уменьшите точность, используя арифметику переменной точности, предоставляемую vpa и digits функции в символьных математических 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около-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.

Примечание

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