function [X, Y] = formasolucion(Xn, Yn, signoX, signoXF, problema)
if nargin < 2, Yn = []; end
if nargin < 3, signoX = []; end
if nargin < 4, signoXF = []; end
if nargin < 5, problema = []; end
if isempty(problema), problema = 0; end
switch problema
case 0
X = ajustaX(Xn, signoX);
Y = Yn;
case 1
X = ajustaX(Xn, signoX);
Y = ajustaY(Yn, signoXF);
case 2
X = Xn;
Y = ajustaY(Yn, signoXF);
end
function X = ajustaX(Xn, signoX)
if isempty(Xn)
X = Xn;
else
filas = size(signoX, 2);
if sum(signoX == 1) == filas
X = Xn(:, 1:filas);
else
soluciones = size(Xn, 1);
X = zeros(soluciones, filas);
c2 = 1;
for c1 = 1:filas
switch signoX(c1)
case 0, X(:,c1) = 0;
case 1, X(:,c1) = Xn(:,c2); c2 = c2 + 1;
case 2, X(:,c1) = -Xn(:,c2); c2 = c2 + 1;
case 3, X(:,c1) = Xn(:,c2) - Xn(:,c2+1); c2 = c2 + 2;
end
end
end
end
function Y = ajustaY(Yn, signoXF)
if isempty(Yn)
Y = Yn;
else
columnas = size(signoXF, 2);
if sum(signoXF == 1) == columnas
Y = Yn(1:columnas, :);
else
soluciones = size(Yn, 2);
Y = zeros(columnas, soluciones);
c2 = 1;
for c1 = 1:columnas
switch signoXF(c1)
case 0, Y(c1,:) = Yn(c2,:) - Yn(c2+1,:); c2 = c2 + 2;
case 1, Y(c1,:) = Yn(c2,:); c2 = c2 + 1;
case 2, Y(c1,:) = -Yn(c2,:); c2 = c2 + 1;
case 3, Y(c1,:) = 0;
end
end
end
end