Cuando quieres aprender a programar es una cuestión de tiempo y dedicación. Uno de los pilares fundamentales es la lógica computacional, en este artículo no hablaré de esta parte. Otro pilar sería aplicar las matemáticas en la programación y en este artículo veremos un ejemplo de cómo utilizar esta ciencia a la hora de programar.
Estamos acostumbrados a utilizar operaciones matemáticas en muchas ocasiones a lo largo de un día, operaciones básicas como la suma, resta, división y multiplicación. Cuando estamos programando esto es básico, suma el importe al total de la compra, resta el descuento que debemos aplicar, divide entre doce para calcular la cuota mensual o aplicar el IVA correspondiente a tu compra. Pero hay otras operaciones matemáticas, algo más complejas, que en un momento podríamos utilizar y hablo desde mi experiencia, ya que yo en mi trabajo diario las suelo utilizar. Hoy os voy a hablar de las derivadas.
Si has estudiado bachiller habrás hecho cientos de derivadas, pero seguramente no habrás asimilado el concepto simplemente porque no has encontrado una aplicación práctica. Las derivadas se aplican en multitud de campos y te voy a demostrar como podemos utilizarla para que en un futuro tu seas capaz de extrapolar este conocimiento a cualquier otro campo. Antes de nada demos la definición matemática, esa definición que todos hemos oído alguna vez y que seguramente hayas memorizado para plasmarla en algún examen.
La derivada de una función f(x) en un punto a se define como la pendiente de la recta tangente a la función en dicho punto.
La verdad es que suena un poco mal, cuando escuchamos esta definición no te imaginas donde puedes aplicar las derivadas. Hoy vamos a ver un pequeño ejemplo donde utilizo este concepto, más concreto el gradiente de una función, relacionado con las derivadas direccionales. El gradiente nos indica la dirección en la cual una función varía más rápidamente.
Después de esta pequeña introducción matemática voy a plantear el problema. Tenemos un robot hecho con Arduino el cual tiene un sensor de luminosidad y queremos encontrar dentro de un cuadrado de 70 cm x 70 cm donde está una bombilla, la luminosidad máxima. Para ello vamos a definir un precisión y un punto de partida. La precisión es de 10 cm y el punto de partida será el centro del cuadrado. Tenemos el eje X (eje horizontal) y el eje Y (eje vertical). En la siguiente imagen puedes ver el esquema.
Cuando hablo de precisión 10 cm quiere decir que vamos a ir dando saltos de 10 en 10 cm. ¿Donde debemos hacer el siguiente movimiento? Para ello utilizamos el gradiente, recordar que nos va a decir la dirección donde una función varia más rápidamente. En nuestro caso estamos buscando maximizar la luminosidad así que, tenemos que dirigirnos al punto más lumínico en el entorno de 10 cm. Para ello tenemos la siguiente función F(x,y) = |L|, donde L es la luminosidad que nos facilitará el sensor de Arduino. Esto nos indica que la luminosidad será función de las coordenadas X e Y. Solo tenemos que calcular el gradiente de F y nos indicará hacia donde nos tendremos que mover. A continuación os pongo el pseudocódigo o el algoritmo que deberíamos aplicar y posteriormente lo desarrollaremos con datos imaginarios.
- Colocar robot en el centro X = 40, Y = 40.
- Repetir hasta que gradiente (∇) en X y en Y sean 0.
- Leer luminosidad posición actual L0.
- Mover robot a la posición X + 10 y obtener luminosidad Lx1.
- Mover robot a la posición X – 10 y obtener luminosidad Lx2.
- Mover robot a la posición Y + 10 y obtener luminosidad Ly1.
- Mover robot a la posición Y – 10 y obtener luminosidad Ly2.
- Obtenemos el gradiente en X y en Y. ∇X = (Lx1 – Lx2) / 2, ∇Y = (Ly1 – Ly2) / 2. Esto nos da la dirección en que nos debemos mover.
- Mover el robot con la precisión dada (10 cm) en la dirección del gradiente.
El algoritmo anterior es una implementación bastante sencilla de como podría trabajar nuestro robot. Tendríamos que tener en cuenta más cosas para dejar un algoritmo totalmente funcional, en eso consiste la programación, pero como simple ejemplo nos vale para una primera aproximación. En el siguiente esquema podemos ver la primera iteración del algoritmo.
Aplicando los datos que obtenemos del esquema anterior tendríamos los siguientes resultados.
- Robot colocado posición (40, 40)
- Gradientes diferente de cero
- L0 = 10
- Lx1 = 11
- Lx2 = 11
- Ly1 = 12
- Ly2 = 9
- ∇X = (11 – 11) / 2 = 0; ∇Y = (12 – 9) / 2 = 3/2
- Mover en dirección (0, 3/2)
Como habéis comprobado la dirección a mover sería en sentido a la bombilla, dirección vertical. Este es un ejemplo de como podemos utilizar las matemáticas en la programación. Solo es el principio, si decides embarcarte en este mundo tan fascinante, descubrirás cosas que nunca te hubieras imaginado que se podían hacer, y aplicarás muchos conocimientos de años de estudio que has estado adquiriendo durante toda tu vida. Realmente no partimos de cero cuando queremos aprender a programar, tenemos una base sólida de conocimientos que hemos ido asimilando a lo largo de muchos años. Te animo a que busques un ejemplo donde puedas aplicar estos conocimientos y si lo encuentras, envíanoslo a través del formulario de contacto, estaremos encantados de discutirlo contigo.