簡體   English   中英

Matlab 中的 Function fzero 未收斂

[英]Function fzero in Matlab is not converging

我正在解決我的宏觀經濟學 class 中的一個問題。 考慮以下等式:

在此處輸入圖像描述

這里,k 是固定的,c(k) 是通過 Matlab 中的“interp1”function 定義的。 這是我的代碼:

beta = 0.98;
delta = 0.13;
A = 2;
alpha = 1/3;
n_grid = 1000;   % Number of points for capital
k_grid = linspace(5, 15, n_grid)';
tol = 1e-5;
max_it = 1000;

c0 = ones(n_grid, 1);
new_k = zeros(n_grid, 1);
dist_c = tol + 1;
it_c = 0;

while dist_c > tol && it_c < max_it
   c_handle = @(k_tomorrow) interp1(k_grid, c0, k_tomorrow, 'linear', 'extrap');

   for i=1:n_grid
       % Solve for k'
       euler = @(k_tomorrow) (1/((1-delta)* k_grid(i) + A * k_grid(i)^alpha - k_tomorrow)) - beta*(1-delta + alpha*A*k_tomorrow^(alpha - 1))/c_handle(k_prime);
       new_k(i) = fzero(euler, k_grid(i));    % What's a good guess for fzero?    
   end

   % Compute new values for consumption
   new_c = A*k_grid.^alpha + (1-delta)*k_grid - new_k;

   % Check convergence
   dist_c = norm(new_c - c0);
   c0 = new_c;
   it_c = it_c + 1;

end

當我運行此代碼時,對於某些索引 $i$,它運行良好並且 fzero 可以找到解決方案。 但是對於索引,它只返回 NaN 並退出而不找到根。 這是經濟學中一個表現良好的問題,我們正在尋找的解決方案確實存在,並且我嘗試實現的算法保證可以工作。 但是我在 MATLAB 中解決這個問題沒有太多經驗,我想我在某個地方犯了一個愚蠢的錯誤。 關於如何進行的任何想法?

這是典型的錯誤信息:

退出 fzero:中止搜索包含符號更改的區間,因為在搜索期間遇到復雜的 function 值。 (-2.61092 處的函數值為 0.74278-0.30449i。)檢查 function 或使用不同的起始值重試。

提前非常感謝!

唯一能產生復數的項是

k'^(alpha - 1) = k'^(-2/3)

您可能希望根據立方根的實際變體得到結果,您可以得到

sign(k') * abs(k')^(-2/3)

或更一般地,避免除以零

k' * (1e-16+abs(k'))^(alpha - 2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM