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

看板MATLAB作者時間2年前 (), 2年前編輯推噓5(509)
留言14則, 2人參與, 2年前最新討論串1/1
我知道有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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.38.135.82 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1559888989.A.B7F.html

06/07 15:07, 2年前 , 1F
我還在想說 是不是每個參數都要用CODER定義成函數= =?
06/07 15:07, 1F

06/07 18:07, 2年前 , 2F
vector用sparse沒什麼意思,公式3不是直接取值嗎?
06/07 18:07, 2F

06/07 23:17, 2年前 , 3F
vector因為裡面很多零...所以我設成sparse
06/07 23:17, 3F

06/07 23:18, 2年前 , 4F
公式3是直接取值 式的
06/07 23:18, 4F

06/08 11:44, 2年前 , 5F
只針對matlab的部份,有不少效能上可能可以改進的地方
06/08 11:44, 5F

06/08 12:40, 2年前 , 6F
!?是嗎 可以請問一下大概的方向嗎? 我已經改了幾次@@
06/08 12:40, 6F

06/08 13:00, 2年前 , 7F
就如我上面所說的,取值直接取,向量不要用sparse
06/08 13:00, 7F

06/08 23:23, 2年前 , 8F
啊 我這個向量其實數量很多 而且超過99.9%都是零
06/08 23:23, 8F

06/08 23:24, 2年前 , 9F
所以用sparse比較快
06/08 23:24, 9F

06/08 23:24, 2年前 , 10F
經過嘗試了XD
06/08 23:24, 10F

06/08 23:24, 2年前 , 11F
取值直接取會比較快嗎 我公式1~5都是要迭代的 迭代十萬次
06/08 23:24, 11F

06/08 23:24, 2年前 , 12F
有時間前後關係的
06/08 23:24, 12F

06/08 23:43, 2年前 , 13F
我覺得直接取值會比較快,所有索涉到H的公式都可以換掉
06/08 23:43, 13F
抱歉 由於模型本身的力學特性 必須要用矩陣 ※ 編輯: Ecampus (36.233.107.158 臺灣), 06/09/2019 01:00:11

06/09 13:31, 2年前 , 14F
這是數學,除非你式子寫錯了
06/09 13:31, 14F
文章代碼(AID): #1S-WHTj_ (MATLAB)
文章代碼(AID): #1S-WHTj_ (MATLAB)