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