#matlab #multidimensional-array #interpolation
#matlab #многомерный массив #интерполяция
Вопрос:
Следующий код делает то, что мне нужно, и я не могу найти более эффективный способ сделать это. По сути, мне нужно только интерполировать по 1 измерению матрицы 5D. Может кто-нибудь, пожалуйста, просветить меня о том, как сделать это в MATLAB более эффективно? Спасибо!
% Define Parameters
BETA = 11000;
Desired_SOC = 0.55;
u1_length = 15;
u2_length = 3;
u3_length = 2;
x2_length = 2;
x3_length = 6;
x1_grid = [0.4:0.05:0.8]';
% Not really my data, but it will sufice
table_x1 = repmat(x1_grid,[1, x2_length,x3_length,u1_length,u2_length,u3_length]);
J_STAR = BETA*(x1_grid - Desired_SOC).^2;
tic;
SOC_State_Penalty = single(zeros(x1_length,x2_length,x3_length,u1_length,u2_length,u3_length));
for x2 = 1:x2_length
for x3 = 1:x3_length
for u1 = 1:u1_length
for u2 = 1:u2_length
for u3 = 1:u3_length
F = griddedInterpolant(x1_grid,J_STAR(:,x2,x3),'linear'); % Just need to penalize the SOC
SOC_State_Penalty(:,x2,x3,u1,u2,u3) = F(table_x1(:,x2,x3,u1,u2,u3));
end
end
end
end
end
toc;
Комментарии:
1.
reshape
к вектору 1d, использоватьinterp1
для правильного размера блока иreshape
обратно?2. Использование
interpn
withX2
=Xq2
toXn
=Xqn
должно быть таким же, или я не могу прочитать ваш код.3. Спасибо, ребята! Извините, если это сбивает с толку. Я попробовал interpn, но это не сработало. В основном мой код выполняет интерполяцию по направлению x1 для всех комбинаций x2, x3, u1, u2 и u3. Кроме того, этот код фактически вложен в другой цикл for , поэтому каждый раз, когда он возвращается в цикл, у него появляется новый J_STAR . Итак, J_STAR — это место, где определены мои штрафные данные для состояний (x), а в моей таблице table_x1 есть все данные, которым я хочу назначить штрафы.