У меня есть векторы Ll, Lh, x и alp размеров NL, NL, Nx и Nalp соответственно.У меня также есть матрица G размером NL * NL * Nx * Nalp.G является функцией от Ll, Lh, x и alp.Вместе у меня есть сеточные массивы и выборочные значения в G.
Для каждого x и alp я создаю интерполяцию и сохраняю в массиве ячеек.Ниже приведен фрагмент кода:
for ixs=1:Nx
for ias=1:Nalp
Gn(:,:,ixs, ias)={griddedInterpolant({Ll, Lh}, G(:,:,ixs, ias),'linear', 'none')};
end
end
Плюсы: по сравнению с interp2 это очень быстро, особенно потому, что мне приходится многократно оценивать Gn.
Минусы: (1) Требуетсямного памяти, и (2) не может быть легко векторизовано, чтобы избежать дополнительного цикла следующего вида (который снова оценивается много раз)
for ixs=1:Nx
for ias=1:Nalp
GGn=Gn{:,:, ixs, ias};
SomeVector(ixs, ias)*GGn(Llnx, Lhnx);
end
end
(a) Если бы я мог как-тоВекторизация всего класса griddedInterpolant с именем Gn, я мог бы оптимизировать в последнем цикле, и (б) Если бы я мог сохранить вектор Ll и Lh только один раз, я мог бы использовать память более эффективно.
Мне нужна вашаПомогите.Точно, как я могу сделать это более эффективно?Спасибо.
Best,
BK
РЕДАКТИРОВАТЬ: Решение было бы создать функцию Gn, которая принимает Ll и Lh в качестве аргументов, учитывая x и alp.Gn возвращает массив функциональных дескрипторов, по одному для каждого (x, alph).Затем вызов Gn (Llnx, Lhnx, x, alp) возвращает интерполированное значение.Теперь (Llnx, Lhnx, x, alp) могут быть массивами одного и того же числа элементов.Любой эффективный способ, который использует код профессионала?