Интерполяция неравномерно расположенной трехмерной матрицы в Matlab - PullRequest
3 голосов
/ 23 февраля 2012

У меня есть временной ряд температурных профилей, которые я хочу интерполировать, я хочу спросить, как это сделать, если мои данные расположены нерегулярно.

Вот особенности матрицы:

  • Температура 30x365
  • Время 1x365
  • Глубина 30x1

Время и глубина расположены нерегулярно.Я хочу спросить, как я могу интерполировать их в регулярную сетку?

Я смотрел на interp2 и TriScatteredInterp в Matlab, однако проблема заключается в следующем:

  1. interp2 работает, только если данные находятся в регулярной сетке.
  2. TriscatteredInterp работает, только если векторы являются векторами столбцов.Хотя время и глубина являются векторами столбцов, температура - нет.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 25 февраля 2012

Функция Interp2 вообще не требует равномерно распределенной измерительной сетки, она требует только монотонной единицы. То есть позиции выборки, хранящиеся в векторах depths и times, должны увеличиваться (или уменьшаться), и все.

Предполагая, что это действительно ситуация * и что вы хотите интерполировать в обычные позиции **, сохраненные в векторах rdepths и rtimes, вы можете сделать:

[JT, JD] = meshgrid(times, depths); %% The irregular measurement grid
[RT, RD] = meshgrid(rtimes, rdepths); %% The regular interpolation grid
TemperaturesOnRegularGrid = interp2(JT, JD, TemperaturesOnIrregularGrid, RT, RD);


* : Если нет, вы можете отсортировать строки и столбцы, чтобы вернуться к монотонной сетке.
*
*: Фактически Interp2 не имеет ограничений для выходной сетки (она может быть нерегулярной или даже немонотонной).

0 голосов
/ 25 февраля 2012

Попробуйте инструмент GridFit на MATLAB central от John D'Errico. Чтобы использовать его, передайте 2 независимых вектора данных (время и температура), зависимую матрицу данных (глубину) вместе с регулярно расположенными точками данных X & Y для использования. По умолчанию инструмент также выполняет сглаживание для перекрывающихся (или почти) точек данных. Если это нежелательно, вы можете переопределить это (и другие параметры) с помощью широкого диапазона параметров конфигурации. Пример кода:

%Establish regularly spaced points
num_points = 20;
time_pts = linspace(min(time),max(time),num_points);
depth_pts = linspace(min(depth),max(depth),num_points);

%Run interpolation (with smoothing)
Pest = gridfit(depth, time, temp, time_pts, depth_pts);
0 голосов
/ 24 февраля 2012

Я бы использовал ваши данные, чтобы подогнать их к сплайну или полиному, а затем повторить выборку через регулярные интервалы Я очень рекомендую функцию polyfitn . На самом деле, все от этого парня из John D'Errico невероятно. Кроме того, я использовал эту функцию в прошлом, когда у меня были данные о неравномерно распределенной трехмерной задаче, и она работала достаточно хорошо. Если ваш набор данных имеет хорошую поддержку, что, как я подозреваю, делает, это будет очень просто. Наслаждайтесь! Надеюсь, это поможет!

...