MATLAB (abreviatura de "MATrix LABoratory" [22] ) es un lenguaje de programación multiparadigma y un entorno de computación numérica desarrollado por MathWorks . MATLAB permite manipulaciones de matrices , representación gráfica de funciones y datos, implementación de algoritmos , creación de interfaces de usuario e interacción con programas escritos en otros lenguajes.
Aunque MATLAB está pensado principalmente para el cálculo numérico, una caja de herramientas opcional utiliza el motor simbólico MuPAD que permite el acceso a capacidades de cálculo simbólico . Un paquete adicional, Simulink , añade simulación gráfica multidominio y diseño basado en modelos para sistemas dinámicos e integrados .
En 2020 [update], MATLAB contaba con más de cuatro millones de usuarios en todo el mundo. [23] Provienen de diversos ámbitos de la ingeniería , la ciencia y la economía . En 2017 [update], más de 5000 colegios y universidades de todo el mundo utilizaban MATLAB para respaldar la enseñanza y la investigación. [24]
MATLAB fue inventado por el matemático y programador informático Cleve Moler . [25] La idea de MATLAB se basó en su tesis doctoral de los años 1960. [25] Moler se convirtió en profesor de matemáticas en la Universidad de Nuevo México y comenzó a desarrollar MATLAB para sus estudiantes [25] como pasatiempo. [26] Desarrolló la programación de álgebra lineal inicial de MATLAB en 1967 con su antiguo asesor de tesis, George Forsythe . [25] A esto le siguió el código Fortran para ecuaciones lineales en 1971. [25]
Antes de la versión 1.0, MATLAB "no era un lenguaje de programación; era una simple calculadora matricial interactiva. No había programas, ni cajas de herramientas, ni gráficos. Ni ecuaciones diferenciales ordinarias ni transformadas de Fourier ". [27]
La primera versión temprana de MATLAB se completó a fines de la década de 1970. [25] El software se reveló al público por primera vez en febrero de 1979 en la Escuela Naval de Postgrado en California. [26] Las primeras versiones de MATLAB eran calculadoras matriciales simples con 71 funciones preconstruidas. [28] En ese momento, MATLAB se distribuía de forma gratuita [29] [30] a las universidades. [31] Moler dejaba copias en las universidades que visitaba y el software desarrolló un fuerte seguimiento en los departamentos de matemáticas de los campus universitarios. [32] : 5
En la década de 1980, Cleve Moler conoció a John N. Little . Decidieron reprogramar MATLAB en C y comercializarlo para los equipos de escritorio IBM que estaban reemplazando a los ordenadores mainframe en ese momento. [25] John Little y el programador Steve Bangert reprogramaron MATLAB en C, crearon el lenguaje de programación MATLAB y desarrollaron funciones para cajas de herramientas. [26]
Desde 1993 existen alternativas de código abierto: GNU Octave (mayormente compatible con Matlab) y scilab (similar a Matlab).
MATLAB se lanzó por primera vez como producto comercial en 1984 en la Conferencia de Control Automático en Las Vegas . [25] [26] MathWorks , Inc. se fundó para desarrollar el software [30] y se lanzó el lenguaje de programación MATLAB. [28] La primera venta de MATLAB fue el año siguiente, cuando Nick Trefethen del Instituto Tecnológico de Massachusetts compró diez copias. [26] [33]
A finales de la década de 1980, se habían vendido cientos de copias de MATLAB a universidades para uso estudiantil. [26] El software se popularizó en gran medida gracias a las cajas de herramientas creadas por expertos en varios campos para realizar tareas matemáticas especializadas. [29] Muchas de las cajas de herramientas se desarrollaron como resultado de los estudiantes de Stanford que usaron MATLAB en el ámbito académico y luego llevaron el software con ellos al sector privado. [26]
Con el tiempo, MATLAB fue reescrito para los primeros sistemas operativos creados por Digital Equipment Corporation , VAX , Sun Microsystems y para PC Unix. [26] [28] La versión 3 se lanzó en 1987. [34] El primer compilador de MATLAB fue desarrollado por Stephen C. Johnson en la década de 1990. [28]
En 2000, MathWorks agregó una biblioteca basada en Fortran para álgebra lineal en MATLAB 6, reemplazando las subrutinas LINPACK y EISPACK originales del software que estaban en C. [28] La caja de herramientas de computación paralela de MATLAB se lanzó en la Conferencia de Supercomputación de 2004 y se le agregó soporte para unidades de procesamiento de gráficos (GPU) en 2010. [28]
En la versión 8 de 2012 se realizaron algunos cambios especialmente importantes en el software. [35] Se modificó la interfaz de usuario [ cita requerida ] y se amplió la funcionalidad de Simulink . [36] En 2016, MATLAB había introducido varias mejoras técnicas y de interfaz de usuario, incluido el cuaderno MATLAB Live Editor y otras características. [28]
La aplicación MATLAB está construida en torno al lenguaje de programación MATLAB. El uso habitual de la aplicación MATLAB implica el uso de la "Ventana de comandos" como un shell matemático interactivo o la ejecución de archivos de texto que contienen código MATLAB. [37]
Existe un ejemplo de un programa "¡Hola, mundo!" en MATLAB.
disp ( '¡Hola, mundo!' )
Se muestra así:
¡Hola Mundo!
Las variables se definen utilizando el operador de asignación, =
. MATLAB es un lenguaje de programación de tipado débil porque los tipos se convierten implícitamente. [38] Es un lenguaje de tipado inferido porque las variables se pueden asignar sin declarar su tipo, excepto si se las va a tratar como objetos simbólicos, [39] y su tipo puede cambiar. Los valores pueden provenir de constantes , de cálculos que involucran valores de otras variables o de la salida de una función. Por ejemplo:
>> x = 17 x = 17 >> x = 'sombrero' x = sombrero >> x = [ 3 * 4 , pi / 2 ] x = 12.0000 1.5708 >> y = 3 * sen ( x ) y = -1.6097 3.0000
Una matriz simple se define utilizando la sintaxis de dos puntos: inicial :
incremento :
terminador . Por ejemplo:
>> matriz = 1 : 2 : 9 matriz = 1 3 5 7 9
define una variable denominada array
(o asigna un nuevo valor a una variable existente con el nombre array
) que es una matriz que consta de los valores 1, 3, 5, 7 y 9. Es decir, la matriz comienza en 1 (el valor inicial ), se incrementa con cada paso desde el valor anterior en 2 (el valor de incremento ) y se detiene una vez que alcanza (o está a punto de superar) 9 (el valor del terminador ).
El valor de incremento se puede omitir de esta sintaxis (junto con uno de los dos puntos) para utilizar un valor predeterminado de 1.
>> ari = 1 : 5 ari = 1 2 3 4 5
asigna a la variable nombrada ari
una matriz con los valores 1, 2, 3, 4 y 5, ya que se utiliza el valor predeterminado de 1 como incremento.
La indexación se basa en uno, [40] que es la convención habitual para matrices en matemáticas, a diferencia de la indexación basada en cero que se usa comúnmente en otros lenguajes de programación como C, C++ y Java.
Las matrices se pueden definir separando los elementos de una fila con un espacio en blanco o una coma y utilizando un punto y coma para separar las filas. La lista de elementos debe estar rodeada por corchetes []
. Los paréntesis ()
se utilizan para acceder a elementos y submatrices (también se utilizan para indicar una lista de argumentos de una función).
>> A = [ 16 , 3 , 2 , 13 ; 5 , 10 , 11 , 8 ; 9 , 6 , 7 , 12 ; 4 , 15 , 14 , 1 ] A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1 >> A ( 2 , 3 ) respuesta = 11
Los conjuntos de índices se pueden especificar mediante expresiones como 2:4
, que se evalúa como [2, 3, 4]
. Por ejemplo, una submatriz tomada de las filas 2 a 4 y las columnas 3 a 4 se puede escribir como:
>> A ( 2 : 4 , 3 : 4 ) respuesta = 11 8 7 12 14 1
Se puede generar una matriz identidad cuadrada de tamaño neye
utilizando la función , y se pueden generar matrices de cualquier tamaño con ceros o unos con las funciones zeros
y ones
, respectivamente.
>> ojo ( 3 , 3 ) respuesta = 1 0 0 0 1 0 0 0 1>> ceros ( 2 , 3 ) respuesta = 0 0 0 0 0 0>> unos ( 2 , 3 ) respuesta = 1 1 1 1 1 1
La transposición de un vector o una matriz se realiza mediante la función transpose
o agregando punto-prima después de la matriz (sin el punto, prima realizará la transposición conjugada para matrices complejas):
>> A = [ 1 ; 2 ], B = A . ' , C = transpuesta ( A ) A = 1 2 B = 1 2 C = 1 2 >> D = [ 0 , 3 ; 1 , 5 ] , D. ' D = 0 3 1 5 respuesta = 0 1 3 5
La mayoría de las funciones aceptan matrices como entrada y operan elemento por elemento sobre cada elemento. Por ejemplo, mod(2*J,n)
multiplicará cada elemento en J por 2 y luego reducirá cada elemento módulo n . MATLAB incluye bucles for
y estándar while
, pero (como en otras aplicaciones similares como APL y R ), se recomienda usar la notación vectorizada y, a menudo, es más rápido de ejecutar. El siguiente código, extraído de la función magic.m , crea un cuadrado mágico M para valores impares de n (la función MATLAB meshgrid
se usa aquí para generar matrices cuadradas I y J que contienen ):
[ J , I ] = malla ( 1 : n ); A = mod ( I + J - ( n + 3 ) / 2 , n ); B = mod ( I + 2 * J - 2 , n ); M = n * A + B + 1 ;
MATLAB admite tipos de datos de estructura. [41] Dado que todas las variables en MATLAB son matrices, un nombre más adecuado es "matriz de estructura", donde cada elemento de la matriz tiene los mismos nombres de campo. Además, MATLAB admite nombres de campo dinámicos [42] (búsquedas de campos por nombre, manipulaciones de campos, etc.).
Al crear una función de MATLAB, el nombre del archivo debe coincidir con el nombre de la primera función del archivo. Los nombres de funciones válidos comienzan con un carácter alfabético y pueden contener letras, números o guiones bajos. Las variables y funciones distinguen entre mayúsculas y minúsculas. [43]
rgbImage = imread ( 'ecg.png' ); grayImage = rgb2gray ( rgbImage ); % para imágenes no indexadas level = graythresh ( grayImage ); % umbral para convertir la imagen a binaria, binaryImage = im2bw ( grayImage , level ); % Extrae los canales de color rojo, verde y azul individuales. redChannel = rgbImage (:, :, 1 ); greenChannel = rgbImage (:, :, 2 ); blueChannel = rgbImage (:, :, 3 ); % Haz que las partes negras sean de color rojo puro. redChannel ( ~ binaryImage ) = 255 ; greenChannel ( ~ binaryImage ) = 0 ; blueChannel ( ~ binaryImage ) = 0 ; % Ahora recombina para formar la imagen de salida. rgbImageOut = cat ( 3 , canalrojo , canalverde , canalazul ); imshow ( rgbImageOut );
MATLAB admite elementos del cálculo lambda mediante la introducción de identificadores de funciones [44] o referencias de funciones, que se implementan en archivos .m o en funciones anónimas [45] /anidadas. [46]
MATLAB admite la programación orientada a objetos , incluidas las clases, la herencia , el envío virtual, los paquetes, la semántica de paso por valor y la semántica de paso por referencia . [47] Sin embargo, la sintaxis y las convenciones de llamada son significativamente diferentes a las de otros lenguajes. MATLAB tiene clases de valor y clases de referencia, dependiendo de si la clase tiene un identificador como superclase (para clases de referencia) o no (para clases de valor). [48]
El comportamiento de la llamada a un método es diferente entre las clases de valor y de referencia. Por ejemplo, una llamada a un método:
objeto . método ();
puede alterar cualquier miembro del objeto solo si el objeto es una instancia de una clase de referencia, de lo contrario los métodos de clase de valor deben devolver una nueva instancia si necesita modificar el objeto.
A continuación se proporciona un ejemplo de una clase sencilla:
classdef Hola métodos función saludo ( obj ) disp ( '¡Hola!' ) fin fin fin
Cuando se coloca en un archivo llamado hello.m
, se puede ejecutar con los siguientes comandos:
>> x = Hola (); >> x . saludar (); ¡Hola!
MATLAB tiene funciones de representación gráfica muy integradas. Por ejemplo, la función plot se puede utilizar para generar una gráfica a partir de dos vectores x e y . El código:
x = 0 : pi / 100 : 2 * pi ; y = pecado ( x ); trazar ( x , y )
produce la siguiente figura de la función seno :
MATLAB también admite gráficos tridimensionales:
MATLAB permite desarrollar aplicaciones con interfaz gráfica de usuario (GUI). [49] Las IU se pueden generar mediante programación o utilizando entornos de diseño visual como GUIDE y App Designer . [50] [51]
MATLAB puede llamar a funciones y subrutinas escritas en los lenguajes de programación C o Fortran . [52] Se crea una función contenedora que permite pasar y devolver los tipos de datos de MATLAB. Los archivos MEX (ejecutables de MATLAB) son los archivos de objetos cargables dinámicamente creados al compilar dichas funciones. [53] [54] Desde 2014, se ha ido añadiendo una interfaz bidireccional cada vez mayor con Python . [55] [56]
Las bibliotecas escritas en Perl , Java , ActiveX o .NET pueden ser llamadas directamente desde MATLAB, [57] [58] y muchas bibliotecas MATLAB (por ejemplo, compatibilidad con XML o SQL ) se implementan como envoltorios alrededor de bibliotecas Java o ActiveX. Llamar a MATLAB desde Java es más complicado, pero se puede hacer con una caja de herramientas MATLAB [59] que se vende por separado por MathWorks , o utilizando un mecanismo no documentado llamado JMI (Java-to-MATLAB Interface), [60] [61] (que no debe confundirse con la interfaz de metadatos de Java no relacionada que también se llama JMI). La API oficial de MATLAB para Java se agregó en 2016. [62]
Como alternativa a la caja de herramientas de matemáticas simbólicas basada en MuPAD disponible en MathWorks, MATLAB se puede conectar a Maple o Mathematica . [63] [64]
También existen bibliotecas para importar y exportar MathML . [65]
En 2020, MATLAB retiró sus servicios de dos universidades chinas como resultado de las sanciones estadounidenses. Las universidades dijeron que responderían a esto con un mayor uso de alternativas de código abierto y con el desarrollo de alternativas nacionales. [66]
APL, Speakeasy, LINPACK, EISPACK y PL0 fueron los predecesores de MATLAB.