Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
162 views
1
function [k, X, Y, pasos] = vnautovalor(F, signoX, signoXF, orden, numsol)
2
%vnautovalor
3
% [k, X, Y] = vnautovalor(F)
4
%
5
% Construye todos los menores cuadrados posibles, calcula los
6
% autovalores y autovectores por la izquierda y la derecha de cada
7
% menor y muestra las soluciones que cumplen las condiciones de VN.
8
%
9
% [k, X, Y] = vnautovalor(F, signoX, signoXF, orden, numsol)
10
% F recetas en tiempo discreto
11
% signoX signo de las intensidades; por defecto X >= 0
12
% signoXF signo de los balances materiales; por defecto X F(k) = 0
13
% orden si = [] todos los ordenes, si = 0 los de mayor orden
14
% numsol si = [] busca todas las soluciones, si = n busca s�lo n
15
% k, X, Y factor, intensidades y valores soluci�n
16
%
17
% Los c�digos para los signos son 0 = 1 >= 2 <= 3 >=<
18
% Por defecto busca todas las soluciones en todos los menores.
19
20
% necesita autovalor.m, condicionesvn.m
21
22
if nargin < 2, signoX = []; end
23
if nargin < 3, signoXF = []; end
24
if nargin < 4, orden = []; end
25
if nargin < 5, numsol = []; end
26
27
[filas, columnas, ancho] = size(F); %determina el tama�o del problema
28
orm = min(filas, columnas); %determina el orden del menor de mayor tama�o
29
if isempty(orden), orden=orm:-1:1; elseif orden==0, orden=orm; end %si orden es [] busca en todos; si es 0 en los mayores
30
if isempty(numsol), numsol = Inf; end %si numsol no esta definido busca todas las soluciones
31
k = []; X = []; Y = []; pasos = 0; %crea las variables para almacenar las soluciones
32
for c0 = orden %para cada orden de los menores
33
combfil = nchoosek(1:filas, c0); %establece las filas posibles de los menores
34
combcol = nchoosek(1:columnas, c0); %establece las columnas posibles de los menores
35
for c1 = 1:size(combfil, 1) %para cada combinaci�n de filas posible
36
Xs = zeros(1, filas); %define las intensidades de la soluci�n como 0
37
film = combfil(c1, :); %establece las filas del menor analizado
38
for c2 = 1:size(combcol, 1) %para cada combinaci�n de columnas posible
39
Ys = zeros(columnas, 1); %define los valores de la soluci�n como 0
40
colm = combcol(c2, :); %establece las columnas del menor analizado
41
[Km, Xm, Ym] = autovalor(F(film, colm, :), 1); %calcula los autovalores (positivos) y los autovectores del menor
42
pasos = pasos + 1; %contabiliza el n�mero de menores
43
for c3 = 1:size(Km, 2) %para cada autovalor del menor
44
Xs(film) = Xm(c3, :); %incluye las intensidades del menor en la soluci�n
45
Ys(colm) = Ym(:, c3); %incluye los valores del menor en la soluci�n
46
if condicionesvn(Km(c3),Xs,Ys,F,signoX,signoXF) %si la soluci�n cumple las condiciones de VN
47
k = [k, Km(c3)]; X = [X; Xs]; Y = [Y, Ys]; %a�ade la soluci�n a las almacenadas
48
numsol = numsol-1; if numsol <= 0, return; end %si se alcanzaron las soluciones buscadas interrumpe
49
end %
50
if condicionesvn(Km(c3),-Xs,-Ys,F,signoX,signoXF) %si la soluci�n con signo - cumple las condiciones de VN
51
k = [k, Km(c3)]; X = [X; -Xs]; Y = [Y, -Ys]; %a�ade la soluci�n con signo - a las almacenadas
52
numsol = numsol-1; if numsol <= 0, return; end %si se alcanzaron las soluciones buscadas interrumpe
53
end %
54
end
55
end
56
end
57
end
58
59