2015-05-21 5 views
1

У меня есть уравнение рекуррентного:Векторизация рекуррентного уравнения в MATLAB

a(i+1)=a(i)+(((b(i)+b(i+1))*(c(i+1)-c(i)))/(d(i)+d(i+1))); 

У меня есть необходимые векторы b, c и d и все они имеют одинаковую длину. Я могу предположить, что a(1)=0.

Как правило, я всегда делаю это с помощью цикла, но поскольку данные слишком велики, требуется значительное количество времени. Мне было интересно, есть ли способ для векторизации a?

ответ

1

Я думаю, что у меня есть ответ. Сделав немного математики на бумаге, я получаю следующее:

a=cumsum([a(1) ((b(1:end-1)+b(2:end)).*diff(c))./(d(1:end-1)+d(2:end))]); 
+0

Выглядит хорошо. Вы должны проверить небольшую часть кода, если векторизованная версия дает тот же результат, что и цикл. –

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