Sistema de ayuda de Yamwi en línea

Introducción

Esta página web permite hacer todo tipo de cálculos matemáticos y gráficos en línea.

Para hacer un cálculo cualquiera tan solo es necesario escribir en el cuadro el código correspondiente y a continuación pulsar en el botón que está debajo.

Los ejemplos que se incluyen en esta página se pueden copiar y pegar (CTRL-C y CTRL-V) en el área de edición antes de pulsar en el botón. El usuario puede hacer los cambios que quiera en esta área.

La ayuda de esta página es muy precaria y básica. Para profundizar más:

La información que vamos a obtener tiene aspecto de conversación. Nuestras peticiones llevan siempre la etiqueta %i seguida de un número (i de input) y los resultados llevan la etiqueta %o seguida del correspondiente número de orden (o de output).


Contenido


Operaciones numéricas

Maxima siempre evita trabajar con cantidades aproximadas. Con el siguiente código operamos con fracciones. Cada instrucción debe terminar con un punto y coma (;).

1 + 5 * (5 - 7/9)^4 ;

Si queremos la aproximación decimal de un resultado podemos proceder como sigue: primero guardamos (con dos puntos :) en una variable (en este caso x) el valor de la expresión exacta y después ejecutamos la función float para que la transforme a decimal.

x : 1 + 5 * (5 - 7/9)^4 ;
float(x);

El mismo resultado se puede conseguir con una sola instrucción.

float (1 + 5 * (5 - 7/9)^4) ;

Otro ejemplo en el que se ve el uso de variables. Lo que se escribe entre los símbolos /* y */ son comentarios para los humanos, siendo ignorados por la máquina, de manera que este ejemplo es autoexplicativo.

/* Guardamos un valor en la variable 'a' */
a : 8 / 24;

/* Guardamos otro valor en la variable 'b' */
b: 1/5 ;

/* El cuadrado de la suma de 'a' e 'b' */
(a + b)^2;

La función float devuelve un número limitado de decimales. Veamos cómo pedir el número π con cinco mil decimales. Para eso debemos indicarle a la variable global fpprec la precisión deseada y después hacer una llamada a la función bfloat. Conviene recordar que π se representa en Maxima por %pi. También calculamos la raíz cuadrada de 2 con 5000 cifras decimales.

fpprec : 5000;
bfloat(%pi);

/* Tambien queremos la raiz cuadrada de dos */
bfloat( sqrt(2) );

Álgebra

De la misma forma que podemos operar con números, lo podemos hacer con variables. Fíjate cómo se reducen las expresiones algebraicas.

1 + x + 5 * y - 2/3 * x + y + 2 ;

(5*x^2 * u * r) / (u^2 * t) ;

Expandimos productos.

expand( (x+1)^2 * (x+5) * (x-a) ) ;

Factorizamos polinomios.

factor(u^6 - 14*u^5 - 23*u^4 + 808*u^3 - 320*u^2 - 12800*u) ;

Si queremos calcular el valor numérico de una expresión algebraica, haremos uso de la función subst tal como se indica a continuación, donde guardamos en la variable f la fórmula para la fuerza de atracción gravitatoria y la calculamos para diferentes masa y distancias. El uso de los corchetes ([ y ]) en Maxima es muy común, ya que con ellos podemos construir listas y cualesquiera otras estructuras de datos.

f : 6.67 * 10^-11 * m1 * m2 / r^2 ;

subst([m1 = 4, m2 = 5, r = 7], f) ;
subst([m1 = mass, m2 = mass], f) ;

Para obtener información sobre alguna función o variable global de Maxima debe hacerse uso de describe.

describe(subst);

Ecuaciones

En general, la función a utilizar es solve. Necesitamos dos argumentos: el primero será una lista de ecuaciones separadas por comas y el segundo otra lista con las incógnitas.

Una sencilla ecuación de primer grado.

solve([5 * (x + 1/2) = 1 + x /3], [x]) ;

La misma ecuación pero con una constante.

solve([5 * (x + 1/2) = k + x /3], [x]) ;

Una ecuación polinómica de segundo grado. Recuerda que la raíz cuadrada se representa en Maxima por sqrt y la unidad imaginaria por %i.

solve([2*x^2 - 3*x + 5 = 0], [x]) ;

Un sistema de ecuaciones. Vemos en este ejemplo que podemos hacer uso de varias líneas para escribir una sentencia. También pedimos el resultado en formato decimal.

sol : solve([5*x + y/8 = 4, x^2 = y],
            [x,y]) ;

float(sol);

Cálculo infinitesimal

El cálculo de límites se realiza con la función limit.

Empezamos por unos límites muy sencillos. El infinito se representa por inf y el menos infinito por minf.

limit( (x-1) / (2*x + 3), x, 1);

limit( (x-1) / (2*x + 3), x, inf);

Límites por la izquierda y por la derecha.

limit( 1 / (x-1), x, 1, minus);

limit( 1 / (x-1), x, 1, plus);

Ejemplo de cálculo de derivadas de varios órdenes.

fun : sin(x) * x^4 ;

diff( fun, x);

/* tercera derivada */
diff( fun, x, 3);

Una integral indefinida y otra definida. Nótese que el símbolo %e representa la base de los logaritmos naturales.

integrate(sin (2 + 3 * x), x) ;

integrate( x * exp(x), x, 1, 2) ;

Cálculo matricial

Las matrices se pueden introducir de varias maneras. El más frecuente es hacer uso de la función matrix declarando las filas. En este ejemplo se introducen dos matrices para después sumarlas y restarlas.

a : matrix([1, 2, 3], [4, 5, 6]) ;
b : matrix([7, 1/9, 2], [z, x+y, -5]) ;

a + b ;
a - b ;

El producto matricial se indica con el punto (.), no con el asterisco.

a : matrix([1, 2, 3], [4, 5, 6]) ;
b : matrix([7, 1/9], [z, -5], [1, 0]) ;

a . b ;

Otra particularidad es que el cálculo de la potencia de una matriz se indica mediante el doble acento circunflejo.

a : matrix([1, 2, 3], [4, 5, 6], [7, 8, 9]) ;
a^^3 ;

Otras operaciones con matrices.

a : matrix([1, 4, 3], [7, 5, 6], [3, 8, 9]) ;

/* Matriz inversa */
invert(a) ;

/* Matriz transpuesta */
transpose(a) ;

/* Determinante */
determinant(a) ;

Gráficos

La mejor referencia para aprender a hacer gráficos con Maxima es el documento A Maxima-Gnuplot interface, que contiene multitud de ejemplos que se pueden copiar y pegar en el formulario. El manual de Maxima también tiene una sección dedicada a los gráficos.

En Yamwi, la función para dibujar gráficos en el plano es draw2d. Yamwi no ejecuta la función gráfica plot2d, pero wxdraw2d también se acepta.

En primer lugar vamos a representar una función explícita de color rojo sobre el plano.

draw2d (
  color = red,
  explicit(x^3-2*x^2+x-1, x, -3, 3) ) ;

Vamos a añadirle una cuadrícula que facilite la interpretación del gráfico. Además, incorporamos a la escena una función paramétrica de trazo rojo algo más grueso.

draw2d (
  explicit(x^3-2*x^2+x-1, x, -3, 3),
  grid = true,
  color = red,
  line_width = 4,
  parametric(sin(t), t^2, t, -2*%pi, 2*%pi) ) ;

También podemos hacer gráficos en 3D. En este caso la función a utilizar es draw3d.

draw3d(
  surface_hide = true,
  explicit(20*exp(-x^2-y^2)-10,x,-3,3,y,-3,3));

Por último, un ejemplo de animación.

draw(terminal   = animated_gif,
     delay      = 40,
     dimensions = [300,300],
     makelist(gr2d(explicit(x^(k/10),x,0,1)), k, 1, 10) ) $

Estadística

Las funciones estadísticas están definidas en un fichero de nombre descriptive, por lo que hay que cargarlo antes de hacer uso de ellas.

Los gráficos estadísticos definidos en el paquete descriptive se deben escribir con la pimera letra en mayúscula: Scatterplot, Histogram, Barsplot, Piechart, Boxplot y Starplot.

En este ejemplo, a partir de una serie de datos calculamos algunos parámetros estadísticos y generamos a partir de ellos un diagrama de sectores.

load(descriptive) $
mostra :
  [4, 7, 6, 1, 5, 10, 3, 6, 6, 6, 9, 9, 5, 2,
   2, 7, 7, 4, 6, 7, 8, 4, 10, 10, 4] $

/* media */
mean(mostra) ;

/* mediana */
median(mostra) ;

/* desviacion tipica */
std(mostra) ;

/* diagrama de sectores */
Piechart(mostra) $

En caso de muestra bivariante, los pares debemos introducirlos como una matriz de dos columnas. A partir de ahí podemos generar varios resultados.

load(descriptive) $
mostra:
  matrix(
    [125.1,140.7], [130.6,155.1], [135.1,160.3],
    [140.0,167.2], [145.4,169.8], [142.7,168.5])$

/* vector de medias */
mean(mostra) ;

/* matriz de covarianzas */
cov(mostra) ;

/* matriz de correlaciones */
cor(mostra) ;

/* grafico de dispersion */
draw2d(
   point_type = circle,
   point_size = 3,
   color = navy,
   points(mostra)) $

Paquetes de usuario

Es posible solicitarle al administrador de Yamwi que incluya nuevos paquetes de usuario en el sistema, de manera que el código esté siempre accesible para ser utilizado desde cualquier lugar. Aquí hay un ejemplo de un paquete de usuario.

El paquete mypackage.mac está instalado en la carpeta yamwi/packages. No olvidarse de llamar a la función load antes de realizar los cálculos.

Este es un ejemplo de cálculo que se puede preparar con esta herramienta. Se trata de una función llamada trajectory que admite cuatro argumentos:

  1. Velocidad inicial del proyectil, en m/s.
  2. Altura desde la que se hace el disparo, en m.
  3. Ángulo de disparo medido desde la horizontal, en grados, desde 0 hasta 90.
  4. Astro desde cuya superficie se hace el lanzamiento (T, Tierra; L, Luna; S, Sol; M, Marte; X, Júpiter).

En este ejemplo, un proyectil es lanzado desde la superficie de Marte a nivel del suelo, con una velocidad de 35 m/s y ángulo de 47 grados.

El resultado que devuelve la función trajectory contiene la aceleración de la gravedad, la ecuación de la parábola correspondiente, el alcance y la altura máxima, así como un gráfico que simula la trayectoria.

load("mypackage") $
trajectory(35, 0, 47, M) ;