Sistema de axuda de Yamwi en liña

Introdución

Esta páxina web permite facer todo tipo de cálculos matemáticos e gráficos en liña.

Para facer un cálculo calquera tan só é necesario escribir no cadro o código correspondente e a continuación premer no botón que está debaixo.

Os exemplos que se inclúen nesta páxina pódense copiar e pegar (CTRL-C e CTRL-V) na área de edición antes de premer no botón. O usuario pode facer os cambios que queira nesta área.

A axuda desta páxina é moi precaria e básica. Para afondar máis:

A información que imos obter ten aspecto de conversación. As nosas peticións levan sempre a etiqueta %i seguida dun número (i de input) e os resultados levan a etiqueta %o seguida do correspondente número de orde (o de output).


Contido


Operacións numéricas

Maxima sempre evita traballar con cantidades aproximadas. Co seguinte código operamos con fraccións. Cada instrucción debe rematar cun punto e coma (;).

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

Se queremos a aproximación decimal dun resultado podemos proceder como segue: primeiro gardamos (cos dous puntos :) nunha variable (neste caso x) o valor da expresión exacta e despois executamos a función float para que a transforme en decimal.

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

O mesmo resultado se pode acadar cunha soa instrucción.

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

Outro exemplo onde se ve o uso de variables. O que se escribe entre os símbolos /* e */ son comentarios para os humanos, sendo ignorados pola máquina, polo que este exemplo é autoexplicativo.

/* Gardamos un valor na variable 'a' */
a : 8 / 24;

/* Gardamos outro valor na variable 'b' */
b: 1/5 ;

/* O cadrado da suma de 'a' e 'b' */
(a + b)^2;

A función float devolve un número limitado de decimais. Vexamos como pedir o número π con cinco mil decimais. Para iso debemos indicarlle á variable global fpprec a precisión desexada e despois facer unha chamada á función bfloat. Convén lembrar que π se representa en Maxima por %pi. Tamén calculamos a raíz cadrada de 2 con 5000 cifras decimais.

fpprec : 5000;
bfloat(%pi);

/* Tamen queremos a raiz cuadrada de dous */
bfloat( sqrt(2) );

Álxebra

Da mesma maneira que podemos operar con números podemos facelo con variables. Fíxate como se reducen as expresións alxébricas.

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

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

Expandimos produtos.

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) ;

Se queremos calcular o valor numérico dunha expresión alxébrica, faremos uso da función subst tal como se indica a continuación, onde gardamos na variable f a fórmula para a forza de atracción gravitatoria e a calculamos para diferentes masa e distancias. O uso dos corchetes ([ e ]) en Maxima é moi común, xa que con eles podemos construir listas e calesqueira outras estruturas 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 obter información sobre algunha das funcións ou variables globais de Maxima cómpre facer uso de describe.

describe(subst);

Ecuacións

En xeral, a función a utilizar é solve. Necesitará dous argumentos: o primeiro será unha lista de ecuacións separadas por comas, e o segundo a lista de incógnitas.

Unha sinxela ecuación de primeiro grao.

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

A mesma ecuación pero cunha constante.

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

Unha ecuación polinómica de segundo grao. Recorda que a raíz cuadrada se representa en Maxima por sqrt e a unidade imaxinaria por %i.

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

Un sistema de ecuacións. Vemos neste exemplo que podemos facer uso de varias liñas para escribir unha sentencia. Tamén pedimos o resultado en formato decimal.

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

float(sol);

Cálculo infinitesimal

O cálculo de límites faise coa función limit.

Empezamos por uns límites moi sinxelos. O infinito represéntase por inf e o menos infinito por minf.

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

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

Límites pola esquerda e pola dereita.

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

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

Exemplo de cálculo de derivadas de varios ordes.

fun : sin(x) * x^4 ;

diff( fun, x);

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

Unha integral indefinida e outra definida. Nótese que o símbolo %e representa a base dos logaritmos naturais.

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

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

Cálculo matricial

As matrices pódense introducir de varios xeitos. O máis frecuente é facer uso da función matrix declarando as filas. Neste exemplo introdúcense dúas matrices para despois sumalas e restalas.

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

a + b ;
a - b ;

O produto matricial indícase co punto (.), non co asterisco.

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

a . b ;

Outra particularidade é que o cálculo da potencia dunha matriz indícase mediante o doble acento circunflexo.

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

Outras operacións con matrices.

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

/* Matriz inversa */
invert(a) ;

/* Matriz trasposta */
transpose(a) ;

/* Determinante */
determinant(a) ;

Gráficos

A mellor referencia para aprender a facer gráficos con Maxima é o documento A Maxima-Gnuplot interface, que contén multitude de exemplos que se poden copiar e pegar no formulario. O manual de Maxima tamén ten unha sección adicada ós gráficos.

En Yamwi, a función para debuxar gráficos no plano é draw2d. Yamwi non executa a función gráfica plot2d, pero wxdraw2d tamén se acepta.

En primeiro lugar imos representar unha función explícita de cor vermella sobre o plano.

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

Imos engadirlle unha cuadrícula que faga máis doada a interpretación do gráfico. Ademáis, incorporamos á escena unha función paramétrica de trazo vermello algo máis groso.

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) ) ;

Tamén podemos facer gráficos en 3D. Neste caso a función a utilizar é draw3d.

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

Por último, un exemplo de animación.

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

Estatística

As funcións estatísticas están definidas nun ficheiro de nome descriptive, polo que hai que invocalo antes de facer uso delas.

Os gráficos estatísticos definidos no paquete descriptive débense escribir coa pimeira letra en maiúscula: Scatterplot, Histogram, Barsplot, Piechart, Boxplot e Starplot.

Neste exemplo, a partir dunha serie de datos calculamos algúns parámetros estatísticos e xeramos a partir deles 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) $

No caso dunha mostra bivariante, os pares debemos introducilos como unha matriz de dúas columnas. A partir de aí podemos xerar 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 correlacions */
cor(mostra) ;

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

Paquetes de usuario

É posible solicitarlle ó administrador de Yamwi que inclúa novos paquetes de usuario no sistema, de xeito que o código estea sempre accesible para ser utilizado dende cualquera lugar. Aquí hai un exemplo dun paquete de usuario.

O paquete mypackage.mac está instalado no cartafol yamwi/packages. Non esquecer de chamar á función load antes de facer os cálculos.

Este é un exemplo de cálculo que se pode preparar con esta ferramenta. Trátase dunha función chamada trajectory que admite catro argumentos:

  1. Velocidade inicial dun proxectil, en m/s.
  2. Altura dende a que se fai o disparo, en m.
  3. Ángulo de disparo medido dende a horizontal, en graos, dende 0 ata 90.
  4. Astro dende cuxa superficie se fai o lanzamento (T, Terra; L, Lúa; S, Sol; M, Marte; X, Xúpiter).

Neste exemplo, un proxectil é lanzado dende a superficie de Marte a nivel do chan, cunha velocidade de 35 m/s e ángulo de 47 graos.

O resultado que devolve a función trajectory contén a aceleración da gravidade, a ecuación da parábola correspondente, o alcance e a altura máxima, así como un gráfico que simula a traxectoria.

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