Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Observatorio-de-Matematica/4b2f51205a00620e3a4bbd0d2f09d2ef to your computer and use it in GitHub Desktop.
Save Observatorio-de-Matematica/4b2f51205a00620e3a4bbd0d2f09d2ef to your computer and use it in GitHub Desktop.
/* [wxMaxima batch file version 1] [ DO NOT EDIT BY HAND! ]*/
/* [ Created with wxMaxima version 22.04.0 ] */
/* [wxMaxima: title start ]
Resolución de ecuaciones
[wxMaxima: title end ] */
/* [wxMaxima: section start ]
Ecuaciones y operaciones con
ecuaciones
[wxMaxima: section end ] */
/* [wxMaxima: comment start ]
Empezamos con decir qué es una ecuación para maxima:
es una igualdad entre expresiones (se usa el símbolo =).
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
eq:x^2-3*x+4=x-5;
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
4*eq+2*x;
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Los comandos lhs y rhs permiten seleccionar el miembro
izquierdo de la eq o el derecho, respectivamente.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
lhs(eq);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
rhs(eq);
/* [wxMaxima: input end ] */
/* [wxMaxima: section start ]
Resolución de ecuaciones
[wxMaxima: section end ] */
/* [wxMaxima: subsect start ]
La orden solve
[wxMaxima: subsect end ] */
/* [wxMaxima: input start ] */
solve([x^2-1=0], [x]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
solve(x^2-1,x);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
solve(ecuación,incógnita) resuelve la ecuación
solve([ecuaciones],[variables]) resuelve el sistema de ecuaciones
multiplicities guarda la multiplicidad
de las soluciones
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
Con el panel, Resolver o en el menú: Ecuaciones->Resolver.
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
Sirve paar resolver ecuaciones de tipo polinómico de grado 2,3,4 y 5
de forma exacta.
Si el grado es mayor o la ecuación no es polinómica,
entonces las soluciones las tendremos que encontrar
de forma aproximada.
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
También con parámetros:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
eq1:x^3-a*x^2-x^2+2*x=0;
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Pero si no explicitamos la incógnita, ocurre los iguiente:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
solve(eq1);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Por tanto, hay que indicar quién es la incógnita:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
solve(eq1,x);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Con una sola incógnita, no es preciso escribirla:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
solve(x^2+x-1=0);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Pero cuando hay varias, sí que hay que especificar:
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
Además, el resltado es muy diferente si cambiamos de incógnita:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
solve(eq1,a);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
O también podemos ahorrarnos escribir cero, cuando la ecuación se iguale a 0:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
solve([x^2-2*x=0], [x]);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
solve([x^2-2*x], [x]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Cuando el grado es muy alto puede ocurrir que las soluciones no sean muy manejables:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
solve(x^5-2*x-1=0);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Entonces, podemos hacer lo siguiente:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
solve(x^5-2*x-1=0),numer;
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
O también
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
float(solve(x^5-2*x-1=0));
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
La orden solve no sólo puede resolver ecuaciones polinómicas, aunque
hay que prestar atención al resultado. Por ejemplo:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
solve(sin(x)*cos(x)=0, x);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Maxima protesta porque hay muchas más soluciones y
nos avisa de ello.
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
Otras veces hay que "ayudar" a Maxima para resolver ecuaciones.
Sobre todo cuando aparecen radicales, logaritmos o exponenciales.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
ec: x+3=sqrt(x+1);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
solve(ec);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
La elevamos al cuadrado:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
solve(ec^2);
/* [wxMaxima: input end ] */
/* [wxMaxima: subsect start ]
Cómo hacer referencia a las soluciones
[wxMaxima: subsect end ] */
/* [wxMaxima: comment start ]
Cuando resolvemos una ecuación con el comando solve, Maxima nos da una
lista de asignaciones de la variable.
Para reutilizar las soluciones haremos así:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
lista:solve(x^2-3*x+1=0,x);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
sol:map(rhs,lista);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Y las soluciones serán:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
a:sol[1];b:sol[2];
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
remvalue(all);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Y así nos quedamos con las soluciones, no con la lista de asignaciones
que obtenemos al aplicar solve.
[wxMaxima: comment end ] */
/* [wxMaxima: section start ]
Otros comandos
[wxMaxima: section end ] */
/* [wxMaxima: subsect start ]
Sistemas de ecuaciones
[wxMaxima: subsect end ] */
/* [wxMaxima: comment start ]
Escribimos dentro de solve la lista de las ecuaciones
que queremos calcular:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
solve([x^2+y^2=1,x+y=5], [x,y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Si hacemos la interpretación geométrica:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
wxdraw2d(color=red,
implicit(x+y=5,x,-2,2,y,-3,7),
color=blue,
implicit(x^2+y^2=1,x,-1,1,y,-1,1),
user_preamble="set size ratio 2");
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
O, por ejemplo, si el sistema es incompatible:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
solve([x+y=1,x+y=0],[x,y]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
También puede ocurrir que la solución del sistema
dependa de un parámetro, porque sea compatible indeterminado
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
solve([x+y+z=3,x-y=z],[x,y,z]);
/* [wxMaxima: input end ] */
/* [wxMaxima: subsect start ]
La orden to_poly_solve, allroots y
realroots, bfallroots.
[wxMaxima: subsect end ] */
/* [wxMaxima: comment start ]
Para resolver ecuaciones con radicales:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
to_poly_solve(3*x=sqrt(x+1), x);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
o con trigonométricas:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
to_poly_solve([x*cos(x)=0], [x]);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Las soluciones las da como un conjunto.
[wxMaxima: comment end ] */
/* [wxMaxima: comment start ]
Otros comandos de resolución aproximada son: allroots, realroots, bfallroots.
En el menú: Ecuaciones--> Raices de un polinomio; Raices reales de un polinomio,
Raices reales grandes de un polinomio.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
solve(x^6+x+1);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Solve no funciona al ser el grado 6.
El comando allroots nos da todas las raíces del polinomio:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
allroots(x^6+x+1);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
allroots(x^7-5+x^3+2*x-5);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Si sólo queremos las raíces reales:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
realroots(x^7-5+x^3+2*x-5);
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
float(%);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Y si queremos aumentar la precisión de dichas raíces:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
fpprec : 30;
/* [wxMaxima: input end ] */
/* [wxMaxima: input start ] */
bfallroots(x^7-5+x^3+2*x-5);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Si sólo queremos las raíces reales pero con más precisión:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
bfloat(realroots(x^7-5+x^3+2*x-5));
/* [wxMaxima: input end ] */
/* [wxMaxima: subsect start ]
El comando find_root
[wxMaxima: subsect end ] */
/* [wxMaxima: comment start ]
El comando find_root es una aplicación del teorema de los
ceros de Bolzano.
Por ejemplo, vamos a calcular
una solución de sqrt(x)+log(x)=0
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
f(x):=sqrt(x)+log(x);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
En primer lugar, dibujamos la gráfica:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
wxplot2d([f(x)], [x,0,2],[y,-2,6])$
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Parece que hay un cero entre 0 y 1.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
find_root(f(x), x, 0, 1);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
¿Qué ha ocurrido? Maxima no puede evaluar f en el cero y por esa razón
el comando no actúa.
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
find_root(f(x), x, 0.2,1);
/* [wxMaxima: input end ] */
/* [wxMaxima: comment start ]
Si el intervalo en el que aplicamos find_root no verifica las condiciones
del teorema de Bolzano, Maxima nos avisa:
[wxMaxima: comment end ] */
/* [wxMaxima: input start ] */
find_root(f(x),x,1,2);
/* [wxMaxima: input end ] */
/* Old versions of Maxima abort on loading files that end in a comment. */
"Created with wxMaxima 22.04.0"$
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment