2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Value function iteration в Matlab
Сообщение21.05.2016, 13:00 
$TV(i,l,j)$ - трехмерный массив (10 значений функции $TV$ при различных $kgrid$ и $knext$).

В вектор $TVMAX$ записываются максимальные по $knext$ значения функции для каждого значения $kgrid$.

Нужно сделать так, чтобы максимальное значение функции $TV$ на $i$-ом шаге приравнивалось к значению функции $V$. Делаю, как показано ниже, - возникает ошибка. Подскажите, пожалуйста, какие исправления надо внести.

Используется синтаксис Matlab M
alpha=0.7; beta=0.95; N=40; crit=10; delta=0.1;

kgrid=0.01:0.1:4; knext=0.01:0.1:4;
V=zeros(crit,40,40);  r=zeros(1,40); TV=zeros(crit,40,40); TVMAX=zeros(1,40);

for i=1:1:crit
    for l=1:1:N
        for j=1:1:N
       
             TV(i,l,j)=log(kgrid(l)^alpha + (1-delta)*kgrid(l) - knext(j)) + beta*V(i,l,j);
             [TVMAX,r]=max(TV,[],3);
             V=TVMAX;                      
        end  
    end      
end

 
 
 
 Re: Value function iteration в Matlab
Сообщение21.05.2016, 13:25 
Вы убиваете одну размерность у $V$ командой $V=TVMAX$; и на следующем цикле заставляете индекс $j$ найти эту размерность.

 
 
 
 Re: Value function iteration в Matlab
Сообщение21.05.2016, 13:42 
Аватара пользователя
На мой взгляд, у Вас просто бессмысленный набор слов и кода.
lopuxov в сообщении #1124863 писал(а):
Подскажите, пожалуйста, какие исправления надо внести.

Переписать всё заново, начиная с описания "функций" и постановки задачи.

Например, что означает
lopuxov в сообщении #1124863 писал(а):
Нужно сделать так, чтобы максимальное значение функции $TV$ на $i$-ом шаге приравнивалось к значению функции $V$
??
lopuxov в сообщении #1124863 писал(а):
10 значений функции $TV$ при различных $kgrid$ и $knext$
А здесь что имелось ввиду?

И, допустим, мы поправим текущую ошибку (где её текст, кстати?), будет ли работать Ваш код, если сделать вначале $N=50$?...

По поводу самой ошибки - опишите размер "вектора" $TVMAX$ после первого выполнения функции $\text {мах} $, и что произойдёт с $V $ в следующей строчке?

-- 21.05.2016, 13:44 --

(Оффтоп)

dsge в сообщении #1124867 писал(а):
Вы убиваете одну размерность у $V$ командой $V=TVMAX$; и на следующем цикле заставляете индекс $j$ найти эту размерность.

Это, кмк, не главная ошибка у ТС. :-)

 
 
 
 Re: Value function iteration в Matlab
Сообщение21.05.2016, 14:20 
На первом шаге - внешний цикл по $i$ - нужно рассчитать все возможные значения $TV(1,l,j)$, из этого набора значений выделить вектор максимальных по $knext$, то есть по $j$, значений. Затем этот вектор максимальных по $knext$ значений взять в качестве $V(1,l,j)$ на втором шаге и снова найти вектор максимальных по $knext$ значений. И так далее.

Да, вектор $TVMAX$ состоит из 40 значений, а у функции $V$ исчезает размерность по $j$. Я и спрашиваю, как это исправить.

Например, что означает
lopuxov в сообщении #1124863 писал(а):
Нужно сделать так, чтобы максимальное значение функции $TV$ на $i$-ом шаге приравнивалось к значению функции $V$
??
lopuxov в сообщении #1124863 писал(а):
10 значений функции $TV$ при различных $kgrid$ и $knext$
А здесь что имелось ввиду?

Просто трехмерный массив.

И, допустим, мы поправим текущую ошибку (где её текст, кстати?), будет ли работать Ваш код, если сделать вначале $N=50$?...

40 на N заменить.

 
 
 
 Re: Value function iteration в Matlab
Сообщение21.05.2016, 14:48 
Аватара пользователя
lopuxov в сообщении #1124874 писал(а):
40 на N заменить.

Не поможет - у Вас грид и некст фиксированного размера...
lopuxov в сообщении #1124874 писал(а):
Затем этот вектор

Если затем, то, как минимум, это вычисление должно быть вне цикла(ов) самих вычислений...
lopuxov в сообщении #1124874 писал(а):
взять в качестве $V(1,l,j)$ на втором шаге

В формуле у Вас другое написано...

lopuxov в сообщении #1124874 писал(а):
Да, вектор $TVMAX$ состоит из 40 значений

Допустим, удалось вычислить этот вектор... как его можно взять в качестве значений матрицы?

 
 
 
 Re: Value function iteration в Matlab
Сообщение22.05.2016, 00:06 
lopuxov
Индекс $i$ можно опустить во всех переменных. Если вы полагаете, что число итераций crit будет достаточно для сходимости, то Матлаб будет автоматически делать очередную итерацию по $i$, хотя лучше задать условие, сравнивающее две соседние итерации на малость отличия.
Все массивы надо задать одномерными. Для каждого $l$ находится максимум и он должен добавляться к уже найденным максимумам, типа $Vnew = [Vnew, TVMAX]; $заполнив массив $Vnew$, приравнять его к $Vold$ и далее повторить итерацию для Value function.

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group