MATLAB 2 2 JIT time 1 toc vectorized
MATLAB 程式設計入門篇:通用運算式 2 -2 JIT加速器 time 1 = toc; % 第二種方法:vectorized operation tic total = sum(sin(1. /(1: n))); time 2 = toc; % 計算倍數 ratio(i)=time 1/time 2; end plot(ns, ratio, '. -'); grid on xlabel('n'); ylabel('time 1/time 2'); n 由此圖可以看出, time 1/time 2 的值都在 1 左 右,甚至常比 1 還低,顯示 JIT 加速器的效能非常優異。
MATLAB 程式設計入門篇:通用運算式 2 -2 JIT加速器 n 使用「不需要額外空間」的向量化運算來提昇 效率: n 範例2 -9: mat. Multiply 01. m ns = 10: 50: 1200; for j=1: length(ns) n = ns(j); a = rand(n); b = rand(n); % 第一種方法:for-loop operation c = zeros(n); tic for p = 1: n for q = 1: n c(p, q) = a(p, q)*b(p, q); end
MATLAB 程式設計入門篇:通用運算式 2 -2 JIT加速器 end time 1(j)=toc; % 第二種方法:vectorized operation tic c = a. *b; time 2(j)=toc; end subplot(2, 1, 1); plot(ns, time 1, 'v-', ns, time 2, '^-'); grid on legend('time 1 for-loop code', 'time 2 for vectorized code'); xlabel('n'); ylabel('second'); subplot(2, 1, 2); plot(ns, time 1. /time 2, '. -'); grid on xlabel('n'); ylabel('time 1/time 2');
MATLAB 程式設計入門篇:通用運算式 2 -3 矩陣的預先配置 n 計算矩陣 A 的 n 次方的行列式,其中 n = 1~20000,可輸入如下: n 範例2 -10: pre. Allocate 01. m A = [1 2; 3 4]; n = 20000; clear det. Value; tic for i = 1: n det. Value(i) = det(A^i); end time 1=toc; det. Value = zeros(1, n); tic for i = 1: n det. Value(i) = det(A^i); % 清除變數 det. Value % 預先配置所須矩陣
MATLAB 程式設計入門篇:通用運算式 2 -3 矩陣的預先配置 end time 2=toc; fprintf('time 1 = %g, time 2 = %g, time 1/time 2 = %gn', time 1, time 2, time 1/time 2); time 1 = 4. 45023, time 2 = 0. 457984, time 1/time 2 = 9. 71699 n 上述範例中,使用 det. Value = zeros(1, n) 來事 先宣告 det. Value 所佔用的空間,因此程式碼的執 行效率快了將近 10 倍。
- Slides: 27