Предположим, у вас есть 5 векторов: v_1, v_2, v_3, v_4 и v_5. Каждый из этих векторов содержит диапазон значений от минимума до максимума. Так, например:
v_1 = minimum_value:step:maximum_value;
Каждый из этих векторов использует один и тот же размер шага, но имеет разное минимальное и максимальное значение. Таким образом, они имеют разную длину.
Функция F(v_1, v_2, v_3, v_4, v_5) зависит от этих векторов и может использовать любую комбинацию элементов внутри них. (Извините за плохое объяснение). Я пытаюсь найти максимальное значение F и записать полученные значения. Мой текущий подход состоял в том, чтобы использовать несколько встроенных циклов for, как показано, чтобы выработать функцию для каждой комбинации элементов векторов:
% Set the temp value to a small value
temp = 0;
% For every combination of the five vectors use the equation. If the result
% is greater than the one calculated previously, store it along with the values
% (postitions) of elements within the vectors
for a=1:length(v_1)
for b=1:length(v_2)
for c=1:length(v_3)
for d=1:length(v_4)
for e=1:length(v_5)
% The function is a combination of trigonometrics, summations,
% multiplications etc..
Result = F(v_1(a), v_2(b), v_3(c), v_4(d), v_5(e))
% If the value of Result is greater that the previous value,
% store it and record the values of 'a','b','c','d' and 'e'
if Result > temp;
temp = Result;
f = a;
g = b;
h = c;
i = d;
j = e;
end
end
end
end
end
end
Это становится невероятно медленным для небольших размеров шага. Если в каждом векторе около 100 элементов, количество комбинаций составляет около 100*100*100*100*100. Это проблема, так как мне нужны небольшие значения шага, чтобы получить подходящим сходящимся ответом.
Мне было интересно, можно ли ускорить это с помощью векторизации или любым другим способом. Я также просматривал создание комбинаций до вычисления, но это казалось даже медленнее, чем мой текущий метод. Я не использовал Matlab в течение длительного времени, но просто глядя на количество встроенных циклов for, я думаю, что это определенно можно ускорить. Спасибо за предложения.
F
. - person Divakar   schedule 25.08.2014F
, поэтому, чтобы действительно векторизовать вашу проблему, вам нужно изменитьF
s.t. он принимает эти векторы целиком и работает с ними. Открывая намF
, мы могли бы лучше оценить возможности его векторизации. - person Divakar   schedule 25.08.2014