Я реализую фильтр частиц в Matlab. Я получаю вышеупомянутую ошибку, если я пытаюсь векторизовать мой код. Тем не менее, это работает хорошо, если я не векторизовать. Мне нужно векторизовать его, чтобы сэкономить время для цикла. Любая помощь будет оценена. Я просмотрел другие посты, посвященные тем же вопросам, но не смог получить никакой полезной информации для моей проблемы с сетчаткой.
Векторизованный код
n = size(X_kmin1,1);
X_k = proc_f(X_kmin1) + mvnrnd(zeros(n,1),proc_Q)';
ykp = meas_h(X_k);
pyx = exp(-0.5 * (yk-ykp)' * ((meas_R)^-1) * (yk-ykp));
W_k = W_kmin1*pyx;
Wt = sum(W_k);
W_k = W_k/Wt;
Сообщение об ошибке
Out of memory. Type "help memory" for your options.
Error in pfFilterStep (line 24)
pyx = exp(-0.5 * ((yk-ykp)' * (meas_R)^-1 * (yk-ykp)));
Error in Test1 (line 32)
[X_k, W_k] = pfFilterStep(X_kmin1, W_kmin1, yk, proc_f, proc_Q, meas_h, meas_R);
Рабочий код
% Input:
% X_kmin1 [n x N] Particles for state x in time k-1
% W_kmin1 [1 x N] Weights for state x in time k-1
% y_k [m x 1] Measurement vector for time k
% proc_f Handle for process function f(x_k-1)
% proc_Q [n x n] process noise covariance
% meas_h Handle for measurement model function h(x_k)
% meas_R [m x m] measurement noise covariance
%
% Output:
% X_k [n x N] Particles for state x in time k
% W_k [1 x N] Weights for state x in time k
% Your code here!
n = size(X_kmin1,1);
N = size(X_kmin1,2);
for i = 1:N
X_k(:,i) = proc_f(X_kmin1(:,i)) + mvnrnd(zeros(n,1),proc_Q)';
ykp = meas_h(X_k(:,i));
pyx = exp(-0.5 * ((yk-ykp)' * (meas_R)^-1 * (yk-ykp)));
W_k(i) = W_kmin1(i)*pyx;
end
Wt = sum(W_k);
W_k = W_k/Wt;
end