[請益] 懸賞5000P 請教我把MATLAB改成C語言= =

作者: Ecampus (7.7)   2019-06-07 14:29:47
我知道有matlab coder可以寫成C
但是第一次碰 很不熟悉= = 苦手ING
以下matlab程式碼:
% 17M for the example of free body falling
% Using previous data to modified
clear all
clc
I=sparse(eye(6,6));
N=10;
O=[ 這裡10個數];
y=O';
gg=[1 2 3]; hh=eye(6,6);
aa=sparse(conv2(hh,gg,'same'));
aa=[aa];
M = sparse(eye(6));
H = sparse(zeros(1,6));
H(1,3) = 1;
Q = sparse(160*eye(6));
R = 1;
x0 = [這裡6個數];
%初始值設定成x0
X_befored = zeros(6,N);
X_saved = zeros(6,N);
Pk = sparse(eye(6)); %初始矩陣
xk = x0; %卡爾曼濾波初始值
for k=2:N
x_kp = A*xk; %公式 1
%將公式1 計算得到的在k時間卡爾曼濾波估計值 xk ,存在X_saved的第 k-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
%提取卡爾曼估計值中的,第3列
xhat_3 = X_saved(3,:);
....請問上面這組程式碼 怎麼用matlab coder轉成C
作者: Ecampus (7.7)   2019-06-07 15:07:00
我還在想說 是不是每個參數都要用CODER定義成函數= =?
作者: sunev (Veritas)   2019-06-07 18:07:00
vector用sparse沒什麼意思,公式3不是直接取值嗎?
作者: Ecampus (7.7)   2019-06-07 23:17:00
vector因為裡面很多零...所以我設成sparse公式3是直接取值 式的
作者: sunev (Veritas)   2019-06-08 11:44:00
只針對matlab的部份,有不少效能上可能可以改進的地方
作者: Ecampus (7.7)   2019-06-08 12:40:00
!?是嗎 可以請問一下大概的方向嗎? 我已經改了幾次@@
作者: sunev (Veritas)   2019-06-08 13:00:00
就如我上面所說的,取值直接取,向量不要用sparse
作者: Ecampus (7.7)   2019-06-08 23:23:00
啊 我這個向量其實數量很多 而且超過99.9%都是零所以用sparse比較快經過嘗試了XD取值直接取會比較快嗎 我公式1~5都是要迭代的 迭代十萬次有時間前後關係的
作者: sunev (Veritas)   2019-06-08 23:43:00
我覺得直接取值會比較快,所有索涉到H的公式都可以換掉

Links booklink

Contact Us: admin [ a t ] ucptt.com