STO2 Competitive storage with floor-price backed by public storage
This model is close to one of the models presented in Wright and Williams (1988).
Contents
Model's structure
Response variables Speculative storage (
), Public storage (
), Planned production (
) and Price (
).
State variable Availability (
).
Shock Productivity shocks (
).
Parameters Unit physical storage cost (
), Depreciation share (
), Interest rate (
), Scale parameter for the production cost function (
), Inverse of supply elasticity (
), Demand price elasticity (
), Floor price (
) and Capacity constraint on public stock (
).
Equilibrium equations




Transition equation

Writing the model
The model is defined in a Yaml file: sto2.yaml.
Create the model object
Mu = 1; sigma = 0.05; model = recsmodel('sto2.yaml',struct('Mu',Mu,'Sigma',sigma^2,'order',7));
Deterministic steady state (different from first guess, max(|delta|)=0.392101)
State variables:
A
______
1.3921
Response variables:
S H P Sg
__________ _____ ____ _______
6.0863e-15 1.004 1.02 0.39605
Expectations variables:
EP EPe
____ ____
1.02 1.02
Define approximation space
[interp,s] = recsinterpinit(50,0.7,2);
Find a first guess through the perfect foresight solution
interp = recsFirstGuess(interp,model,s,model.sss,model.xss,struct('T',5));
Solve for rational expectations
[interp,x] = recsSolveREE(interp,model,s);
Successive approximation
Major Minor Lipschitz Residual
0 0 3.02E-02 (Input point)
1 1 1.0269 1.39E-02
2 1 0.9062 8.27E-03
3 1 0.9942 1.07E-03
4 1 1.0897 5.32E-04
5 1 0.7831 1.17E-04
6 1 0.8366 1.91E-05
7 1 0.8449 2.97E-06
8 1 0.8459 4.57E-07
9 1 0.8460 7.04E-08
10 1 1.0000 0.00E+00
Solution found - Residual lower than absolute tolerance
Plot storage and price rules
subplot(2,1,1) plot(s,x(:,[1 4])) leg = legend('Private stock','Public stock'); set(leg,'Location','NorthWest') set(leg,'Box','off') xlabel('Availability') ylabel('Stock') subplot(2,1,2) plot(s,x(:,3)) xlabel('Availability') ylabel('Price')