2013-02-28 2 views
0

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

for I=1:N 
    x = f(x); 
end 

с е быть пользовательской функцией, т.е. анонимной функции. Есть ли такая команда, как arrayfun, которая позволяет это?

Редактировать: Может быть, векторизация является неправильным словом здесь, и должна быть использована оптимизация.

+0

что такое 'x' и как' I' связано с ним ??? – Shai

+0

x является вектором и не связан с I. – litro

+1

Я полагаю, что вы хотите сохранить каждое значение f (x) по x. Для этого вам нужно «x (I) = f (x)». – HebeleHododo

ответ

0

Я не проверить код, но может быть:

x = arrayfun(@(y) f(x), 1:N);

С arrayfun вы можете взять каждый элемент вектора, переданные в качестве параметра. В приведенном выше примере y относится к каждому элементу вектора 1:N, который также представляет индекс цикла for, который вы опубликовали в качестве примера. В вашем цикле for вы не используете индекс, чтобы вы могли сделать то же самое в arrayfun и перебирать вектор, который делает то, что вы хотите внутри: f(x). Наконец, вы можете назначить вывод x. Возможно, с помощью способа arrayfun вы получите выход x длины N с результатом каждого f(x) в итерациях. С циклом for вы переписываете на каждой итерации значение x.

Надеюсь, вы поможете и извините за мой английский.

+0

Спасибо за ваше предложение, но код, похоже, не работает для меня. А для больших N и нескалярных x это может быть не очень эффективно. – litro

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