Увеличьте скорость 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.
Если вы хотите увеличить точность, смотрите Точность Увеличения Числовых Вычислений.