Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
162 views
1
function [k, X, Y, pasos, hessiano] = vnnolineal(F, signoX, signoXF, k0, X0)
2
%vnnolineal
3
% [k, X, Y] = vnnolineal(F)
4
%
5
% Resuelve VN utilizando las funciones para programas no lineales constr
6
% en Matlab 5 y fmincon en las versiones superiores de Matlab; esta
7
% funci�n no est� implementada en Octave.
8
%
9
% [k, X, Y] = vnnolineal(F, signoX, signoXF, k0, X0)
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
% k0 factor con el que se inicia la iteraci�n
14
% X0 intensidades con las que se inicia la iteraci�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
19
%necesita vnnolinealaux1, vnnolinealaux2, vnnolinealaux3
20
21
if nargin < 2, signoX = []; end
22
if nargin < 3, signoXF = []; end
23
if nargin < 4, k0 = []; end
24
if nargin < 5, X0 = []; end
25
26
if exist('OCTAVE_VERSION')
27
k = []; X = []; Y = []; pasos = []; hessiano = [];
28
disp('Atenci�n, esta funci�n no ha sido redactada para Octave');
29
else
30
v = version;
31
if v([1,2]) == '5.'
32
[k, X, Y, pasos, hessiano] = vnnolinealmatlab5(F, signoX, signoXF, k0, X0);
33
else
34
[k, X, Y, pasos, hessiano] = vnnolinealaux3(F, signoX, signoXF, k0, X0);
35
end
36
end
37
38
39
40
41
42
43
44
function [k, X, Y, pasos, HESS] = vnnolinealmatlab5(F, signoX, signoXF, k0, X0)
45
[F, signoX, signoXF] = formaproblema(F, signoX, signoXF, 1);
46
[filas, columnas, ancho] = size(F);
47
if isempty(k0), k0 = 1; end
48
if isempty(X0), X0 = ones(1, filas)/filas; end
49
OPTIONS = foptions;
50
OPTIONS(2) = 1e-12; %Termination tolerance for X.(Default: 1e-4).
51
OPTIONS(3) = 1e-12; %Termination tolerance on F.(Default: 1e-4).
52
OPTIONS(4) = 1e-12; %Termination criterion on constraint violation.(Default: 1e-6)
53
LB = [0, zeros(1, filas)];
54
UB = [Inf, Inf*ones(1, filas)];
55
[V, optsal, LAMBDA, HESS] = constr('vnnolinealaux1', [k0,X0], OPTIONS, LB, UB, 'vnnolinealaux2', F);
56
k = V(1);
57
X = V(2:filas+1);
58
Y = LAMBDA(1:columnas);
59
pasos = optsal(10);
60
[X, Y] = formasolucion(X, Y, signoX, signoXF, 1);
61
62