File: simplex.texi

package info (click to toggle)
maxima 5.10.0-6
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 44,268 kB
  • ctags: 17,987
  • sloc: lisp: 152,894; fortran: 14,667; perl: 14,204; tcl: 10,103; sh: 3,376; makefile: 2,202; ansic: 471; awk: 7
file content (148 lines) | stat: -rw-r--r-- 5,161 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
@c english version 1.2
@menu
* Introducci@'on a simplex::
* Definiciones para simplex::
@end menu

@node Introducci@'on a simplex, Definiciones para simplex, simplex, simplex
@section Introducci@'on a simplex

El paquete @code{simplex} utiliza el algoritmo simplex para programaci@'on lineal.

Ejemplo:

@c ===beg===
@c load("simplex")$
@c minimize_sx(x+y, [3*x+2*y>2, x+4*y>3]);
@c ===end===
@example
(%i1) load("simplex")$
(%i2) minimize_sx(x+y, [3*x+2*y>2, x+4*y>3]);
                       9        7       1
(%o2)                 [--, [y = --, x = -]]
                       10       10      5
@end example

@node Definiciones para simplex,  , Introducci@'on a simplex, simplex
@section Definiciones para simplex

@defvr {Variable opcional} epsilon_sx
Valor por defecto: @code{10^-8}

Error epsilon utilizado en los c@'alculos num@'ericos de @code{linear_program}.

V@'ease tambi@'en @code{linear_program}.

@end defvr

@deffn {Funci@'on} linear_program (@var{A}, @var{b}, @var{c})

La funci@'on @code{linear_program} es una implementaci@'on del algoritmo
simplex. La instrucci@'on @code{linear_program(A, b, c)} calcula un 
vector @var{x} tal que minimiza @code{c.x} bajo las restricciones @code{A.x = b}
y @code{x >= 0}. El argumento @var{A} es una matriz y los argumentos @var{b} y
@var{c} son listas.

La funci@'on @code{linear_program} devuelve una lista que contiene el vector
soluci@'on @var{x} y el valor m@'{@dotless{i}}nimo de @code{c.x}.
Si el problema no est@'a acotado, devuelve el mensaje "Problem not bounded!"
y si el problema no es factible, devuelve el mensaje "Problem not feasible!".

Para usar esta funci@'on, c@'arguese primero el paquete con la
instrucci@'on @code{load(simplex);}.

Ejemplo:


@c ===beg===
@c A: matrix([1,1,-1,0], [2,-3,0,-1], [4,-5,0,0])$
@c b: [1,1,6]$
@c c: [1,-2,0,0]$
@c linear_program(A, b, c);
@c ===end===
@example
(%i1) A: matrix([1,1,-1,0], [2,-3,0,-1], [4,-5,0,0])$
(%i2) b: [1,1,6]$
(%i3) c: [1,-2,0,0]$
(%i4) linear_program(A, b, c);
                     [ 1   1   - 1   0  ]
                     [                  ]
(%o4) linear_program([ 2  - 3   0   - 1 ], [1, 1, 6], 
                     [                  ]
                     [ 4  - 5   0    0  ]
                                                  [1, - 2, 0, 0])
@end example

V@'eanse tambi@'en @code{minimize_sx}, @code{scale_sx} y @code{epsilon_sx}.

@end deffn

@deffn {Funci@'on} maximize_sx (@var{obj}, @var{cond}, [@var{pos}])

Maximiza la funci@'on objetivo lineal @var{obj} sujeta a ciertas restricciones
lineales @var{cond}. V@'ease @code{minimize_sx} para una descripci@'on detallada
de los argumentos y de la respuesta dada por esta funci@'on.

@end deffn

@deffn {Funci@'on} minimize_sx (@var{obj}, @var{cond}, [@var{pos}])

Minimiza la funci@'on objetivo lineal @var{obj} sujeta a ciertas restricciones
lineales @var{cond}, siendo @'esta una lista de ecuaciones o inecuaciones lineales.
En las inecuaciones estrictas se reemplaza @code{>} por @code{>=} y @code{<}
por @code{<=}. El argumento opcional @var{pos} es una lista de variables de
decisi@'on que se suponen positivas.

Si el m@'{@dotless{i}}nimo existe, @code{minimize_sx} devuelve una lista que
contiene el valor m@'{@dotless{i}}nimo de la funci@'on objetivo y una lista 
de valores para las variables de decisi@'on con los que se alcanza el 
m@'{@dotless{i}}nimo. 
Si el problema no est@'a acotado, devuelve el mensaje "Problem not bounded!"
y si el problema no es factible, devuelve el mensaje "Problem not feasible!".

Las variables de decisi@'on no se suponen no negativas. Si todas las 
variables de decisi@'on son no negativas, as@'{@dotless{i}}gnese el valor
@code{true} a la variable @code{nonegative_sx}. Si s@'olo algunas de las
variables de decisi@'on son positivas, l@'{@dotless{i}}stense
en el argumento opcional @var{pos}, lo cual es m@'as eficiente que 
a@~nadir restricciones.

La funci@'on @code{minimize_sx} utiliza el algoritmo simplex implementado
en la funci@'on @code{linear_program} de Maxima.

Para usar esta funci@'on, c@'arguese primero el paquete con la
instrucci@'on @code{load(simplex);}.

Ejemplos:

@c ===beg===
@c minimize_sx(x+y, [3*x+y=0, x+2*y>2]);
@c minimize_sx(x+y, [3*x+y>0, x+2*y>2]), nonegative_sx=true;
@c minimize_sx(x+y, [3*x+y=0, x+2*y>2]), nonegative_sx=true;
@c minimize_sx(x+y, [3*x+y>0]);
@c ===end===
@example
(%i1) minimize_sx(x+y, [3*x+y=0, x+2*y>2]);
(%o1)    minimize_sx(y + x, [y + 3 x = 0, 2 y + x > 2])
(%i2) minimize_sx(x+y, [3*x+y>0, x+2*y>2]), nonegative_sx=true;
(%o2)    minimize_sx(y + x, [y + 3 x > 0, 2 y + x > 2])
(%i3) minimize_sx(x+y, [3*x+y=0, x+2*y>2]), nonegative_sx=true;
(%o3)    minimize_sx(y + x, [y + 3 x = 0, 2 y + x > 2])
(%i4) minimize_sx(x+y, [3*x+y>0]);
(%o4)           minimize_sx(y + x, [y + 3 x > 0])
@end example


V@'eanse tambi@'en @code{maximize_sx}, @code{nonegative_sx} y @code{epsilon_sx}.

@end deffn

@defvr {Variable opcional} nonegative_sx
Valor por defecto: @code{false}

Si @code{nonegative_sx} vale @code{true} todas las variables de decisi@'on
pasadas a @code{minimize_sx} y a @code{maximize_sx} se suponen positivas.

V@'ease tambi@'en @code{minimize_sx}.

@end defvr