[讨论] 我的矩阵很大,该如何缩短运算时间?请问

楼主: Ecampus (7.7)   2018-06-23 13:15:18
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轴画图范围
=================================
昨天跑一整天跑不完
=.= 请问有方法可以缩短运算时间
作者: LiamIssac (Madchester)   2018-06-23 13:26:00
有些矩阵可以用sparse 然后不需要的变量记得delete用sparse一定要确认很多0 不然只会更慢另外 你有要跟文献比时间吗? 没有的话 其实时间没差
作者: kanonehilber (隐居处)   2018-06-24 02:32:00
没很仔细看 感觉有机会用GPU
作者: VIATOR (阿布拉卡达不拉)   2018-06-24 03:46:00
parfor可以吗?

Links booklink

Contact Us: admin [ a t ] ucptt.com