作者Ecampus ()
看板MATLAB
标题[请益] 悬赏5000P 请教我把MATLAB改成C语言= =
时间Fri Jun 7 14:29:47 2019
我知道有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://webptt.com/cn.aspx?n=bbs/MATLAB/M.1559888989.A.B7F.html
1F:→ Ecampus: 我还在想说 是不是每个参数都要用CODER定义成函数= =? 06/07 15:07
2F:推 sunev: vector用sparse没什麽意思,公式3不是直接取值吗? 06/07 18:07
3F:→ Ecampus: vector因为里面很多零...所以我设成sparse 06/07 23:17
4F:→ Ecampus: 公式3是直接取值 式的 06/07 23:18
5F:推 sunev: 只针对matlab的部份,有不少效能上可能可以改进的地方 06/08 11:44
6F:→ Ecampus: !?是吗 可以请问一下大概的方向吗? 我已经改了几次@@ 06/08 12:40
7F:推 sunev: 就如我上面所说的,取值直接取,向量不要用sparse 06/08 13:00
8F:→ Ecampus: 啊 我这个向量其实数量很多 而且超过99.9%都是零 06/08 23:23
9F:→ Ecampus: 所以用sparse比较快 06/08 23:24
10F:→ Ecampus: 经过尝试了XD 06/08 23:24
11F:→ Ecampus: 取值直接取会比较快吗 我公式1~5都是要迭代的 迭代十万次 06/08 23:24
12F:→ Ecampus: 有时间前後关系的 06/08 23:24
13F:推 sunev: 我觉得直接取值会比较快,所有索涉到H的公式都可以换掉 06/08 23:43
抱歉 由於模型本身的力学特性 必须要用矩阵
※ 编辑: Ecampus (36.233.107.158 台湾), 06/09/2019 01:00:11
14F:推 sunev: 这是数学,除非你式子写错了 06/09 13:31