1
@c english version 1.23
3
* Definiciones para Ecuaciones::
6
@node Definiciones para Ecuaciones, , Ecuaciones, Ecuaciones
8
@section Definiciones para Ecuaciones
10
@defvr {Variable del sistema} %rnum_list
11
Valor por defecto: @code{[]}
13
La variable @code{%rnum_list} es la lista de variables introducidas en las soluciones por la funci@'on @code{algsys}.
14
Las variables @code{%r} se a@~naden a @code{%rnum_list} en su orden de creaci@'on. Esto es @'util para hacer sustituciones en la soluci@'on.
19
@defvr {Variable opcional} algexact
20
Default value: @code{false}
22
El contenido de la variable @code{algexact} afecta al comportamiento de @code{algsys} de la siguiente forma:
24
Si @code{algexact} vale @code{true}, @code{algsys} llamar@'a siempre a @code{solve} y luego utilizar@'a @code{realroots}.
26
Si @code{algexact} vale @code{false}, @code{solve} ser@'a llamada s@'olo si la ecuaci@'on no es univariante, o si es cuadr@'atica o bicuadr@'atica.
28
Sin embargo, @code{algexact: true} no garantiza que @'unicamente se obtengan soluciones exactas, ya que aunque @code{algsys} intente siempre dar soluciones exactas, dar@'a resultados aproximados si no encuentra una soluci@'on mejor.
30
@c ABOVE DESCRIPTION NOT TOO CLEAR -- MAYBE EXAMPLES WILL HELP
33
@deffn {Funci@'on} algsys ([@var{expr_1}, ..., @var{expr_m}], [@var{x_1}, ..., @var{x_n}])
34
@deffnx {Funci@'on} algsys ([@var{eqn_1}, ..., @var{eqn_m}], [@var{x_1}, ..., @var{x_n}])
36
Resuelve el sistema de ecuaciones polin@'omicas @var{expr_1}, ..., @var{expr_m}
37
o las ecuaciones @var{eqn_1}, ..., @var{eqn_m} para las variables @var{x_1}, ..., @var{x_n}.
38
La expresi@'on @var{expr} equivale a la ecuaci@'on @code{@var{expr} = 0}. Puede haber m@'as ecuaciones que variables o viceversa.
40
La funci@'on @code{algsys} devuelve una lista de soluciones, cada una de las cuales consistente a su vez en una lista de ecuaciones asociando valores a las variables @var{x_1}, ..., @var{x_n} que satisfacen el sistema de ecuaciones.
41
Si @code{algsys} no puede encontrar soluciones devuelve la lista vac@'{@dotless{i}}a @code{[]}.
43
Si es necesario se introducen en la soluci@'on los s@'{@dotless{i}}mbolos @code{%r1}, @code{%r2}, ..., para representar par@'ametros arbitrarios; estas variables tambi@'en se a@~naden a la lista @code{%rnum_list}.
45
El proceso que se sigue es el siguiente:
47
(1) Primero se factorizan las ecuaciones y se reparten en subsistemas.
49
(2) Para cada subsistema @var{S_i}, se seleccionan una ecuaci@'on @var{E} y una variable @var{x}. Se elige la variable que tenga grado menor. Entonces se calcula el resultado de @var{E} y @var{E_j} respecto de @var{x}, siendo las @var{E_j} el resto de ecuaciones del subsistema @var{S_i}. De aqu@'{@dotless{i}} se obtiene otro subsistema @var{S_i'} con una inc@'ognita menos, ya que @var{x} ha sido eliminada. El proceso ahora vuelve al paso (1).
51
(3) En ocasiones se obtiene un subsistema consistente en una @'unica ecuaci@'on. Si la ecuaci@'on es multivariante y no se han introducido aproximaciones en formato decimal de coma flotante, entonces se llama a @code{solve} para tratar de encontrar una soluci@'on exacta.
53
En algunos casos, @code{solve} no puede encontrar la soluci@'on, o si lo consigue puede que el resultado tenga una expresi@'on muy grande.
55
Si la ecuaci@'on tiene una s@'ola inc@'ognita y es lineal, o cuadr@'atica o bicuadr@'atica, entonces se llama a la funci@'on @code{solve} si no se han introducido aproximaciones en formato decimal. Si se han introducido aproximaciones, o si hay m@'as de una inc@'ognita, o si no es lineal, ni cuadr@'atica ni bicuadr@'atica, y si la variables @code{realonly} vale @code{true}, entonces se llama a la funci@'on @code{realroots} para calcular las soluciones reales. Si
56
@code{realonly} vale @code{false}, entonces se llama a @code{allroots} para obtener las soluciones reales y complejas.
58
Si @code{algsys} devuelve una soluci@'on que tiene menos d@'{@dotless{i}}gitos significativos de los requeridos, el usuario puede cambiar a voluntad el valor de @code{algepsilon} para obtener mayor precisi@'on.
60
Si @code{algexact} vale @code{true}, se llamar@'a siempre a @code{solve}.
62
Cuando @code{algsys} encuentra una ecuaci@'on con m@'ultiples inc@'ognitas y que contiene aproximaciones en coma flotante (normalmente debido a la imposibilidad de encontrar soluciones exactas en pasos anteriores), entonces no intenta aplicar los m@'etodos exactos a estas ecuaciones y presenta el mensaje:
63
"@code{algsys} cannot solve - system too complicated."
65
Las interacciones con @code{radcan} pueden dar lugar a expresiones grandes o complicadas. En tal caso, puede ser posible aislar partes del resultado con @code{pickapart} o @code{reveal}.
67
Ocasionalmente, @code{radcan} puede introducir la unidad imaginaria @code{%i} en una soluci@'on que de hecho es real.
72
@c e1: 2*x*(1 - a1) - 2*(x - 1)*a2;
74
@c e3: a1*(-y - x^2 + 1);
75
@c e4: a2*(y - (x - 1)^2);
76
@c algsys ([e1, e2, e3, e4], [x, y, a1, a2]);
78
@c e2: -1 - y + 2*y^2 - x + x^2;
79
@c algsys ([e1, e2], [x, y]);
82
(%i1) e1: 2*x*(1 - a1) - 2*(x - 1)*a2;
83
(%o1) 2 (1 - a1) x - 2 a2 (x - 1)
86
(%i3) e3: a1*(-y - x^2 + 1);
88
(%o3) a1 (- y - x + 1)
89
(%i4) e4: a2*(y - (x - 1)^2);
91
(%o4) a2 (y - (x - 1) )
92
(%i5) algsys ([e1, e2, e3, e4], [x, y, a1, a2]);
93
(%o5) [[x = 0, y = %r1, a1 = 0, a2 = 0],
95
[x = 1, y = 0, a1 = 1, a2 = 1]]
99
(%i7) e2: -1 - y + 2*y^2 - x + x^2;
101
(%o7) 2 y - y + x - x - 1
102
(%i8) algsys ([e1, e2], [x, y]);
104
(%o8) [[x = - -------, y = -------],
108
[x = -------, y = - -------], [x = - -, y = - -], [x = 1, y = 1]]
114
@deffn {Funci@'on} allroots (@var{expr})
115
@deffnx {Funci@'on} allroots (@var{eqn})
117
Calcula aproximaciones num@'ericas de las ra@'{@dotless{i}}ces reales y complejas del polinomio @var{expr} o ecuaci@'on polin@'omica @var{eqn} de una variable.
119
@c polyfactor IS NOT OTHERWISE DOCUMENTED
120
Si la variable @code{polyfactor} vale @code{true} hace que la funci@'on
121
@code{allroots} factorice el polinomio para n@'umeros reales si el polinomio es real, o para n@'umeros complejos si el polinomio es complejo.
123
La funci@'on @code{allroots} puede dar resultados inexactos en caso de que haya ra@'{@dotless{i}}ces m@'ultiples.
124
Si el polinomio es real, @code{allroots (%i*@var{p})}) puede alcanzar mejores aproximaciones que @code{allroots (@var{p})},
125
ya que @code{allroots} ejecuta entonces un algoritmo diferente.
127
La funci@'on @code{allroots} no opera sobre expresiones no polin@'omicas, pues requiere que el numerador sea reducible a un polinomio y el denominador sea, como mucho, un n@'umero complejo.
129
Para polinomios complejos se utiliza el algoritmo de Jenkins y Traub descrito en (Algorithm 419, @i{Comm. ACM}, vol. 15, (1972), p. 97). Para polinomios reales se utiliza el algoritmo de Jenkins descrito en (Algorithm 493, @i{ACM TOMS},
130
vol. 1, (1975), p.178).
133
@c EXAMPLES GENERATED BY THESE INPUTS:
134
@c eqn: (1 + 2*x)^3 = 13.5*(1 + x^5);
135
@c soln: allroots (eqn);
137
@c do (e2: subst (e, eqn), disp (expand (lhs(e2) - rhs(e2))));
142
(%i1) eqn: (1 + 2*x)^3 = 13.5*(1 + x^5);
144
(%o1) (2 x + 1) = 13.5 (x + 1)
145
(%i2) soln: allroots (eqn);
146
(%o2) [x = .8296749902129361, x = - 1.015755543828121,
148
x = .9659625152196369 %i - .4069597231924075,
150
x = - .9659625152196369 %i - .4069597231924075, x = 1.0]
152
do (e2: subst (e, eqn), disp (expand (lhs(e2) - rhs(e2))));
153
- 3.5527136788005E-15
155
- 5.32907051820075E-15
157
4.44089209850063E-15 %i - 4.88498130835069E-15
159
- 4.44089209850063E-15 %i - 4.88498130835069E-15
164
(%i4) polyfactor: true$
165
(%i5) allroots (eqn);
166
(%o5) - 13.5 (x - 1.0) (x - .8296749902129361)
169
(x + 1.015755543828121) (x + .8139194463848151 x
176
@c FALTA AQUI LA DEFINICION DE backsubst
178
@defvr {Variable opcional} breakup
179
Valor por defecto: @code{true}
181
Si @code{breakup} vale @code{true}, @code{solve} expresa sus soluciones a las ecuaciones c@'ubicas y cu@'articas en t@'erminos de subexpresiones comunes, las cuales son asignadas a etiquetas del tipo @code{%t1}, @code{%t2}, etc.
182
En otro caso, no se identifican subexpresiones comunes.
184
La asignaci@'on @code{breakup: true} s@'olo tiene efecto cuando @code{programmode} vale @code{false}.
189
(%i1) programmode: false$
191
(%i3) solve (x^3 + x^2 - 1);
194
(%t3) (--------- + --)
201
(%t4) x = (- ---------- - -) %t3 + -------------- - -
207
(%t5) x = (---------- - -) %t3 + ---------------- - -
211
(%t6) x = %t3 + ----- - -
213
(%o6) [%t4, %t5, %t6]
214
(%i6) breakup: false$
215
(%i7) solve (x^3 + x^2 - 1);
221
(%t7) x = --------------------- + (--------- + --)
222
sqrt(23) 25 1/3 6 sqrt(3) 54
227
(- ---------- - -) - -
230
sqrt(23) 25 1/3 sqrt(3) %i 1
231
(%t8) x = (--------- + --) (---------- - -)
237
+ --------------------- - -
243
(%t9) x = (--------- + --) + --------------------- - -
244
6 sqrt(3) 54 sqrt(23) 25 1/3 3
247
(%o9) [%t7, %t8, %t9]
252
@deffn {Funci@'on} dimension (@var{eqn})
253
@deffnx {Funci@'on} dimension (@var{eqn_1}, ..., @var{eqn_n})
255
El paquete @code{dimen} es para an@'alisis dimensional. La instrucci@'on @code{load ("dimen")} carga el paquete y
256
@code{demo ("dimen")} presenta una peque@~na demostraci@'on.
257
@c I GUESS THIS SHOULD BE EXPANDED TO COVER EACH FUNCTION IN THE PACKAGE
261
@defvr {Variable opcional} dispflag
262
Valor por defecto: @code{true}
264
@c WHAT DOES THIS MEAN ??
265
Si @code{dispflag} vale @code{false}, entonces se inhibir@'a que Maxima muestre resultados de las funciones que resuelven ecuaciones cuando @'estas son llamadas desde dentro de un bloque (@code{block}). Cuando un bloque termina con el signo del d@'olar, $, a la variable @code{dispflag} se le asigna @code{false}.
269
@deffn {Funci@'on} funcsolve (@var{eqn}, @var{g}(@var{t}))
271
Devuelve @code{[@var{g}(@var{t}) = ...]} o @code{[]}, dependiendo de que exista o no una funci@'on racional @code{@var{g}(@var{t})} que satisfaga @var{eqn}, la cual debe ser un polinomio de primer orden, lineal para @code{@var{g}(@var{t})} y @code{@var{g}(@var{t}+1)}
274
(%i1) eqn: (n + 1)*f(n) - (n + 3)*f(n + 1)/(n + 1) = (n - 1)/(n + 2);
275
(n + 3) f(n + 1) n - 1
276
(%o1) (n + 1) f(n) - ---------------- = -----
278
(%i2) funcsolve (eqn, f(n));
280
Dependent equations eliminated: (4 3)
282
(%o2) f(n) = ---------------
286
Aviso: esta es una implemetaci@'on rudimentaria, por lo que debe ser utilizada con cautela.
290
@defvr {Variable opcional} globalsolve
291
Valor por defecto: @code{false}
293
Si @code{globalsolve} vale @code{true},
294
a las inc@'ognitas de las ecuaciones se les asignan las soluciones encontradas por @code{linsolve} y
295
por @code{solve} cuando se resuelven sistemas de dos o m@'as ecuaciones lineales.
297
Si @code{globalsolve} vale @code{false},
298
las soluciones encontradas por @code{linsolve} y por @code{solve} cuando se resuelven sistemas de dos o m@'as ecuaciones lineales se expresan como ecuaciones y a las inc@'ognitas no se le asignan valores.
300
Cuando se resuelven ecuaciones que no son sistemas de dos o m@'as ecuaciones lineales, @code{solve} ignora el valor de @code{globalsolve}. Otras funciones que resuelven ecuaciones (como @code{algsys}) ignoran siempre el valor de @code{globalsolve}.
305
(%i1) globalsolve: true$
306
(%i2) solve ([x + 3*y = 2, 2*x - y = 5], [x, y]);
325
(%i5) globalsolve: false$
327
(%i7) solve ([x + 3*y = 2, 2*x - y = 5], [x, y]);
346
@deffn {Funci@'on} ieqn (@var{ie}, @var{unk}, @var{tech}, @var{n}, @var{guess})
347
El paquete @code{inteqn} se dedica a la resoluci@'on de ecuaciones integrales. Para hacer uso de @'el, ejecutar la instrucci@'on @code{load ("inteqn")}.
349
El argumento @var{ie} es la ecuaci@'on integral; @var{unk} es la funci@'on inc@'ognita; @var{tech} es el m@'etodo a aplicar para efectuar la resoluci@'on del problema (@var{tech} = @code{first} significa: aplica el primer m@'etodo que encuentre una soluci@'on; @var{tech} = @code{all} significa: aplica todos los m@'etodos posibles); @var{n} es el n@'umero m@'aximo de t@'erminos que debe tomar @code{taylor}, @code{neumann}, @code{firstkindseries} o @code{fredseries} (tambi@'en es el m@'aximo nivel de recursi@'on para el m@'etodo de diferenciaci@'on); @var{guess} es la soluci@'on candidata inicial para @code{neumann} o @code{firstkindseries}.
351
Valores por defecto para los argumentos segundo a quinto son:
353
@var{unk}: @code{@var{p}(@var{x})}, donde @var{p} es la primera funci@'on desconocida que Maxima encuentra en el integrando y @var{x} es la variable que act@'ua como argumento en la primera aparici@'on de @var{p} encontrada fuera de una integral en el caso de ecuaciones de segunda especie (@code{secondkind}), o es la @'unica variable aparte de la de integraci@'on en el caso de ecuaciones de primera especie (@code{firstkind}). Si el intento de encontrar @var{x} falla, el usuario ser@'a consultado para suministrar una variable independiente.
355
@c FALTAN AQUI ALGUNAS LINEAS
360
@defvr {Variable opcional} ieqnprint
361
Valor por defecto: @code{true}
363
La variable @code{ieqnprint} controla el comportamiento del resultado retornado por la instrucci@'on @code{ieqn}. Si @code{ieqnprint} vale @code{false}, la lista devuelta por la funci@'on @code{ieqn} tiene el formato
365
[@var{soluci@'on}, @var{m@'etodo utilizado}, @var{nterms}, @var{variable}]
367
donde @var{variable} estar@'a ausente si la soluci@'on es exacta; en otro caso, ser@'a la palabra @code{approximate} o @code{incomplete} seg@'un que la soluci@'on sea inexacta o que no tenga forma expl@'{@dotless{i}}cita, respectivamente. Si se ha utilizado un m@'etodo basado en series, @var{nterms} es el n@'umero de t@'erminos utilizado, que puede ser menor que el @code{n} dado a @code{ieqn}.
371
@deffn {Funci@'on} lhs (@var{expr})
372
Devuelve el miembro izquierdo (es decir, el primer argumento)
373
de la expresi@'on @var{expr},
374
cuando el operador de @var{expr} es uno de los operadores
375
de relaci@'on @code{< <= = # equal notequal >= >},
376
o un operadores de asignaci@'on @code{:= ::= : ::},
377
o un operador infijo binario definido por el usuario mediante @code{infix}.
379
Si @var{expr} es un @'atomo o si su operador es diferente de los
380
citados m@'as arriba, @code{lhs} devuelve @var{expr}.
382
V@'ease tambi@'en @code{rhs}.
390
@c [lhs (aa < bb), lhs (aa <= bb), lhs (aa >= bb), lhs (aa > bb)];
391
@c [lhs (aa = bb), lhs (aa # bb), lhs (equal (aa, bb)), lhs (notequal (aa, bb))];
392
@c e1: '(foo(x) := 2*x);
393
@c e2: '(bar(y) ::= 3*y);
396
@c [lhs (e1), lhs (e2), lhs (e3), lhs (e4)];
401
(%i1) e: aa + bb = cc;
407
(%i4) [lhs (aa < bb), lhs (aa <= bb), lhs (aa >= bb), lhs (aa > bb)];
408
(%o4) [aa, aa, aa, aa]
409
(%i5) [lhs (aa = bb), lhs (aa # bb), lhs (equal (aa, bb)), lhs (notequal (aa, bb))];
410
(%o5) [aa, aa, aa, aa]
411
(%i6) e1: '(foo(x) := 2*x);
413
(%i7) e2: '(bar(y) ::= 3*y);
419
(%i10) [lhs (e1), lhs (e2), lhs (e3), lhs (e4)];
420
(%o10) [foo(x), bar(y), x, x]
423
(%i12) lhs (aa ][ bb);
429
@deffn {Funci@'on} linsolve ([@var{expr_1}, ..., @var{expr_m}], [@var{x_1}, ..., @var{x_n}])
430
Resuelve la lista de ecuaciones lineales simult@'aneas para la lista de variables. Las expresiones deben ser polinomios lineales respecto de las variables o ecuaciones.
432
Si @code{globalsolve} vale @code{true},
433
a cada inc@'ognita se le asigna el valor de la soluci@'on encontrada.
435
Si @code{backsubst} vale @code{false}, @code{linsolve}
436
no hace la sustituci@'on tras la triangulariaci@'on de las ecuaciones.
437
Esto puede ser necesario en problemas muy grandes en los que la
438
sustituci@'on puede dar lugar a la generaci@'on de expresiones
441
Si @code{linsolve_params} vale @code{true}, @code{linsolve} tambi@'en genera s@'{@dotless{i}}mbolos @code{%r} para representar par@'ametros arbitrarios como los descritos para la funci@'on @code{algsys}. Si vale @code{false}, el resultado devuelto por @code{linsolve} expresar@'a, si es el sistema es indeterminado, unas variables en funci@'on de otras.
443
Si @code{programmode} vale @code{false},
444
@code{linsolve} muestra la soluci@'on con etiquetas de expresiones
445
intermedias (@code{%t}) y devuelve las lista de etiquetas.
449
@c e2: 2*a*x - y = 2*a^2;
451
@c [globalsolve: false, programmode: true];
452
@c linsolve ([e1, e2, e3], [x, y, z]);
453
@c [globalsolve: false, programmode: false];
454
@c linsolve ([e1, e2, e3], [x, y, z]);
456
@c [globalsolve: true, programmode: false];
457
@c linsolve ([e1, e2, e3], [x, y, z]);
460
@c [globalsolve: true, programmode: true];
461
@c linsolve ([e1, e2, e3], '[x, y, z]);
467
(%i2) e2: 2*a*x - y = 2*a^2;
469
(%o2) 2 a x - y = 2 a
470
(%i3) e3: y - 2*z = 2;
472
(%i4) [globalsolve: false, programmode: true];
474
(%i5) linsolve ([e1, e2, e3], [x, y, z]);
475
(%o5) [x = a + 1, y = 2 a, z = a - 1]
476
(%i6) [globalsolve: false, programmode: false];
478
(%i7) linsolve ([e1, e2, e3], [x, y, z]);
486
(%o9) [%t7, %t8, %t9]
488
(%o9) [z = a - 1, y = 2 a, x = a + 1]
489
(%i10) [globalsolve: true, programmode: false];
491
(%i11) linsolve ([e1, e2, e3], [x, y, z]);
499
(%o13) [%t11, %t12, %t13]
501
(%o13) [z : a - 1, y : 2 a, x : a + 1]
503
(%o14) [a + 1, 2 a, a - 1]
504
(%i15) [globalsolve: true, programmode: true];
506
(%i16) linsolve ([e1, e2, e3], '[x, y, z]);
507
(%o16) [x : a + 1, y : 2 a, z : a - 1]
509
(%o17) [a + 1, 2 a, a - 1]
514
@defvr {Variable opcional} linsolvewarn
515
Valor por defecto: @code{true}
517
Si @code{linsolvewarn} vale @code{true}, @code{linsolve} mostrar@'a el mensaje: "Dependent equations eliminated".
521
@defvr {Variable opcional} linsolve_params
522
Valor por defecto: @code{true}
524
Si @code{linsolve_params} vale @code{true}, @code{linsolve} tambi@'en genera s@'{@dotless{i}}mbolos @code{%r} para representar par@'ametros arbitrarios como los descritos para la funci@'on @code{algsys}. Si vale @code{false}, el resultado devuelto por @code{linsolve} expresar@'a, si es el sistema es indeterminado, unas variables en funci@'on de otras.
528
@defvr {System variable} multiplicities
529
Valor por defecto: @code{not_set_yet}
531
La variable @code{multiplicities} es una con las multiplicidades de las soluciones encontradas por @code{solve} o
533
@c NEED AN EXAMPLE HERE
537
@deffn {Funci@'on} nroots (@var{p}, @var{low}, @var{high})
538
Devuelve el n@'umero de ra@'{@dotless{i}}ces reales del polinomio real univariante @var{p} en el intervalo semiabierto
539
@code{(@var{low}, @var{high}]}. Los extremos del intervalo pueden ser @code{minf} o @code{inf}, menos y m@'as infinito.
541
La funci@'on @code{nroots} utiliza el m@'etodo de las secuencias de Sturm.
544
(%i1) p: x^10 - 2*x^4 + 1/2$
545
(%i2) nroots (p, -6, 9.1);
551
@deffn {Funci@'on} nthroot (@var{p}, @var{n})
553
Siendo @code{p} un polinomio de coeficientes enteros y @code{n} un entero positivo, @code{nthroot} devuelve un polinomio @code{q}, tambi@'en de coeficientes enteros, tal que @code{q^n=p}, o un mensaje de error indicando que @code{p} no es una @code{n}-potencia exacta. Esta funci@'on es bastante m@'as r@'apida que @code{factor} y que @code{sqfr}.
557
@defvr {Variable opcional} programmode
558
Valor por defecto: @code{true}
560
Si @code{programmode} vale @code{true}, @code{solve}, @code{realroots}, @code{allroots} y @code{linsolve}
561
devuelve sus soluciones como elementos de una lista. @c FALTAN AQUI ALGUNAS FRASES
563
Si @code{programmode} vale @code{false}, @code{solve} y las dem@'as crean expresiones intermedias etiquetadas @code{%t1}, @code{t2}, etc., y les asinan las soluciones.
566
(%i1) solve(x^2+x+1);
567
sqrt(3) %i + 1 sqrt(3) %i - 1
568
(%o1) [x = - --------------, x = --------------]
570
(%i2) programmode:false$
571
(%i3) solve(x^2+x+1);
575
(%t3) x = - --------------
579
(%t4) x = --------------
586
@defvr {Variable opcional} realonly
587
Valor por defecto: @code{false}
589
Si @code{realonly} vale @code{true}, @code{algsys} s@'olo devuelve aquellas soluciones exentas de la constante @code{%i}.
593
@deffn {Funci@'on} realroots (@var{poly}, @var{bound})
594
Encuentra todas las ra@'{@dotless{i}}ces reales del polinomio real univariante con la tolerancia especificada por @code{bound}, que si es menor que 1, hace que se busquen las ra@'{@dotless{i}}ces enteras de forma exacta. El argumento @code{bound} puede ser arbitrariamente peque@~no a fin de conseguir la precisi@'on deseada. El primer argumento tambi@'en puede ser una ecuaci@'on. La funci@'on @code{realroots} asigna un valor a @code{multiplicities}, @'util en caso de ra@'{@dotless{i}}ces m@'ultiples. La llamada @code{realroots (@var{p})} equivale a @code{realroots (@var{p}, rootsepsilon)}. La variable @code{rootsepsilon} es un n@'umeroreal que establece los intervalos de confianza para las ra@'{@dotless{i}}ces. H@'agase @code{example (realroots)} para ver un ejemplo.
598
@deffn {Funci@'on} rhs (@var{expr})
599
Devuelve el miembro derecho (es decir, el segundo argumento)
600
de la expresi@'on @var{expr},
601
cuando el operador de @var{expr} es uno de los operadores
602
de relaci@'on @code{< <= = # equal notequal >= >},
603
o un operadores de asignaci@'on @code{:= ::= : ::},
604
o un operador infijo binario definido por el usuario mediante @code{infix}.
606
Si @var{expr} es un @'atomo o si su operador es diferente de los
607
citados m@'as arriba, @code{rhs} devuelve @var{expr}.
609
V@'ease tambi@'en @code{lhs}.
617
@c [rhs (aa < bb), rhs (aa <= bb), rhs (aa >= bb), rhs (aa > bb)];
618
@c [rhs (aa = bb), rhs (aa # bb), rhs (equal (aa, bb)), rhs (notequal (aa, bb))];
619
@c e1: '(foo(x) := 2*x);
620
@c e2: '(bar(y) ::= 3*y);
623
@c [rhs (e1), rhs (e2), rhs (e3), rhs (e4)];
628
(%i1) e: aa + bb = cc;
634
(%i4) [rhs (aa < bb), rhs (aa <= bb), rhs (aa >= bb), rhs (aa > bb)];
635
(%o4) [bb, bb, bb, bb]
636
(%i5) [rhs (aa = bb), rhs (aa # bb), rhs (equal (aa, bb)), rhs (notequal (aa, bb))];
637
(%o5) [bb, bb, bb, bb]
638
(%i6) e1: '(foo(x) := 2*x);
640
(%i7) e2: '(bar(y) ::= 3*y);
646
(%i10) [rhs (e1), rhs (e2), rhs (e3), rhs (e4)];
647
(%o10) [2 x, 3 y, y, y]
650
(%i12) rhs (aa ][ bb);
656
@defvr {Variable opcional} rootsconmode
657
Valor por defecto: @code{true}
659
La variable @code{rootsconmode} controla el comportamiento de la instrucci@'on @code{rootscontract}. V@'ease @code{rootscontract} para m@'as detalles.
663
@deffn {Funci@'on} rootscontract (@var{expr})
664
Convierte productos de ra@'{@dotless{i}}ces en ra@'{@dotless{i}}ces de productos. Por ejemplo, @code{rootscontract (sqrt(x)*y^(3/2))} devuelve @code{sqrt(x*y^3)}.
666
Si @code{radexpand} vale @code{true} y @code{domain} vale @code{real},
667
@code{rootscontract} convierte @code{abs} en @code{sqrt}, por ejemplo,
668
@code{rootscontract (abs(x)*sqrt(y))} devuelve @code{sqrt(x^2*y)}.
670
La opci@'on @code{rootsconmode} afecta el resultado de @code{rootscontract} como sigue:
673
Problema Valor de Resultadod de
674
rootsconmode rootscontract
676
x^(1/2)*y^(3/2) false (x*y^3)^(1/2)
677
x^(1/2)*y^(1/4) false x^(1/2)*y^(1/4)
678
x^(1/2)*y^(1/4) true (x*y^(1/2))^(1/2)
679
x^(1/2)*y^(1/3) true x^(1/2)*y^(1/3)
680
x^(1/2)*y^(1/4) all (x^2*y)^(1/4)
681
x^(1/2)*y^(1/3) all (x^3*y^2)^(1/6)
684
Si @code{rootsconmode} vale @code{false}, @code{rootscontract} contrae s@'olamente respecto de exponentes racionales cuyos denominadores sean iguales. La clave para los ejemplos @code{rootsconmode: true} es simplemente que 2 divide a 4 pero no a 3. La asignaci@'on @code{rootsconmode: all} hace que se calcule el m@'{@dotless{i}}nimo com@'un m@'ultiplo de los denominadores de los exponentes.
686
La funci@'on @code{rootscontract} utiliza @code{ratsimp} de forma similar a como lo hace @code{logcontract}.
689
@c FOLLOWING ADAPTED FROM example (rootscontract)
690
@c rootsconmode: false$
691
@c rootscontract (x^(1/2)*y^(3/2));
692
@c rootscontract (x^(1/2)*y^(1/4));
693
@c rootsconmode: true$
694
@c rootscontract (x^(1/2)*y^(1/4));
695
@c rootscontract (x^(1/2)*y^(1/3));
696
@c rootsconmode: all$
697
@c rootscontract (x^(1/2)*y^(1/4));
698
@c rootscontract (x^(1/2)*y^(1/3));
699
@c rootsconmode: false$
700
@c rootscontract (sqrt(sqrt(x) + sqrt(1 + x))
701
@c *sqrt(sqrt(1 + x) - sqrt(x)));
702
@c rootsconmode: true$
703
@c rootscontract (sqrt(5 + sqrt(5)) - 5^(1/4)*sqrt(1 + sqrt(5)));
706
(%i1) rootsconmode: false$
707
(%i2) rootscontract (x^(1/2)*y^(3/2));
710
(%i3) rootscontract (x^(1/2)*y^(1/4));
713
(%i4) rootsconmode: true$
714
(%i5) rootscontract (x^(1/2)*y^(1/4));
715
(%o5) sqrt(x sqrt(y))
716
(%i6) rootscontract (x^(1/2)*y^(1/3));
719
(%i7) rootsconmode: all$
720
(%i8) rootscontract (x^(1/2)*y^(1/4));
723
(%i9) rootscontract (x^(1/2)*y^(1/3));
726
(%i10) rootsconmode: false$
727
(%i11) rootscontract (sqrt(sqrt(x) + sqrt(1 + x))
728
*sqrt(sqrt(1 + x) - sqrt(x)));
730
(%i12) rootsconmode: true$
731
(%i13) rootscontract (sqrt(5 + sqrt(5)) - 5^(1/4)*sqrt(1 + sqrt(5)));
737
@defvr {Variable opcional} rootsepsilon
738
Valor por defecto: 1.0e-7
740
La variable @code{rootsepsilon} es la tolerancia que establece el intervalo de confianza para las ra@'{@dotless{i}}ces calculadas por la funci@'on @code{realroots}.
741
@c IS IT GUARANTEED THAT |ACTUAL - ESTIMATE| < rootepsilon OR IS IT SOME OTHER NOTION ??
746
@deffn {Funci@'on} solve (@var{expr}, @var{x})
747
@deffnx {Funci@'on} solve (@var{expr})
748
@deffnx {Funci@'on} solve ([@var{eqn_1}, ..., @var{eqn_n}], [@var{x_1}, ..., @var{x_n}])
750
Resuelve la ecuaci@'on algebraica @var{expr} de inc@'ognita @var{x} y devuelve una lista de igualdades con la @var{x} despejada. Si @var{expr} no es una igualdad, se supone que se quiere resolver la ecuaci@'on @code{@var{expr} = 0}.
751
El argumento @var{x} puede ser una funci@'on (por ejemplo, @code{f(x)}), u otra expresi@'on no at@'omica, excepto una suma o producto. Puede omitirse @var{x} si @var{expr} contiene solamente una variable. El argumento @var{expr} puede ser una expresi@'on racional y puede contener funciones trigonom@'etricas, exponenciales, etc.
753
Se utiliza el siguiente m@'etodo de resoluci@'on:
755
Sea @var{E} la expresi@'on y @var{X} la inc@'ognita. Si @var{E} es lineal respecto de @var{X} entonces @var{X} se resuelve de forma trivial. En caso contrario, si @var{E} es de la forma @code{A*X^N + B} entonces el resultado es @code{(-B/A)^1/N)} multiplicado por las @code{N}-@'esimas ra@'{@dotless{i}}ces de la unidad.
757
Si @var{E} no es lineal respecto de @var{X} entonces el m@'aximo com@'un divisor de los exponentes de @var{X} en @var{E} (sup@'ongase que es @var{N}) se divide entre los exponentes y la multiplicidad de las ra@'{@dotless{i}}ces se multiplica por @var{N}. Entonces es llamado recursivamente @code{solve} para este resultado. Si @var{E} es factorizable entonces @code{solve} es invocado para cada uno de los factores. Finalmente, @code{solve} usar@'a, seg@'un sea necesario, las f@'ormulas cuadr@'atica, c@'ubica o cu@'artica.
759
En caso de que @var{E} sea un polinomio respecto de una funci@'on de la inc@'ognita, por ejemplo @code{F(X)}, entonces se calcula primero para @code{F(X)} (sea @var{C} el resultado obtenido), entonces la ecuaci@'on @code{F(X)=C} se resuelve para @var{X} en el supuesto que se conozca la inversa de la funci@'on @var{F}.
761
Si la variable @code{breakup} vale @code{false} har@'a que @code{solve} muestre las soluciones de las ecuaciones c@'ubicas o cu@'articas como expresiones @'unicas, en lugar de utilizar varias subexpresiones comunes, que es el formato por defecto.
763
A la variable @code{multiplicities} se le asignar@'a una lista con las multiplicidades de las soluciones individuales devueltas por @code{solve}, @code{realroots} o @code{allroots}. La instrucci@'on @code{apropos (solve)} har@'a que se muestren las variables optativas que de alg@'un modo afectan al comportamiento de @code{solve}. Se podr@'a luego utilizar la funci@'on @code{describe} para aquellas variables cuyo objeto no est@'e claro.
765
La llamada @code{solve ([@var{eqn_1}, ..., @var{eqn_n}], [@var{x_1}, ..., @var{x_n}])}
766
resuelve un sistema de ecuaciones polin@'omicas simult@'aneas (lineales o no) llamando a @code{linsolve} o @code{algsys} y devuelve una lista de listas con soluciones para las inc@'ognitas. En caso de haberse llamado a @code{linsolve} esta lista contendr@'a una @'unica lista de soluciones. La llamada a @code{solve} tiene dos listas como argumentos. La primera lista tiene las ecuaciones a resolver y la segunda son las inc@'ognitas cuyos valores se quieren calcular. Si el n@'umero de variables en las ecuaciones es igual al n@'umero de inc@'ognitas, el segundo argumento puede omitirse. En caso de sistemas lineales incompatibles se mostrar@'a el mensaje @code{inconsistent} (v@'ease la variable @code{solve_inconsistent_error}); si no existe una @'unica soluci@'on, se mostrar@'a el mensaje @code{singular}.
768
Si @code{programmode} vale @code{false},
769
@code{solve} muestra la soluci@'on con etiquetas de expresiones
770
intermedias (@code{%t}) y devuelve las lista de etiquetas.
773
Si @code{globalsolve} vale @code{true} y el problema consiste en resolver un sistema de dos o m@'as ecuaciones lineales, a cada inc@'ognita se le asigna el valor encontrado en la resoluci@'on del sistema.
776
@c FOLLOWING ADAPTED FROM example (solve)
778
@c solve (asin (cos (3*x))*(f(x) - 1), x);
779
@c ev (solve (5^f(x) = 125, f(x)), solveradcan);
780
@c [4*x^2 - y^2 = 12, x*y - x = 2];
781
@c solve (%, [x, y]);
782
@c solve (1 + a*x + x^3, x);
785
@c ev (x^6 - 1, %[1]);
789
@c ev (%th(2), %[1]);
792
(%i1) solve (asin (cos (3*x))*(f(x) - 1), x);
794
SOLVE is using arc-trig functions to get a solution.
795
Some solutions will be lost.
797
(%o1) [x = ---, f(x) = 1]
799
(%i2) ev (solve (5^f(x) = 125, f(x)), solveradcan);
801
(%o2) [f(x) = --------]
803
(%i3) [4*x^2 - y^2 = 12, x*y - x = 2];
805
(%o3) [4 x - y = 12, x y - x = 2]
806
(%i4) solve (%, [x, y]);
807
(%o4) [[x = 2, y = 2], [x = .5202594388652008 %i
809
- .1331240357358706, y = .0767837852378778
811
- 3.608003221870287 %i], [x = - .5202594388652008 %i
813
- .1331240357358706, y = 3.608003221870287 %i
815
+ .0767837852378778], [x = - 1.733751846381093,
817
y = - .1535675710019696]]
818
(%i5) solve (1 + a*x + x^3, x);
820
sqrt(3) %i 1 sqrt(4 a + 27) 1 1/3
821
(%o5) [x = (- ---------- - -) (--------------- - -)
827
- --------------------------, x =
830
3 (--------------- - -)
834
sqrt(3) %i 1 sqrt(4 a + 27) 1 1/3
835
(---------- - -) (--------------- - -)
841
- --------------------------, x =
844
3 (--------------- - -)
848
sqrt(4 a + 27) 1 1/3 a
849
(--------------- - -) - --------------------------]
852
3 (--------------- - -)
854
(%i6) solve (x^3 - 1);
855
sqrt(3) %i - 1 sqrt(3) %i + 1
856
(%o6) [x = --------------, x = - --------------, x = 1]
858
(%i7) solve (x^6 - 1);
859
sqrt(3) %i + 1 sqrt(3) %i - 1
860
(%o7) [x = --------------, x = --------------, x = - 1,
863
sqrt(3) %i + 1 sqrt(3) %i - 1
864
x = - --------------, x = - --------------, x = 1]
866
(%i8) ev (x^6 - 1, %[1]);
869
(%o8) ----------------- - 1
877
(%o11) [x = - 1, x = 1]
878
(%i12) ev (%th(2), %[1]);
884
@defvr {Variable opcional} solvedecomposes
885
Valor por defecto: @code{true}
887
Si @code{solvedecomposes} vale @code{true}, @code{solve} llama a @code{polydecomp} en caso de que se le pida resolver ecuaciones polin@'omicas.
888
@c OTHERWISE WHAT HAPPENS -- CAN'T SOLVE POLYNOMIALS, OR SOME OTHER METHOD IS USED ??
892
@defvr {Variable opcional} solveexplicit
893
Valor por defecto: @code{false}
895
Si @code{solveexplicit} vale @code{true}, le inhibe a @code{solve} devolver soluciones impl@'{@dotless{i}}citas, esto es, soluciones de la forma @code{F(x) = 0}, donde @code{F} es cierta funci@'on.
896
@c NEED AN EXAMPLE HERE
900
@defvr {Variable opcional} solvefactors
901
Valor por defecto: @code{true}
903
@c WHAT IS THIS ABOUT EXACTLY ??
904
Si @code{solvefactors} vale @code{false}, @code{solve} no intenta factorizar la expresi@'on. Este valor @code{false} puede ser @'util en algunos casos en los que la factorizaci@'on no es necesaria.
905
@c NEED AN EXAMPLE HERE
909
@defvr {Variable opcional} solvenullwarn
910
Valor por defecto: @code{true}
912
Si @code{solvenullwarn} vale @code{true}, @code{solve} muestra un mensaje de aviso si es llamado con una lista de ecuaciones vac@'{@dotless{i}}a o con una lista de inc@'ognitas vac@'{@dotless{i}}a. Por ejemplo, @code{solve ([], [])} imprimir@'a dos mensajes de aviso y devolver@'a @code{[]}.
916
@defvr {Variable opcional} solveradcan
917
Valor por defecto: @code{false}
919
Si @code{solveradcan} vale @code{true}, @code{solve} llama a @code{radcan}, lo que har@'a que @code{solve} se ejecute de forma m@'as lenta, pero permitir@'a que se resuelvan ciertas ecuaciones que contengan exponenciales y logaritmos.
920
@c NEED AN EXAMPLE HERE
924
@defvr {Variable opcional} solvetrigwarn
925
Valor por defecto: @code{true}
927
@c MAYBE THIS CAN BE CLARIFIED
928
Si @code{solvetrigwarn} vale @code{true}, @code{solve} puede presentar un mensaje diciendo que est@'a utilizando funciones trigonom@'etricas inversas para resolver la ecuaci@'on, y que por lo tanto puede estar ignorando algunas soluciones.
929
@c NEED AN EXAMPLE HERE
933
@defvr {Variable opcional} solve_inconsistent_error
934
Valor por defecto: @code{true}
936
Si @code{solve_inconsistent_error} vale @code{true}, @code{solve} y
937
@code{linsolve} devuelven un error si las ecuaciones a resolver son incompatibles. Si vale @code{false}, @code{solve} y @code{linsolve} devuelven la lista vac@'{@dotless{i}}a @code{[]} en caso de incompatibilidad.
942
(%i1) solve_inconsistent_error: true$
943
(%i2) solve ([a + b = 1, a + b = 2], [a, b]);
944
Inconsistent equations: (2)
945
-- an error. Quitting. To debug this try debugmode(true);
946
(%i3) solve_inconsistent_error: false$
947
(%i4) solve ([a + b = 1, a + b = 2], [a, b]);