2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Value function iteration в Matlab
Сообщение21.05.2016, 13:00 


03/10/08
47
$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 
Заслуженный участник


05/08/14
1564
Вы убиваете одну размерность у $V$ командой $V=TVMAX$; и на следующем цикле заставляете индекс $j$ найти эту размерность.

 Профиль  
                  
 
 Re: Value function iteration в Matlab
Сообщение21.05.2016, 13:42 
Заслуженный участник
Аватара пользователя


01/09/13
4318
На мой взгляд, у Вас просто бессмысленный набор слов и кода.
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 


03/10/08
47
На первом шаге - внешний цикл по $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 
Заслуженный участник
Аватара пользователя


01/09/13
4318
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 
Заслуженный участник


05/08/14
1564
lopuxov
Индекс $i$ можно опустить во всех переменных. Если вы полагаете, что число итераций crit будет достаточно для сходимости, то Матлаб будет автоматически делать очередную итерацию по $i$, хотя лучше задать условие, сравнивающее две соседние итерации на малость отличия.
Все массивы надо задать одномерными. Для каждого $l$ находится максимум и он должен добавляться к уже найденным максимумам, типа $Vnew = [Vnew, TVMAX]; $заполнив массив $Vnew$, приравнять его к $Vold$ и далее повторить итерацию для Value function.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group