MATLAB如何循环雅可比行列式并绘制特征值?

时间:2017-06-23 20:10:50

标签: matlab matrix stability

我有一个由三个方程组成的系统:通货膨胀,产出和利息。所有变量在这些方程中都是高度互联的,但是兴趣方程是辅助的。

第一步是确定通货膨胀和消费的稳态组合(见第一张图)并绘制这种关系。以下代码应该这样做,但是它提供了关于预分配'的错误。 c_sol。

上面的代码应该给我50个通货膨胀和产出的组合;然后根据通货膨胀除以β来计算利息。

下一步是在每个值上评估雅可比行列式,确定特征值并在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

1 个答案:

答案 0 :(得分: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');