Programación en Matlab

Clases sobre Matlab

El programa Matlab es un software de cálculo computacional y simulación. Es un programa muy interesante y potente, formado por numerosos módulos cuyo manejo no siempre es inmediato. Está considerado unos de los principales programas de desarrollo de cálculo para ingenieros, junto con Mathematica y Octave. De los tres, Matlab podría considerarse lider en muchos aspectos. Es un programa ampliamente usado en la Universidad y en Investigación.

Si necesitas clases de Matlab en general, ya sea a nivel inicial, intermedio o avanzado, podemos ayudarte.

¿Qué es el programa o el entorno Matlab?

MATLAB es un programa comercial desarrollado por Mathworks. Tiene por nombre la abreviatura de MATrix LABoratory, «laboratorio de matrices». Consiste en un sistema algebraico computacional que ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de programación propio. El lenguaje de programación de Matlab tiene sus propias especificidades, si bien está basado en el lenguaje M, el mismo que usa la extensión para excel Microsoft Power Query. El Matlab está disponible como programa de escritorio para las plataformas Unix, Windows, Mac OS X y GNU/Linux y además existe el Matlab online, a través del navegador web.

Es un software muy usado en universidades y centros de investigación y desarrollo. En los últimos años ha aumentado el número de prestaciones, como la de programar directamente procesadores digitales de señal (DSP) o crear código en el lenguaje VHDL (lenguaje de especificación definido por el IEEE utilizado para describir circuitos digitales y para la automatización de diseño electrónico).

El Matlab está formado por el Matlab base y una serie de Cajas de herramientas o extensiones conocidas como Toolboxes, que forman un amplio conjunto de librerías, las cuales se adquieren a parte (y cuestan cada una de ellas tanto como el propio Matlab). Existe una enorme diversidad de Toolboxes que se clasifican en familias:

  • Cálculo paralelo: Parallel Computing Toolbox, MATLAB Distributed Computing Server.
  • Matemáticas, Estadística y Optimización: Statistics and Machine Learning Toolbox, Deep Learning Toolbox, Curve Fitting Toolbox, Optimization Toolbox, Global Optimization Toolbox, Symbolic Math Toolbox, Mapping Toolbox, PDE Toolbox
  • Data Science y Deep Learning: Statistics and Machine Learning Toolbox, Deep Learning Toolbox, Text Analytics Toolbox, Predictive Maintenance Toolbox.
  • Generación de código: MATLAB Coder, Embedded Coder, HDL Coder, HDL Verifier, Filter Design HDL Coder, Fixed-Point Designer, GPU Coder.
  • Desarrollo de aplicaciones: MATLAB Compiler, MATLAB Compiler SDK, MATLAB Production Server.
  • Acceso Base de Datos e Informes: Database Toolbox, MATLAB Report Generator.

Es posible usar Matlab sin las toolboxes y programar manualmente algunas de las funcionalidades especiales que podamos necesitar.

El paquete MATLAB dispone de dos herramientas adicionales que incrementan sus posibilidades, que son Simulink (plataforma de simulación multidominio) y GUIDE (editor de interfaces de usuario – GUI). Como ocurre con el Matlab, para el Simulink existe posibilidad de expansión con los paquetes de bloques (blocksets).

 

¿Quién lo necesita? ¿Para qué proyectos puede usarse?

El Matlab lo necesitan los estudiantes para realizar las tareas que les piden sus universidades, así como cualquier profesional o empresa que necesite realizar cálculos matemáticos numéricos o algebraicos de forma intensiva, con la posibilidad de acceder a una extensa librerías para operaciones especiales como puede ser análisis de mapas, modelos predictivos, adquisición de datos financieros, etc. También puede ser usado por profesionales o empresas que necesiten desarrollar programas comerciales que usen las funcionalidades del Matlab.

Además, es posible programar gran diversidad de áreas funcionales para los posibles programas desarrollados en Matlab, entre otras:

  • Análisis bursátil
  • Análisis financiero
  • Análisis estadístico
  • Reconocimiento de imagen
  • Análisis y filtrado de sonido
  • Sistemas de información geográfica
  • Encriptación
  • Gestión de bases de datos
  • etc etc

¿Cómo plantear un proyecto de desarrollo?

Considerando al menos los siguientes puntos:

  • Objetivos buscados
  • Medios técnicos y humanos disponibles.
  • Metodología de desarrollo:
    • Modelo en cascada: Framework lineal. Es el método tradicional. Consiste en desarrollar un proyecto de forma secuencial, por etapas, por eso lo de cascada, comenzando con las fases de análisis y diseño y terminando con las de testeo y puesta en producción.
    • Prototipado: Framework iterativo.
    • Incremental: Combinación de framework lineal e iterativo.
    • Espiral: Combinación de framework lineal e iterativo.
    • RAD: Rapid Application Development, framework iterativo. Quizás la más eficaz actualmente. Pro este motivo, para esta metodología existen muchos métodos:
    • Adaptive Software Development (ASD), Agile Unified Process, Crystal Clear, Feature Driven Development (FDD), Lean Software , evelopment (LSD) : Lean startup, Kanban (desarrollo), Open Unified Process (OpenUP), Programación Extrema (XP), Método de desarrollo de sistemas dinámicos (DSDM), Scrum, Scrumban, G300, 6D-BUM, PMI Agile

  • Plazo temporal de desarrollo.
  • Aspectos comerciales
  • Aspectos legales. Divididos básicamente en dos grandes apartados:
    • Nuestras obligaciones: Lo que nos permite hacer los acuerdos de licencia de los compiladores, entornos de desarrollo y librerías.
    • Las obligaciones de nuestros clientes: Primero hay que saber que adquieren nuestros clientes, si son licencias (en principio el software se distribuye mediante licencias limitadas), servicios (es decir usamos los programas como herramientas para dar servicios a nuestros clientes que después les facturamos) o el propio código (querría decir que nos han contratado de programadores). Lo que se permitirá hacer a los compradores de nuestro trabajo condicionará sobremanera el alcance del proyecto.
  • ¿Hay alternativas a Matlab se pueden considerar a la hora de plantear un proyecto?
  • Si, claro, pero no son caminos fáciles. Depende del proyecto a realizar. A continuación hacemos un análisis de alternativas por tipo de proyecto.

Proyectos de cálculo

Si el objetivo es la realización de cálculos matemáticos numéricos y algebraicos avanzados, hay alternativas similares a Matlab, pero son pocas y no exactamente iguales, cada una tiene sus especificidades. La elección final depende del alcance y necesidades de proyecto (presupuesto, formación del equipo de desarrollo, tipología de operaciones a realizar). No es lo mismo un proyecto para realizar cálculos financieros, estadísticos, de cadena de bloques, reconocimiento de imagen, etc. Puede ser muy difícil hacer la elección perfecta si no se ha trabajado antes con estos sistemas. A la hora de plantear un proyecto, no se puede minusvalorar ninguna de ellas, pero tampoco se puede partir de la más absoluta ignorancia, porque la falta de conocimientos base que lleven a malos planteamientos luego saldrá muy cara cuando esté avanzado el proyecto.

Las principales opciones son:

  • Wolfram Mathematica. En un programa comercial, más o menos similar al Matlab.
  • GNU Octave. Es un programa de licencia abierta. GNU Octave es un intérprete del lenguaje M que se distribuye como software libre. Octave y Matlab son similares pero no iguales. Hay muchas funciones avanzadas que tiene el Matlab que no podemos encontrar en Octave. A pesar de todo el proyecto Octave mantiene un alto nivel de compatibilidad con Matlab.
  • StataCorp Stata. Es un paquete de software estadístico creado en 1985. Es utilizado principalmente por instituciones académicas y empresariales dedicadas a la investigación, especialmente en economía, sociología, ciencias políticas, biomedicina, geoquímica y epidemiología, etc. Se puede programar en Stata 6.0
  • IBM SPSS. Es un programa estadístico informático muy usado en las ciencias sociales y aplicadas, además de las empresas de investigación de mercado. Se pueden programar en SPSS las funcionalidades necesarias.
  • MAXIMA. Según indica su propia página web, es un sistema para la manipulación de expresiones simbólicas y numéricas, que incluye diferenciación, integración, series de Taylor, transformadas de Laplace, ecuaciones diferenciales ordinarias, sistemas de ecuaciones lineales, polinomios, conjuntos, listas, vectores, matrices y tensores. Maxima produce resultados numéricos de alta precisión mediante el uso de fracciones exactas, enteros de precisión arbitraria y números de punto flotante de precisión variable. Maxima puede trazar funciones y datos en dos y tres dimensiones. El código fuente de Maxima se puede compilar en muchos sistemas, incluidos Windows, Linux y MacOS X.
  • REDUCE. Según su propia página web, es un sistema para hacer álgebra escalar, vectorial y matricial por computadora, que también admite aproximaciones numéricas de precisión arbitraria e interfaces para gnuplot para proporcionar gráficos. Puede usarse interactivamente para cálculos simples pero también proporciona un lenguaje de programación completo, con una sintaxis similar a otros lenguajes de programación modernos. REDUCE admite interfaces de usuario alternativas, incluyendo Emacs y TeXmacs. REDUCE (y su código fuente completo) está disponible de forma gratuita para los sistemas informáticos más comunes (Windows y Mac OS), en algunos casos en más de una versión para la misma máquina. El manual y otros documentos de soporte y tutoriales también se incluyen en las distribuciones.

A algunos les sonará la opción del Derive, muy usada en la universidad hace años. Actualmente no es una opción elegible:

  • Derive fue un programa de álgebra computacional (CAS) desarrollado como un sucesor de muMATH por Soft Warehouse en Honolulu, Hawaii, EE. UU., actualmente es propiedad de Texas Instruments. El programa estuvo en el mercado desde 1988 hasta 2007. Su última versión fue la 6.1 para Windows. Este programa evolucionó para convertirse en el software de las calculadoras TI-89 y TI-Nspire CAS de Texas Instruments.

Proyectos de desarrollo de software comercial

Si el objetivo es desarrollar programas puede considerarse que hay más opciones. Por ejemplo se puede considerar:

  • Matlab. Por todo lo mencionado antes.
  • Mathematica. El Wolfram System Compiler que permite compilar para ejecutar el código más rápidamente. Mediante la opción Compile se pueden crear ejecutables autónomos con funciones compiladas.
  • Desarrollar el programa en lenguaje R (una reimplementación de software libre del lenguaje S) o en Phyton (lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible). La ventaja de cualquier de las dos opciones consiste en que son los dos lenguajes preferidos por los cientificos de datos.
  • Desarrollar el programa en en entorno de pago Ms. Visual Studio en Visual Basic o en C# y añadirle librerias matemáticas, financieras o estadísticas. La ventaja de este entorno son las facilidades para la depuración y el desarrollo en equipo en la nube.
  • Desarrollar el programa con un entorno de desarrollo gratuito como Eclipse. Su principal ventaja es la economía del proyecto.

En principio no se puede desarrollar completamente un programa comercial con GNU Octave porque no lo permite la licencia de código abierto. Otra cuestión es que se cree un nuevo programa de código abierto con GNU Octave y después se puedan ofrecer servicios de mantenimiento o extras. Todo esto debe analizarse detalladamente contactando con los responsables de Octave antes de hacer nada.

Tampoco se pueden usar los diversos compiladors online existentes para realizar la versión final del programa, dado que sólo pueden ejecutar un programa realizado en un determinado lenguaje y mostrar los resultados via web. Estas herramientas sin embargo pueden servir de apoyo para realizar pruebas con determinadas secciones de código. Pero se supone que todo eso lo permite un buen entorno de desarrollo comercial.

¿Se puede empezar el proyecto en un lenguaje y luego traducirlo a otro si se encuentran dificultades?
Por supuesto, todo es posible: Se puede traducir de Octave a Matlab sin demasiadas dificultades, no así al revés. También se puede traducir de R a Phyton, o bien traducir de C o C# a Phyton.
Si el proyecto es compllejo, lo normal es que convivan diversos programas en diversos lenguaje de programación, cada uno con una función diferente.

¿Cuál es el mejor consejo que se puede dar para organizar bien un proyecto de este tipo?
Desde luego, tratar de aprovechar el código ya existente. Es decir si queremos programar determinadas funcionalidades que son de uso muy habitual en determinados sectores, buscar en foros, en libros o en librerías si este código ya está parcial o totalmente programado y a partir de ahí veremos qué lenguajes y que entornos de desarrollo debemos usar.

Proyectos de auto-desarrollo de software para uso corporativo interno

El objetivo en este caso, se trataría de desarrollar un software para uso corporativo interno, es decir para facilitar determinados procesos de cálculo necesarios para el funcionamiento de la organización. En este caso deben tenerse en cuenta las siguientes ventajas e inconvenientes:

Ventajas
Facilitad de depuración y ampliación del código según necesidades
Confidencialidad del código
Protección de datos
Posibilidad de tener una ventaja frente a competidores
Inconvenientes
Falta de soporte de un consultor. La empresa debe ser el propio consultor

Proyectos de investigación

Los proyectos de investigación tienen prescripciones y requerimientos muy especializados dentro de una gran diversidad. Con un programa como Matlab es posible realizar gran número de proyectos de investigación.

Las posibles necesidades que existen para el desarrollo del programa buscado pueden ser las siguientes:

Datos
Tratamiento de datos orientados al objeto
Tipado automático. Una variable puede pasar de ser una cadena de texto a un número entero, a una número de coma flotante o a un número mixto.
Redimensionamiento automático de arrays
Uso de estructuras de datos
Uso de arrays de más de 2 dimensiones: los llamados hiperarrays
Visualización
Dibjo de curvas, superficies o sólidos en 3D
Dibjo de nubes de puntos en 3D
Simulación
Creación de máquinas lógicas
Creación de mecanismos

Proyectos a medida para un cliente

Si nuestro objetivo es desarrollar un software a medida para un único cliente, firmando un contrato para ofrecerle depuración y mantenimiento del mismo, el Matlab también es una opción a considerar. Al cliente es mejor entregarle el progama ya compilado en formato ejecutable, bien para 32 bits o 64 bits. De esta manera no necesite adquirir una licencia de matlab ni preocuparse por los aspectos técnicos más avanzados.

 

Conclusión

Como decíamos Matlab nos simplifica el proyecto porque:

  • Unifica una enorme cantidad de librerías en un mismo entorno.
  • Permite compilar programas ejecutables fuera del entorno Matlab.
  • La existencia del entorno GUIDE nos permite desarrollar el interfaz fácilmente, permitiéndonos concentrarnos en la correcta programación del codigo base.
  • La existencia de una comunidad universitaria e investigadora tan amplia nos debería facilitar el desarrollo en algún momento.

Si necesitas clases sobre Matlab puedes contactar con nosotros. Recuerdo que este servicio se trata de clases; si lo que necesita es consultoría entonces sería otro servicio que también podemos ofrecerle. Este formulario es para contratar clases:

 

Formulario de solicitud sin compromiso de clases de Matlab