Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
162 views
1
function [X, Y] = formasolucion(Xn, Yn, signoX, signoXF, problema)
2
%formasolucion
3
% [X, Y] = formasolucion(Xn, Yn, signoX, signoXF, problema)
4
%
5
% Convierte una soluci�n transformada a la forma est�ndar o can�nica a la
6
% forma original.
7
% Xn, Yn intensidades y valores transformados
8
% signoX signo de las intensidades
9
% signoXF signo de los balances materiales
10
% problema [] desde la forma est�ndar y 1 desde la forma can�nica
11
% X, Y intensidades y valores originales
12
13
if nargin < 2, Yn = []; end
14
if nargin < 3, signoX = []; end
15
if nargin < 4, signoXF = []; end
16
if nargin < 5, problema = []; end
17
18
if isempty(problema), problema = 0; end
19
switch problema
20
case 0
21
X = ajustaX(Xn, signoX);
22
Y = Yn;
23
case 1
24
X = ajustaX(Xn, signoX);
25
Y = ajustaY(Yn, signoXF);
26
case 2
27
X = Xn;
28
Y = ajustaY(Yn, signoXF);
29
end
30
31
32
33
34
35
36
function X = ajustaX(Xn, signoX)
37
if isempty(Xn)
38
X = Xn;
39
else
40
filas = size(signoX, 2);
41
if sum(signoX == 1) == filas
42
X = Xn(:, 1:filas);
43
else
44
soluciones = size(Xn, 1);
45
X = zeros(soluciones, filas);
46
c2 = 1;
47
for c1 = 1:filas
48
switch signoX(c1)
49
case 0, X(:,c1) = 0;
50
case 1, X(:,c1) = Xn(:,c2); c2 = c2 + 1;
51
case 2, X(:,c1) = -Xn(:,c2); c2 = c2 + 1;
52
case 3, X(:,c1) = Xn(:,c2) - Xn(:,c2+1); c2 = c2 + 2;
53
end
54
end
55
end
56
end
57
58
59
60
61
62
63
function Y = ajustaY(Yn, signoXF)
64
if isempty(Yn)
65
Y = Yn;
66
else
67
columnas = size(signoXF, 2);
68
if sum(signoXF == 1) == columnas
69
Y = Yn(1:columnas, :);
70
else
71
soluciones = size(Yn, 2);
72
Y = zeros(columnas, soluciones);
73
c2 = 1;
74
for c1 = 1:columnas
75
switch signoXF(c1)
76
case 0, Y(c1,:) = Yn(c2,:) - Yn(c2+1,:); c2 = c2 + 2;
77
case 1, Y(c1,:) = Yn(c2,:); c2 = c2 + 1;
78
case 2, Y(c1,:) = -Yn(c2,:); c2 = c2 + 1;
79
case 3, Y(c1,:) = 0;
80
end
81
end
82
end
83
end
84
85