How to solve a non-linear system of difference equations ?

4 ビュー (過去 30 日間)
Nicloot
Nicloot 2019 年 7 月 2 日
コメント済み: Nicloot 2019 年 7 月 3 日
Hi ! I am a beginner with matlab and I have some promblem very important for my research...
I am trying to solve (or more precisely to simulate) the following system numerically.
I write the following code but I think it misses some matlab function (like solve for exemple)...
The point it that I don't know how I can implement it together with the loop...
Here is the code :
K(1) = 10;
S(1) = 1000;
S(2) = 950;
E(1) = 1000;
A(1) = 10;
a = 0.9;
alpha = 0.3;
beta = 0.6;
gamma = 0.1;
z = 0.2;
rho = 2;
delta = 0.9;
phi = 0.2;
b = 0.1;
Etilde = 1000;
%b*Etilde+(1-b)*E(t);
x = linspace(1,100);
for t=1:length(x)-2
S(t+1) = (1/(1+rho))*(((1+alpha*A(t+1)*K(t+1)^(alpha-1)*(1+z)^beta*(S(t+1)-S(t+2))^gamma-delta)*beta*A(t)*K(t)^alpha*(1+z)^beta*(S(t)-S(t+1))^gamma)/((1+alpha*A(t+1)*K(t+1)^(alpha-1)*(1+z)^beta*(S(t+1)-S(t+ 2))^gamma-delta)*gamma*A(t)*K(t)^alpha*(1+z)^beta*(S(t)-S(t+1))^(gamma-1)-gamma*A(t+1)*K(t+1)^alpha*(1+z)^beta*(S(t+1)-S(t+2))^(gamma-1)));
K(t+1) = beta*A(t)*K(t)^alpha*(1+z)^beta*(S(t)-S(t+1))^gamma-gamma*A(t+1)*K(t+1)^alpha*(1+z)^beta*(S(t+1)-S(t+2))^(gamma-1)*S(t+1);
E(t+1) = (1/(1+rho))*(b*Etilde+(1-b)*E(t)+phi*((((1+alpha*A(t+1)*K(t+1)^(alpha-1)*(1+z)^beta*(S(t+1)-S(t+2))^gamma-delta)*beta*A(t)*K(t)^alpha*(1+z)^beta*(S(t)-S(t+1))^gamma)/((1+alpha*A(t+1)*K(t+1)^(alpha-1)*(1+z)^beta*(S(t+1)-S(t+2))^gamma-delta)*gamma*A(t)*K(t)^alpha*(1+z)^beta*(S(t)-S(t+1))^(gamma-1)-gamma*A(t+1)*K(t+1)^alpha*(1+z)^beta*(S(t+1)-S(t+2))^(gamma-1)))-S(t)));
A(t+1) = A(t)*(1+a);
end
K(t)
E(t)
S(t)
figure(1)
plot(x,K)
figure(2)
plot(x,E)
figure(3)
plot(x,S)
grid
If someone has an idea...
Many thanks,
Nicolas
  2 件のコメント
Torsten
Torsten 2019 年 7 月 2 日
Most probably, you won't be able to get an analytical formula for S, T and E depending on the initial values and the index t. Or what did you expect to get ?
Nicloot
Nicloot 2019 年 7 月 2 日
Sure, that's why I would like to simulate the model in order to plot K, S and E for t=0...N (N large...). The point is that it would require some numerical solver, but I don't know which one I should use (vpasole???) and how to do it.

サインインしてコメントする。

回答 (2 件)

Torsten
Torsten 2019 年 7 月 2 日
Call "fsolve" repeatedly to get
(S3,K2,E2),
(S4,K3,E3),
...
(S(t+2),K(t+1),E(t+1))
A(t) = A(1)*(1+a)^(t-1)
is obvious.
  6 件のコメント
Nicloot
Nicloot 2019 年 7 月 3 日
Immediately in the first loop. I try several combinations of parameter values and initial conditions, but they all fail...
Torsten
Torsten 2019 年 7 月 3 日
You can test if "fun" returns reasonable values if you insert the line
fun(x0)
before calling "fsolve".
I think you will come into trouble with your exponentiations x^a if x becomes negative or if x becomes 0 and a is negative.

サインインしてコメントする。


Nicloot
Nicloot 2019 年 7 月 3 日
編集済み: Nicloot 2019 年 7 月 3 日
Here is the matlab output,
ans =
1.0e+03 *
3.6167
Inf
0.7333
-0.0009
There is clearly a problem since we can see that x(4)=-0.9 which is clearly different than the expected 1.91 (since)
(edit : I change the parameter a to 0.91 and initial value for A to 1 in my last attempt)
  2 件のコメント
Torsten
Torsten 2019 年 7 月 3 日
The output gives the function value, not the variable value:
x(4)-x0(4)*(1+a) = -0.9
The bigger problem is fun(2) = Inf which results from 0^(gamma-1)
Nicloot
Nicloot 2019 年 7 月 3 日
Ok, thanks, so the value for A is logical.
I checked my calculation twice... Don't understand what goes wrong... I'll check one more time !
Thank again !

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeSymbolic Math Toolbox についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by