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

Увеличьте скорость MATLAB® путем сокращения точности вычислений. Уменьшайте точность при помощи арифметики переменной точности, обеспеченной vpa и функциями digits в Symbolic Math Toolbox™. Когда вы уменьшаете точность, вы получаете производительность путем сокращения точности. Для получения дополнительной информации смотрите, Выбирают Symbolic or Numeric Arithmetic.

Например, нахождение Дзета-функции Римана большого матричного 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.

Примечание

Если вы хотите увеличить точность, смотрите Точность Увеличения Числовых Вычислений.