scatteredInterpolant
интерполирует только один столбец выборок за раз, но один из способов интерполировать векторное поле - это интерполировать каждый компонент вектора независимо.
Это просто с scatteredInterpolant
.
componentInterpolants = cellfun(@(v) {scatteredInterpolant(pos,v)}, num2cell(ef,1));
Это дает вам массив ячеек из трех scatteredInterpolant
объектов, по одному на каждый декартовой компонент поля. Оценивая каждый из них отдельно для указанных координат и объединяя результат, вы получаете вектор электрического поля для каждой заданной координаты. Вы можете определить вспомогательную функцию, чтобы получить полное интерполированное векторное поле для заданных координат отсчета:
efInterpolant = @(coords) cell2mat(cellfun(@(interpolant) {interpolant(coords)}, componentInterpolants));
Убедитесь, что это точно интерполирует исходное векторное поле (за исключением ошибки с плавающей запятой):
assert(all(all(abs(ef - efInterpolant(pos)) < eps * 2)));
Если интерполяция каждого декартова компонента независимо не поддерживает какую-либо связь между векторными компонентами, которые вы ожидаете в этом поле, тогда вам может понадобиться другой численный метод - возможно, некоторое преобразование координат перед тем же подходом интерполяции - но это, вероятно, больше вопрос для сайта Математического стека обмена.