看板 MATLAB 關於我們 聯絡資訊
以下是kalman-filter五條公式 https://imgur.com/a/85OkG https://imgur.com/a/kCCjz 下面是kalman濾波器的程式碼: 我想把kalman-filter(卡爾曼濾波器)用在「修正河川液體濃度擴散」 x(:,1,k) = A*x(:,1,k-1)+U; p(:,:,k) = A*p(:,:,k-1)*A'; kg(:,1,k) = p(:,:,k)*H' / (H*p(:,:,k)*H'+R); x(:,1,k)=x(:,1,k)+kg(:,1,k)*(y(k-1)-H*x(:,1,k-1)); x0= 不知道怎麼處理 ??????????? ; p(:,:,k)=(II-kg(:,1,k)*H)*p(:,:,k);; % k是總迭代次數(k表不同時間,k=1秒、2秒、3秒、4秒....) [x]跟[A]是矩陣式,所有參數或矩陣都已知。 [x]矩陣,是擴散後的液體濃度的推估值 [x]矩陣格式如下: [ A B C D . . . . ] A為0公尺處的濃度推估值 B為10公尺處的濃度推估值 C為20公尺處的濃度推估值 D為30公尺處的濃度推估值 以此類推下去,假設終點為100公尺處。 如果我想貯存某一點(譬如B點)隨著時間的不同液體濃度,該如何設定x0 . . . . . 我各項參數都有了(A矩陣、p矩陣、U矩陣、k是總迭代次數) 但有一個小地方,我不知道該如何處理。 就是x0如何處理? x0的數學含義就是把每次叠代k狀態下的x值貯存起來方便最後做圖 (和觀測值y以及理論值y0對比) 物理意義是把卡爾曼濾波算法得到的每一k時刻的位移值放在x0中, 於是x0就是每一時刻的濃度值 但是在此處,我不知道我這個題目的x0該如何設定=.=... 假設這裡迭代10次好了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.230.90.99 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1525604370.A.165.html
LiamIssac: 加個index就好 x0(k) 05/06 19:18
※ 編輯: Ecampus (125.230.93.172), 05/06/2018 22:08:45
sppmg: 同一樓。一般會在迴圈外預先分配陣列空間(用 x0=zeros(1,k) 05/07 04:53
sppmg: 或是 x0(k)=0 ,後者據說比較快),避免每次迴圈 MATLAB 須 05/07 04:54
sppmg: 要像系統要求記憶體並複製資料的時間耗損。 05/07 04:54
sppmg: 另外,如果你今天不是每個k都要紀錄,可以另設一個專用變數 05/07 04:58
sppmg: 。進迴圈前 n=1 ,迴圈內 x0(n)=… ; n=n+1 05/07 04:58
sppmg: (不用p幣,給一樓吧!) 05/07 04:58