Created
January 17, 2024 22:11
-
-
Save Observatorio-de-Matematica/4b2f51205a00620e3a4bbd0d2f09d2ef to your computer and use it in GitHub Desktop.
Extracted and adapted from http://www.ugr.es/~pmrivas/calculo-grado-en-informatic/resolucion-ecuaciones-guion.wxmx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* [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