2017-06-23 29 views
-1

我有一個三個方程的系統:通貨膨脹,產出和利息。所有變量在這些方程中高度相互關聯,但是興趣方程是輔助的。MATLAB如何循環雅可比行列式並繪製特徵值?

第一步是確定通貨膨脹和消費的穩態組合(見第一幅圖)並繪製這種關係。下面的代碼應該這樣做,但它給出了有關c_sol的'預分配'的錯誤。

上面的代碼應該給我50個通脹和產出的組合;隨後通貨膨脹除以beta計算利息。

下一步是在這些值的每一個上評估雅可比行列式,確定特徵值並繪製x軸上的通貨膨脹特徵值。爲了穩定性,要求特徵值在單位圓內,或者在複數的情況下,模數。這是我的代碼,但它需要更多的編輯:

幫助非常感謝!

http://imgur.com/a/Gx3hU

更新:這是我與工作的代碼,但我缺少 '爲' 之後的部分。我需要爲這50個值中的每一個計算一個數字矩陣。 'c2'和'p2'是滯後變量,等於'c'和'p'。

syms c p R c2 p2 

outp = (c2*p2)/(((99*R)/100 - 99/100)*(p2/p)^((2*R)/(R - 1))*(c2/c)^(R/(2*(R - 1))) + 99/100); 

infl = (((2*c2*p2)/(35*(((99*R)/100 - 99/100)*(p2/p)^((2*R)/(R - 1))*(c2/c)^(R/(2*(R - 1))) + 99/100)) + 2/175)/(((99*R)/100 - 99/100)*(p2/p)^((2*R)/(R - 1))*(c2/c)^(R/(2*(R - 1))) + 99/100) - (99*p2)/100 + (99*p2^2)/100 + (3*((c2*p2)/(((99*R)/100 - 99/100)*(p2/p)^((2*R)/(R - 1))*(c2/c)^(R/(2*(R - 1))) + 99/100) + 1/5)^(20/7))/35 + 1/4)^(1/2) + 1/2; 

J = [jacobian(outp, c2), jacobian(outp, p2) ; jacobian(infl, c2), jacobian(infl, p2)]; 

%%%%%%%% 

beta = 0.99 ; v = 21 ; gamma = 350 ; eps = 1 ; g = 0.2 ; sigma = 1; alpha = 0.7; 

c_sol = zeros(1,50); 
p = linspace(0.8,1.2,50); 
for  i = 1 : numel(p) 
pi_actual = p(i); 
fun = @(c) (1 - beta)*pi_actual*(pi_actual-1) - (v/(alpha*gamma))*(c+g).^((1+eps)/alpha) - ((1-v)/gamma)*(c+g)*c.^(-sigma); 
c_sol(i) = fzero(fun,0.5); 
end 

c = c_sol; c2 = c_sol; p2 = p; 
R = p/beta; % interest 

%%%%%%% 


eigVals = zeros(2,numel(p)); 

for k = 1:numel(p) 


    eigVals(:,k) = eig(B); 
end 

回答

0

假設你的x方向矢量具有相同的長度作爲eigVals矩陣的寬度,則可以使用下面的代碼來繪製每個x值的本徵值:

figure; 
hold on; 
for i = 1:size(eigVals, 1) 
    plot(x, eigVals(i, :), '*'); 
end 
title('Eigenvalues against x'); 
xlabel('x'); 
ylabel('Eigenvalue');