function [k, X, Y] = vnbrody(F, signoX, signoXF)1%vnbrody2% [k, X, Y] = vnbrody(F)3%4% Formatea el problema y lanza un c�digo de Br�dy para resolver VN.5%6% [k, X, Y] = vnbrody(F, signoX, signoXF)7% F recetas en tiempo discreto8% signoX signo de las intensidades; por defecto X >= 09% signoXF signo de los balances materiales; por defecto X F(k) = 010% k, X, Y factor, intensidades y valores soluci�n11%12% Los c�digos para los signos son 0 = 1 >= 2 <= 3 >=<13% El algoritmo puede consultarse en:14% Andr�s Br�dy, "The implicit dynamics of the Neumann growth model",15% Acta Oeconomica, Vol. 54 (1) pp. 63-72 (2004)16% http://www.akademiai.com/content/x71485711558/1718%necesita formaproblema.m, formaab.m, formasolucion.m1920if nargin < 2, signoX = []; end21if nargin < 3, signoXF = []; end2223[Fn, signoX, signoXF] = formaproblema(F, signoX, signoXF, 1); %convierte el problema a la forma can�nica24[A, B] = formaab(Fn, 1); %convierte a la forma A, B25[k, p, x] = neumann(A', B'); %lanza el c�digo original de Brody26X = x(1:size(Fn, 1)); %extrae las intensidades de los procesos que se inician27Y = p(1:size(Fn, 2))'; %extrae los precios de las materias habituales28[X, Y] = formasolucion(X, Y, signoX, signoXF, 1); %convierte la soluci�n desde la forma can�nica293031323334function [rho,p,x] = neumann(in,out)35% the function [rho,p,x] = neumann(in,out) computes a solution36% rho,p,x (growth factor, prices and quantities),37% for rectangular matrices in and out(input and output).3839% Preliminaries:40% initial vectors, scaling, flag for indicating selection,41% initial rate, and select = 1 for going on with the process4243[m,n] = size(out);44p = ones(1,m)/m;45x = ones(1,n)/n;4647scale = m;48b = in/scale;49a = out/scale;5051flag = [0 0 0 0 0];5253rho = (p*a*x')/(p*b*x');54select = 1;5556while select57c = (a-rho*b);58for i = 1:10059dx = p*c; %surplus gain60dp = x*c'; %excess product61p = p-dp;62x = x+dx;6364p = p.*(p>0); %selecting valuable goods65p = p/sum(p); %normalizing66x = x.*(x>0); %selecting applied processes67x = x/sum(x); %normalizing6869R(i,:) = p;70Y(i,:) = x;71end72p = median(R); %taking median price73x = median(Y); %taking median quantity74p = p.*(p>0);75p = p/sum(p);76x = x.*(x>0);77x = x/sum(x);78rho = (p*a*x')/(p*b*x');7980%adjusting flag81flag(1:4) = flag(2:5);82flag(5) = sum(p>0) == sum(x>0); %indicating squareness8384%testing if the matrix was square for the last 5 iterations85if sum(flag) == 586select = 0;87end88end8990%Selection finished. Finding equilbrium9192pindex = find(p>0); %indexes of selected goods93xindex = find(x>0); %indexes of selected processes9495A = a(pindex,xindex); %square matrix of outputs96B = b(pindex,xindex); %square matrix of inputs9798%Inverting an almost singular matrix to improve exactness99for k = 1:3100s = inv(A-rho*B);101P = sum(s)/sum(s(:));102X = sum(s')/sum(s(:));103rho = P*A*X'/(P*B*X');104end105106%Final values and exactness107108p = zeros(1,m);109p(pindex) = P;110x = zeros(1,n);111x(xindex) = X;112113sistem = rho*in-out;114error = num2str(p*sistem*x');115disp(['Exactness',error])116117118