function [k, X, Y, pasos] = vnautovalor(F, signoX, signoXF, orden, numsol)1%vnautovalor2% [k, X, Y] = vnautovalor(F)3%4% Construye todos los menores cuadrados posibles, calcula los5% autovalores y autovectores por la izquierda y la derecha de cada6% menor y muestra las soluciones que cumplen las condiciones de VN.7%8% [k, X, Y] = vnautovalor(F, signoX, signoXF, orden, numsol)9% F recetas en tiempo discreto10% signoX signo de las intensidades; por defecto X >= 011% signoXF signo de los balances materiales; por defecto X F(k) = 012% orden si = [] todos los ordenes, si = 0 los de mayor orden13% numsol si = [] busca todas las soluciones, si = n busca s�lo n14% k, X, Y factor, intensidades y valores soluci�n15%16% Los c�digos para los signos son 0 = 1 >= 2 <= 3 >=<17% Por defecto busca todas las soluciones en todos los menores.1819% necesita autovalor.m, condicionesvn.m2021if nargin < 2, signoX = []; end22if nargin < 3, signoXF = []; end23if nargin < 4, orden = []; end24if nargin < 5, numsol = []; end2526[filas, columnas, ancho] = size(F); %determina el tama�o del problema27orm = min(filas, columnas); %determina el orden del menor de mayor tama�o28if isempty(orden), orden=orm:-1:1; elseif orden==0, orden=orm; end %si orden es [] busca en todos; si es 0 en los mayores29if isempty(numsol), numsol = Inf; end %si numsol no esta definido busca todas las soluciones30k = []; X = []; Y = []; pasos = 0; %crea las variables para almacenar las soluciones31for c0 = orden %para cada orden de los menores32combfil = nchoosek(1:filas, c0); %establece las filas posibles de los menores33combcol = nchoosek(1:columnas, c0); %establece las columnas posibles de los menores34for c1 = 1:size(combfil, 1) %para cada combinaci�n de filas posible35Xs = zeros(1, filas); %define las intensidades de la soluci�n como 036film = combfil(c1, :); %establece las filas del menor analizado37for c2 = 1:size(combcol, 1) %para cada combinaci�n de columnas posible38Ys = zeros(columnas, 1); %define los valores de la soluci�n como 039colm = combcol(c2, :); %establece las columnas del menor analizado40[Km, Xm, Ym] = autovalor(F(film, colm, :), 1); %calcula los autovalores (positivos) y los autovectores del menor41pasos = pasos + 1; %contabiliza el n�mero de menores42for c3 = 1:size(Km, 2) %para cada autovalor del menor43Xs(film) = Xm(c3, :); %incluye las intensidades del menor en la soluci�n44Ys(colm) = Ym(:, c3); %incluye los valores del menor en la soluci�n45if condicionesvn(Km(c3),Xs,Ys,F,signoX,signoXF) %si la soluci�n cumple las condiciones de VN46k = [k, Km(c3)]; X = [X; Xs]; Y = [Y, Ys]; %a�ade la soluci�n a las almacenadas47numsol = numsol-1; if numsol <= 0, return; end %si se alcanzaron las soluciones buscadas interrumpe48end %49if condicionesvn(Km(c3),-Xs,-Ys,F,signoX,signoXF) %si la soluci�n con signo - cumple las condiciones de VN50k = [k, Km(c3)]; X = [X; -Xs]; Y = [Y, -Ys]; %a�ade la soluci�n con signo - a las almacenadas51numsol = numsol-1; if numsol <= 0, return; end %si se alcanzaron las soluciones buscadas interrumpe52end %53end54end55end56end575859