2012-03-06 1 views
0

Рассмотрим следующий пример:найти значения в матрице из тех, которые определены в векторе

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

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

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

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

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

Любой совет будет очень благодарен.

+0

На каком языке вы кодируете? –

ответ

0

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

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 

Надеется, что это полезно.

Смежные вопросы