Monday, October 05, 2026

Finding Rents By Solving A LCP

This post is a continuation of this previous one. I solve a numerical example at a given rate of profits. In this example combining extensive and intensive rent, the order of fertility is opposite the order of rentability.

I find that Andreas Almqvist and others have implemented a pivoting algorithm in Matlab for solving an arbitrary LCP. Mathworks has a description of the interface, [x,z,retcode] = LCPSolve(M,u);. The implementation is here. I provide my main routine as an appendix to this post. A better main program would improve the interface with the user.

I solve my numerical example for a rate of profits of 14 percent. Table 1 presents the solution for four increasing levels of final demand. The order of fertility is Type 3, 2, and 1 lands. This order is the order in which different types of land are taken up for cultivation as final demand expands. Both the order of fertility and the order of rentability vary with the rate of profits.

Table 1: Selected Solutions for the LCP
Cost-Minimizing TechnqieDeltaKappaPiOmega
Final demand5 tons
5 bushels
10 tons
10 bushels
30 tons
30 bushels
55 tons
55 bushels
Iterations of Lemke algorithm681410
Operated processesI and VI, III, and VI, II, III, and VI, II, III, IV, and V
LandsNone scarce. Type 3 partially farmed.Type 3 pays extensive rent. Type 2 partially farmed.Types 2 and 3 pay extensive rent. Type 1 partially farmed.All scarce. Intensive rent paid on Type 3.

The order of rentability is the order of lands, from high rent to low rent per acre, at a given rate of profits and a given level of final demand. When Pi is cost-minimizing in the example, rents are approximately 0.0067 and 0.0128 labor-units per acre on Type 2 and 3 lands, respectively. The order of rentability is Type 3, 2, 1 lands, matching the order of fertility. All rents with expanding final demand are extensive rents up to this point.

Further expansion of final demand leads to the Omega technique being cost-minimizing, as shown in the rightmost column in Table 1. No new type of land is taken up for cultivation, and the order of fertility remains unchanged. Landlords now receive a combination of extensive and intensive rent. Rents are approximately 0.03625, 0.030248, and 0.024781 labor-units per acre on Type 1, 2, and 3 lands respectively. The order of rentability is exactly opposite the order of fertility.

Marginalist economics, also known as neoclassical economics, was developed as a generalization of Ricardo’s theory of intensive rent (Campus 1987). It is also an imitation of energetics, a nineteenth century approach in physics emphasizing the conservation of energy (Mirowski 1989). In the example, the owners of the most fertile land, the type of land that is farmed first, ultimately receive the lowest rent per acre. The owners of the least fertile land, the type of land that is farmed last, receive the highest rent per acre. Is this result consistent with the theory of supply and demand? Is it consistent with supposedly intuitive tales some economists tell about prices as signals of relative scarcity?

Appendix: Source Code

% Casts the choice of technique in a model of extensive rent into a LCP and solves it.
%
% Author: Robert L. Vienneau
% Date: 3 October 2026

% 1.0 Define and echo data.
% Define vector of direct labor coefficients.
a0 = [1, 9/10, 3/5, 29/50, 9/20];

% Define input vectors. The first row is inputs of iron; the second of corn.
A = [[9/20, 1/40, 3/2000, 29/500, 2/30]; ...
[2, 1/10, 9/20, 13/100, 13/100]];

n =(size(A))(1);
m = (size(A))(2);

% Define output vector.
B = [[1, 0, 0, 0, 0]; ...
[0, 1, 1, 1, 1]];

% Define land coefficients.
C = [[0, 1, 0, 0, 0]; ...
[0, 0, 49/50, 0, 0]; ...
[0, 0, 0, 2/50, 2]];

k = (size(C))(1);

% Define endowments of land.
t = [100; 100; 100];

% Define final demand (I want to update this often and rerun).
% d = [5; 5]; % Delta. Processes 1 and 5 are operated.
% No land pays rent.
% 6 iterations in outer loop.
% d = [10; 10]; % Kappa. Processes 1, 3, and 5 are operated.
% Type 3 land pays extensive rent.
% 8 iterations in outer loop.
% d = [30; 30]; % Pi. Processes 1, 2, 3, and 5 are operated.
% Types 2 and 3 lands pay rent.
% 14 iterations in outer loop of Lemke algorithm.
d = [55; 55]; % Omega. All processes are operated in the cost-minimizing
% technique All lands pay rent. Type 3 pays extensive rent.
% 10 iterations in outer loop.
% Rents are 0.03625, 0.030248, and 0.024781 labor-units per acre.
% Order of rentability is 1, 2, 3.
% Order of fertility is 3, 2, 1.

% Define rate of profits. (I want to rerun this often and rerun).
r = 0.14;


% Echo data.
printf( "Vector of direct labor coefficients:\n");
a0
printf( "Input matrix:\n");
A
printf( "Output matrix:\n");
B
printf( "Matrix of land coefficients:\n");
C
printf( "Endowments of land:\n");
t
printf( "Final demand:\n");
d
printf( "Rate of profits:\n");
r
printf( "\nNumber of produced commodities:\n");
n
printf( "Number of production processes:\n");
m
printf( "Number of types of land:\n");
k


% 2.0 Define and echo block-structured matrices, from Erreygers (1995).
Atilde = [A; [0, 0, 0, 0, 0]; [0, 0, 0, 0, 0]; [0, 0, 0, 0, 0]];
Btilde = [B; -C];
dtilde = [d; -t];

% Echo data.
printf( "\nNew input matrix:\n");
Atilde
printf( "New output matrix:\n");
Btilde
printf( "New final demand vector:\n");
dtilde


% 3.0 Define and echo matrices for Linear Complementarity Problem (LCP).
% This is my invention, although suggested by Bidard's work.
M = [[zeros(n + k, n + k), Btilde - Atilde]; ...
[(1 + r)*transpose(Atilde) - transpose(Btilde), zeros(m, m)]];
u = [-dtilde; transpose(a0)];

printf( "\nMatrix for LCP:\n");
M
printf( "Vector for LCP:\n" );
u

% 4.0 Solve LCP.
[x,z,retcode] = LCPSolve(M,u);


% 5.0 Echo solution.
x
z
retcode

No comments: