Эффективная интерполяция по одному измерению матрицы 5D

#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 with X2 = Xq2 to Xn = Xqn должно быть таким же, или я не могу прочитать ваш код.

3. Спасибо, ребята! Извините, если это сбивает с толку. Я попробовал interpn, но это не сработало. В основном мой код выполняет интерполяцию по направлению x1 для всех комбинаций x2, x3, u1, u2 и u3. Кроме того, этот код фактически вложен в другой цикл for , поэтому каждый раз, когда он возвращается в цикл, у него появляется новый J_STAR . Итак, J_STAR — это место, где определены мои штрафные данные для состояний (x), а в моей таблице table_x1 есть все данные, которым я хочу назначить штрафы.