Fw: [討論] 我的矩陣很大,該如何縮短運算時間?請問

看板Programming作者時間6年前 (2018/06/23 13:15), 編輯推噓1(108)
留言9則, 3人參與, 6年前最新討論串1/1
※ [本文轉錄自 MATLAB 看板 #1RBTTeNr ] 作者: Ecampus () 看板: MATLAB 標題: [討論] 我的矩陣很大,該如何縮短運算時間?請問 時間: Sat Jun 23 13:15:18 2018 I=eye(6000,6000); O=[一個3084行*1列的矩陣]; y=O' dt=1; gg=[6.7525 -12 6.2475]; hh=eye(6000); bb=conv2(hh,gg,'same'); C=[bb]; M = eye(6000); A = inv(M/dt)*((M/dt)-C); U = 0; H = zeros(1,6000); H(1,2300) = 1; Q = 10*eye(6000); R = 1; x0=[一個6000行*1列的矩陣] %X_saved 用來存放每隔時間點,濾波估計值值 %X_saved 的第i行就是,濾波在時間i分鐘的估計值 %在i分鐘卡爾曼濾波估計值,是一個6000維的行向量 %該向量由上到下,代表河川 100,200,300,...,3600公尺的估計值(透過濾波估計) X_befored = zeros(6000,N); X_saved = zeros(6000,N); Pk = eye(6000); xk = x0; for k=2:N x_kp = A*xk; %公式 1 X_befored(:, k-1) = x_kp; P_kp = A*Pk*A'+ Q; %公式 2 K = (P_kp*H') / (H*P_kp*H'+ R); %公式 3 xk = x_kp + K*(y(k-1)-H*x_kp); %公式 4 %將公式4 計算得到的在k時間的濾波估計值 xk ,存在X_saved的第 k-1 行 X_saved(:, k-1) = xk; Pk = (I - K*H)*P_kp; %公式 5 end %提取濾波估計值中的,第2300列 %2300列,代表在河水2300 公尺處,從0秒~3084秒的染劑濃度估計值 xhat_2300 = X_saved(2300,:); t=1:dt:3084; %一個時間單位為1秒 figure; plot(t,y,t,xhat_2300); title('在河川 2300 公尺處的測量值與濾波估計'); xlabel('時間(每1分)'); ylabel('染劑濃度'); legend('測量值','Kalman estimator'); xlim([0,3500]); %限制x軸畫圖範圍 ================================= 昨天跑一整天跑不完 =.= 請問有方法可以縮短運算時間 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.224.111.4 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1529730920.A.5F5.html ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 轉錄者: Ecampus (125.224.111.4), 06/23/2018 13:15:35

06/28 23:13, 6年前 , 1F
matlab?有nvidia gpu的話弄gpuArray試
06/28 23:13, 1F

06/28 23:13, 6年前 , 2F
試?
06/28 23:13, 2F

06/28 23:16, 6年前 , 3F
反正要加速不是改算法就是改成平行的,
06/28 23:16, 3F

06/28 23:16, 6年前 , 4F
平行看是用parfor或是gpuArray
06/28 23:16, 4F

06/29 08:39, 6年前 , 5F
我猜你的矩陣是稀疏矩陣
06/29 08:39, 5F

06/29 08:39, 6年前 , 6F
去GOOGLE稀疏矩陣求解吧
06/29 08:39, 6F

06/29 16:06, 6年前 , 7F
感謝 6/23當天有改成稀疏矩陣了^^~
06/29 16:06, 7F

06/29 16:07, 6年前 , 8F
但還是要費不少時間 所以我想改成parfor
06/29 16:07, 8F

06/29 16:07, 6年前 , 9F
parfor+gpuArray
06/29 16:07, 9F
文章代碼(AID): #1RBTTuB7 (Programming)
文章代碼(AID): #1RBTTuB7 (Programming)