найти значения в матрице из тех, которые определены в векторе - PullRequest
0 голосов
/ 06 марта 2012

Возьмем следующий пример:

clear all
depth = [0,2,4,7,10,13,16,19,22,25,30,35];%depth below surface
temp = 0 + 29.*rand(365,12);
thermD = 0 + 36.*rand(365,1);

temp относится к профилю температуры водяного столба, где каждый столбец относится к разной глубине, где эта глубина задается как «глубина».

thermD - переменная, которая описывает область наибольшей разности температур в толще воды.

Я пытаюсь создать переменную, которая показывает среднее значение температуры над областью наибольшей разности плотностей, обозначаемой thermD.

Так, например, если значение в thermD равно 12(т.е. область наибольшей разности температур находится на 12 метров ниже поверхности), тогда мне нужно будет рассчитать среднюю температуру для первых 5 столбцов в «temp», так как столбец 1: 5 (как обозначено по глубине) представляет температуру ниже междуповерхность и эта глубина.

Любой совет будет высоко ценится.

1 Ответ

0 голосов
/ 07 марта 2012

Я верю, что это будет делать то, что вам нужно, возможно, оно не будет векторизовано, но я думаю, что это довольно ясно:

clear all
depth = [0,2,4,7,10,13,16,19,22,25,30,35];%depth below surface
temp = 0 + 29.*rand(365,12);
thermD = 0 + 36.*rand(365,1);

% preallocate the array to represent the temperature between the surface and this depth
ave_temp_at_thermD = zeros(size(thermD));
% calculate the temperature for each water column
for ii=1:length(thermD)
  % find the last element of depth at is less than the current
  % value of thermD
  II = find( depth < thermD(ii),1,'last');
  % Find the mean temperature for columns 1 to II, first for each row,
  % then by each column
  ave_temp_at_thermD(ii) = mean(mean(temp(:,1:II)));
end

Надеюсь, это полезно.

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