viernes, 26 de marzo de 2010

Maxima: Resolución de Ecuaciones

En este capítulo, trataremos de cómo Resolver un Sistema de Ecuaciones mediante el software Maxima.

Aclarar, que este capítulo se ha basado en el entorno gráfico wxMaxima, pero la estructura y empleo de las funciones aquí expuestas son similares para cualquier entorno que se use.

La estructura de las funciones que vamos analizar es la que se muestra a continuación:

Maxima: Resolución de un Sistema de Ecuaciones.
solve (fun, variable fun)
Función solve.

Los argumentos que podemos pasar a la función expuesta anteriormente, son:
  • fun: Sistema de ecuaciones, cada ecuación irá separada por una coma (,) y dicho sistema, deberá estar encerrado entre corchetes [Sistema de ecuaciones].
  • variable fun: Variables del sistema de ecuaciones dado, debe ir encerradas entre corchetes y separada cada variable por una coma.
Una vez entendida las funciones que este programa nos pone a nuestra disposición, vamos a realizar algunos ejemplos para ver su funcionamiento.

Vamos a resolver el siguiente sistema de ecuaciones dado:

| 2x + 4y = 2
| x - y = 3

Identificando las partes de la función a transformar para emplear la herramienta de la transformada:

· fun [2x + 4y = 2, x - y = 3]
· variable fun [x, y]

Llegados a este punto, escribimos la función en Maxima:

solve([2*x+4*y=2, x-y=3], [x, y]);

Dónde el programa nos da como salida la la solución del sistema de ecuaciones dados:


Para resolver sistemas de ecuaciones más grandes, simplemente debemos separar cada ecuación por una coma y seguir el procedimiento dado en este capítulo.

Para más información sobre la función solve, se recomienda que se emplee la ayuda que trae incorporada el propio programa.

8 comentarios:

Anónimo dijo...

Hola

Gracias por esta información

He estado buscando información sobre la función solve y un caso concreto.

Si quisiéramos utilizar un valor dado por la función solve para realizar una cálculo posterior ¿cómo hay que hacerlo?

Me explico, en tu ejemplo te da valores de X e y. ¿Cómo podría utilizar esos valores como variables definidas para por ejemplo multiplicarlos entre sí mediante x*y o cualquier otro cálculo que se me antoje?

Copiar y pegar me parece un poco cutre.

Un saludo y gracias de antemano

Anónimo dijo...

Hola!

Soy el del comentario anterior.

Ya solucione mi duda. Se que tengo que utilizar globalsolve.

Sin embargo con globalsolve tengo un problema y es cuando la solución tiene más de un valor (por ejemplo raíces cuadradas, da valores + y -). En ese caso no sé como, o bien depreciar los valores negativos por ejemplo y que solve sólo me de los positivos, así me definiría correctamente la variable con globalsolve para un solo valor. O la otra opción es poder elegir la variable "adecuada" para globalsolve.

No sé si se me entendió.

Un saludo y gracias

Manuel Caballero dijo...

Buenas:

Supongo que el problema que tienes es por ejemplo al resolver la siguiente ecuación:

· x^2 = 2

Donde la solución sería la siguiente:

· x = +√2
· x = -√2

Y lo que tu quieres es poder manejar por separado las soluciones que te ofrece Maxima.

Para ello, deberás desactivar el modo de programa de la siguiente manera:

· programmode:false$

En este momento, Maxima devolverá, dependiendo de que funciones uses, soluciones que se le asignarán a variables intermedias.

Siguiendo con el ejemplo anterior y ya desactivada el modo de programa, obtendremos en Maxima:

· solve(x^2-2);
solve: solution:
(%t11) x=-sqrt(2)
(%t12) x=sqrt(2)
(%o12) [%t11,%t12]

Donde nos anuncia que en las variables %t11 y %t12 están recogidas las soluciones de la ecuación dada.

Un saludo y gracias por tu comentario.

Anónimo dijo...

Hola

Efectivamente es eso. Gracias. Sin embargo, hay tres problemas en ese caso.

Si tengo un sistema de dos ecuaciones y obtengo 4 resultados programmode no me separa las soluciones intermedias.

Otro es que, si tengo una secuencia de operaciones y quiero reevaluar todas las operaciones, las referencias (%t11 y %t12) cambian por lo que tendría que volver a referenciarlas.

Y tercero, si bien puedo seleccionar %t12, ¿cómo selecciono sólo el número?. Es decir, al hacer "%t12;" en máxima me selecciona el resultado y no unicamente el número.

globalsolve es lo más parecido a lo que quiero, pero aún así no sé si se puede que me tome valores sólo un rango de valores o que me asigne nuevos valores globales a las variables.

Muchas gracias por tu respuesta

Manuel Caballero dijo...

Buenas:

Lo que yo entiendo que necesitas es que al obtener una solución de una ecuación, poder manejar dichas soluciones dadas por la función solve de forma independiente.

El método globalsolve es cierto que es el más parecido a tus necesidades hasta que, como bien dices, te encuentras con una ecuación cuadrática que posee dos soluciones (positiva y negativa).

Es por ello que el método de programmode te he recomendado que lo desactives ya que así, Maxima te ofrece soluciones independientes para cada caso.

Por ejemplo, resolver el siguiente sistema:

· programmode: false$
· solve ([x + 3*y = 2, 2*x - y = 5], [x, y])
Solution:
(%t56) x=17/7
(%t57) y=-1/7
(%o57) [[%t56,%t57]]

Ahora bien, ¿cómo emplear simplemente el resultado y no la variable? Pues redefiniendo las variables del siguiente modo:

· [x,y]: [rhs(%t56), rhs(%t57)];
[17/7,-1/7]

· x;
17/7

· y;
-1/7

En estos momentos tenemos el resultado de las variables contenidos en las variables x e y respectivamente. De esta manera las referencias no cambian ya que las guardamos el contenido de las mismas en las variables que queramos.

Un saludo.

Anónimo dijo...

programmode no me funciona con el sistema de ecuaciones que tengo, revisaré por qué; pero como indiqué en el mensaje anterior no me sirve del todo por si tengo que reevaluar las operaciones, ya que las referencias cambian.

En todo caso, muchísimas gracias por el comando rhs ya que me sirvió para lo que quería. Lo que hice fue lo siguiente:

(dado el resultado del sistema de ecuaciones)
%[2]$
%[1]$
S:rhs(%)$ /*de esta manera defino la variable*/

Al referirme siempre a la última operación, no tengo problema al volver a realizar los cálculos o introducir cálculos intermedios.

Probablemente haya maneras más cómodas de hacerlo, pero esta me vale de momento.

Muchísimas gracias, me ha sido de gran ayuda, ya que a veces lidiar con el manual de maxima es imposible.

Un saludo

Manuel Caballero dijo...

Buenas:

Me alegro que te fuese útil el comando referido. Es cierto que el manual de Maxima es algo peliagudo, seco y escueto hasta límites que juegan con la paciencia de uno.

Aún así, algo es algo y seguramente como bien dices, habrá maneras más simples de hacerlo.

Lo importante es obtener una solución para a posteriori, trabajar en la optimización.

Un saludo y gracias por tu comentario.

Jesus Ortiz dijo...

Leyendo la parte de manejo de Listas de la multitud de manuales de Maxima, se puede acceder a los valores entregados en la lista de soluciones, sin desactivar ningún parámetro.