Code covered by the BSD License  

Highlights from
General Economic Equilibrium

image thumbnail
from General Economic Equilibrium by Giampiero Campa
2-Goods 2-Consumers General Economic Equilibrium

firm2x(block)
function firm2x(block)
% Level-2 M file S-Function for firm, 
% gets the price in input, gets as a parameter a string 
% specifying the production function, that is the output quantity (supply) 
% as a function of labour (l), and puts the supply and profit as outputs


setup(block);
%endfunction

function setup(block)

block.NumDialogPrms  = 1;

%% Register number of input and output ports
block.NumInputPorts  = 1;
block.NumOutputPorts = 3;

block.InputPort(1).Dimensions        = 1;
block.InputPort(1).SamplingMode      = 0;
block.InputPort(1).DirectFeedthrough = true;

block.OutputPort(1).Dimensions       = 1;
block.OutputPort(1).SamplingMode     = 0;
block.OutputPort(2).Dimensions       = 1;
block.OutputPort(2).SamplingMode     = 0;
block.OutputPort(3).Dimensions       = 1;
block.OutputPort(3).SamplingMode     = 0;

%% Set block sample time to inherited
block.SampleTimes = [-1 0];

%% Register methods
block.RegBlockMethod('PostPropagationSetup',    @DoPostPropSetup);
block.RegBlockMethod('Start',                   @Start);
block.RegBlockMethod('Outputs',                 @Output);

%endfunction

function DoPostPropSetup(block)

%% Setup Dwork
block.NumDworks = 1;
block.Dwork(1).Name = 'l0'; 
block.Dwork(1).Dimensions      = 1;
block.Dwork(1).DatatypeID      = 0;
block.Dwork(1).Complexity      = 'Real';
block.Dwork(1).UsedAsDiscState = false;
  
%endfunction

function Start(block)
block.Dwork(1).Data = 1; 
%endfunction

function Output(block)

% get parameter
str = block.DialogPrm(1).Data;

% prices are relative to the wage rate 
w=1;

% get input
p = block.InputPort(1).Data;

% production allocation: output supply & labour demand %%%%%%%%%%

% profit of firm, prf=p*x-w*l; mprf=-prf
mprf=['w*l - p*' str];

% retrieve last solution from dwork
l0=block.Dwork(1).Data;

% find labour that maximizes profit (labour demand) l=solve(diff(prf,l),'l');
l = fmincon(@(l) eval(mprf),l0,[],[],[],[],0,1e3);

% store solution to dwork
block.Dwork(1).Data=l;

% find good supply 
x=eval(str);

% maximal profit function of p
prf=-eval(mprf);

% return the outputs
block.OutputPort(1).Data = x;
block.OutputPort(2).Data = prf;
block.OutputPort(3).Data = l;

%endfunction

Contact us at files@mathworks.com