Интерполяция рассеянных трехмерных данных электрического поля - PullRequest
0 голосов
/ 04 июля 2018

Я измерил данные электрического поля в трех измерениях следующего вида:

 pos = [x1 y1 z1
        x2 y2 z2
         .  .  . 
        x1000 y1000 z1000]
 ef = [e_x1 e_y1 e_z1
       e_x2 e_y2 e_z2
         .    .    . 
       e_x1000 e_y1000 e_z1000]

Позиции расположены в полусфере. Я хочу иметь возможность интерполировать электрическое поле в некоторой точке сферы, чтобы я получал все три значения компонентов электрического поля, а не только норму всего поля. Интерп3 не будет работать, так как точки не находятся в сетке. scatteredInterpolant нуждается в норме в качестве входных данных, а сгенерированная функция возвращает только норму. Любые предложения о том, какую функцию использовать или как решить эту проблему?

1 Ответ

0 голосов
/ 04 июля 2018

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)));

Если интерполяция каждого декартова компонента независимо не поддерживает какую-либо связь между векторными компонентами, которые вы ожидаете в этом поле, тогда вам может понадобиться другой численный метод - возможно, некоторое преобразование координат перед тем же подходом интерполяции - но это, вероятно, больше вопрос для сайта Математического стека обмена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...