miércoles, 21 de diciembre de 2022

Álgebra lineal con GNU Octave: un apoyo para estudiar bien y con motivación

El software matemático GNU Octave —pertenece al software libre, y por tanto, es gratuito— es una valiosa herramienta empleada en el cálculo y en el análisis numérico —ofrece también un nutrido repertorio de utilidades para la elaboración de gráficas— que no es difícil de empezar a utilizar en Bachillerato si restringimos sus prestaciones al currículo propio de dichos estudios, si bien sus posibilidades van mucho más allá, orientándose realmente a los estudios universitarios, incluso a la investigación. Para animaros a que lo utilicéis, en este ejemplo muestro cómo resolver un sistema de ecuaciones lineales compatible determinado empleando la reducción de Gauss. Es claro que no podréis usar esta herramienta de apoyo en los exámenes de acceso a la universidad y en los exámenes ordinarios (por lo menos, de momento), pero os ayudará enormemente cuando estudiéis la asignatura en vuestra casas, permitiéndoos investigar en los conceptos y procedimientos, así como contrastar, comprobar o, simplemente, saltaros los procedimientos rutinarios (ya aprendidos) para resolver problemas más interesantes.

Consideremos el siguiente sistema de ecuaciones lineales con tres incóngitas $$\left.\begin{matrix}x&+&y&+&z&=&1 \\ x&-&2y&+&3z&=&2 \\ x&+&3y&-&z&=&3\end{matrix}\right\}$$ que en forma matricial puede escribirse de la forma $$\begin{pmatrix} 1 & 1 & 1 \\ 1 & -2 & 3 \\ 1 & 3 & -1 \end{pmatrix}\,\begin{pmatrix} x \\ y \\ z\end{pmatrix}=\begin{pmatrix} 1 \\ 2 \\ 3\end{pmatrix}$$ La matriz (ampliada) de los coeficientes del sistema es $$A=\left(\begin{array}{ccc|c} 1&1&1&1 \\ 1&-2&3&2 \\ 1&3&-1&3 \end{array}\right) $$

Mediante el uso de la herramienta GNU Octave [3] voy a resolver el sistema escalonando por Gauss la matriz ampliada, con pivotamiento por columnas, obteniendo así una matriz equivalente (en cuanto a la solución del sistema) de tipo triangular superior $U$ tal que $U^{\top}U=A$. Con Octave es tan cómodo como hacer los siguiente:

  
  >> A=([1,1,1;1,-2,3;1,3,-1])
  A =

   1   1   1   
   1  -2   3  
   1   3  -1   
  
  % Obtengo el rango de la matriz de los coeficientes
  >> rank(A)
  ans=3
 
 
 >> A_e=([1,1,1,1;1,-2,3,2;1,3,-1,3])
  A_e =

   1   1   1   8	   
   1  -2   3  -3
   1   3  -1  -4
 
 % Obtengo el rango de la matriz ampliada 
 % con los términos independientes
 >> rank(A_e)
 ans=3
 
 % Analizo el sistema según el tipo de solución
 % (teorema de Rouché-Fröbenius):
 % Como el rango de A y de A_e coinciden,
 % el sistema es compatible,
 % y siendo dicho rango igual a 3,
 % al coincidir con el número de incógnitas,
 % el sistema es compatible determinado
 
 
 % Obtengo la matriz reducida inferior y superiormente, 
 % y, también, normalizo los elementos de la diagonal
 % principal (matriz reducida de Gauss):
 >> U=rref(A_e)
  U =

   1   0   0   8
   0   1   0  -3
   0   0   1  -4 
   
 % Obsérvese que a la vista de la matriz ampliada reducida
 % es evidente cuáles son los rangos 
 % (contabilizando el número de filas no identicamente nulas)
 % que ya se habían calculado 
 % expresamente con anterioridad (con la instrucción rank(.))
 % paso éste que es, por tanto, prescindible
   
   
  
esto es, se obtiene la matriz reducida $$\left(\begin{array}{ccc|c} 1&0&0&8 \\ 0&1&0&-3 \\ 0&0&1&-4 \end{array}\right) $$ Así, un sistema equivalente en solución al sistema original es $$\left.\begin{matrix}x&&&&&=&8 \\ &&y&&&=&-3 \\ &&&&z&=&-4\end{matrix}\right\}$$ que nos da directamente la solución.

% Compruebo ahora la solución encontrada, 
% sustituyendo en las ecuaciones del sistema original
% los valores de las incóngitas que acabamos de calcular

% Fijo los valores encontrados 
% a las variables (del programa) x, y, z
% que defino al paso:

  >> x = 8
  ans  = 8
  >> y = -3
  ans = -3
  >> z = -4
  ans = -4

% Sustituyo en la primera ecuación
% En efecto:

% Los sustituyo en la primera ecuación
>> x+y+z
ans = 1
% que, en efecto, es el valor 
% del término independiente de la misma


% Los sustituyo en la segunda ecuación
>> x-2*y +3*z
ans = 2
% que, en efecto, es el valor 
% del término independiente de la misma

% Los sustituyo en la tercera ecuación
>> x+3*y-z
ans = 3
% que, en efecto, es el valor 
% del término independiente de la misma.
% Y con esto, hemos terminado.

$\diamond$

Referencias

  [1] https://octave.org/. Página web de desarrollo y descarga del programa de cálculo GNU Octave.
  [2] John W. Eaton; David Bateman; Søren Hauberg; Rik Wehbring, Free Your Numbers, https://www.gnu.org/software/octave/octave.pdf. Manual actualizado de la herramienta GNU Octave.
  [3] https://octave.org/

jueves, 15 de septiembre de 2022

Calculadoras científicas modernas: la calculador Numworks

En breve expondré material de ayuda para el aprendizaje y uso de la calculadora científica Numworks, que encuentro especialmente útil para el aprendizaje del cálculo numérico, la estadística y el cálculo de probabilidades, a nivel de Bachillerato. Además es gráfica y es programable en lenguaje Python. Podéis probarla y utilizarla en vuestro ordenador con este emulador, y en su canal de vídeo podréis visionar muchos tutoriales para aprender a utilizarla con eficacia.

$\diamond$

martes, 30 de agosto de 2022

Integral definida de la función piso

Nos proponemos calcular la integral $$\displaystyle \int_{0}^{n}\,\left \lfloor x \right \rfloor\,dx$$, siendo $n$ un número entero positivo, y donde $\left \lfloor x \right \rfloor$ denota la función piso (o suelo), que, para todo número real $x$, se define como $\left \lfloor x \right \rfloor = \text{máximo}(\{\ell \le x: \ell \in \mathbb{Z}\}$

Ensayemos esta integral para fijando un valor de $n$, pongamos que $n=4$, para ver lo que ocurre. Al tratarse de una función a trozos, con un número finito —y, por tanto, numerable— de discontinuidades, la función $f(x)=\left \lfloor x \right \rfloor$ es integrable Riemann. Podéis ver en la siguiente figura la gráfica realizada con GeoGebra (tecleando $\text{floor}(x)$ —que corresponde a la sintaxis de la función piso en la mayor parte de los programas y calculadoras— en la línea de entrada), si bien también podemos hacerlo a mano sin muchas dificultades:

Por otra parte, podemos servirnos del cálculo automático que nos ofrece WolframAlpha para saber qué encontraremos. Veámoslo en esta segunda figura, que he obtenido tecleando en la casilla de entradas de WolframAlpha lo siguiente: $$\text{integrate}(\text{floor}(x),x,0,4)$$:
Reproduzcamos ahora este resultado, paso a paso: $\displaystyle \int_{0}^{4}\,\left \lfloor x \right \rfloor\,dx=\int_{0}^{1}\,0\,dx+\int_{1}^{2}\,1\,dx+\int_{2}^{3}\,2\,dx+\int_{3}^{4}\,4\,dx$
  $\displaystyle=0+\left[x\right]_{1}^{2}+\left[x\right]_{2}^{3}+\left[x\right]_{3}^{4}$
    $\displaystyle=0+(2-1)+(3-2)+(4-3)$
      $=0+1+2+3$
       $=6$

Observemos que los términos entre paréntesis de la penúltima línea de arriba están en progresión aritmética, cuya diferencia es $d=1$, el primer término tiene valor $0$ y el cuarto $6$, y, por tanto, bien podemos escribir que $\displaystyle \int_{0}^{4}\,\left \lfloor x \right \rfloor\,dx= \dfrac{(0+ 3)\cdot 4}{2}=6$ lo cual nos hace pensar en inducir una fórmula general para la integral $\displaystyle \int_{0}^{n}\,\left \lfloor x \right \rfloor)\,dx$, con $n$ un número entero positivo, pues, visto cómo se ha desarrollado el cálculo de la integral definida pedida entre $0$ y $4$, fácilmente inducimos el siguiente resultado para esta otra, más general, cuyo resultado consta de $n$ términos de una progresión aritmética, con primer término, también, igual a $0$, diferencia igual a $1$, y último término igual a $0+1\cdot(n-1)=n-1$: $$\displaystyle \int_{0}^{n}\,\left \lfloor x \right \rfloor\,dx=(0+1+2+3+\overset{\underbrace{n}}{\ldots}+n-1=\dfrac{(0+(n-1))\,n}{2}=\dfrac{n^2-n}{2}$$ Notemos que, si $n=4$, obtenemos el resultado ya sabido: $\dfrac{n^2-n}{2}=\dfrac{4^2-4}{2}=\dfrac{12}{2}=6$, como debe ser.

También podemos llegar directamente a este resultado general haciendo un poco de álgebra con sumatorios: $$\displaystyle \int_{0}^{n}\,\left \lfloor x \right \rfloor\,dx\overset{(1)}{=}\sum_{k=0}^{n-1}\,\int_{k}^{k+1}\,k\,dx=\sum_{k=0}^{n-1}k\,\int_{k}^{k+1}\,dx=\sum_{k=0}^{n-1}k\,\left[x\right]_{k}^{k+1}=\sum_{k=0}^{n-1}k\,(k+1-k)\overset{(2)}{=}\sum_{k=0}^{n-1}k=\dfrac{(0+(n-1))\cdot n}{2}$$ y simplificando, $$\displaystyle \int_{0}^{n}\,\left \lfloor x \right \rfloor\,dx=\dfrac{n^2-n}{2}$$ Aclaraciones:
  (1): Entre $k=0$ y $k=n-1$ tenemos los $n$ sumandos del desarrollo
  (2): Recordemos que el término $n$-ésimo de una sucesión aritmética de diferencia $d$ y primer término $a_1$ es $a_n=a_1+d\,(n-1)$, y que la suma de los $n$ (sucesivos) primeros términos de dicha sucesión es $\dfrac{(a_1+a_n)\,n}{2}$. De ahí que la suma de los $n$ sucesivos primeros términos de una sucesión aritmética de primer término igual a $0$, diferencia igual a $1$, y último término igual a $n-1$ es $\dfrac{(0+(n-1))\cdot n}{2}$

Comentario: No siempre podremos evitar los desarrollos si empleamos herramientas de cálculo automático. Démonos cuenta de que al pedir a WolframAlpha que nos de directamente el resultado que acabamos de obtener, tecleando $$\text{integrate}(\text{floor}(x),x,0,n)$$ no obtenemos nada en claro:

$\diamond$