MATLAB

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Numerical computing environment and programming language

MATLAB (una abreviatura de "MATrix LABoratory") es un lenguaje de programación multiparadigma patentado y un entorno de computación numérica desarrollado por MathWorks. MATLAB permite la manipulación de matrices, el trazado de funciones y datos, la implementación de algoritmos, la creación de interfaces de usuario y la interfaz con programas escritos en otros lenguajes.

Aunque MATLAB está destinado principalmente a la computación numérica, una caja de herramientas opcional utiliza el motor simbólico MuPAD que permite el acceso a capacidades de computación simbólica. Un paquete adicional, Simulink, agrega simulación gráfica multidominio y diseño basado en modelos para sistemas dinámicos e integrados.

Desde 2020, MATLAB tiene más de 4 millones de usuarios en todo el mundo. Provienen de diversos antecedentes de ingeniería, ciencia y economía.

Historia

Orígenes

MATLAB fue inventado por el matemático y programador informático Cleve Moler. La idea de MATLAB se basó en su tesis doctoral de la década de 1960. Moler se convirtió en profesor de matemáticas en la Universidad de Nuevo México y comenzó a desarrollar MATLAB para sus alumnos como pasatiempo. Desarrolló la programación de álgebra lineal inicial de MATLAB en 1967 con su antiguo asesor de tesis, George Forsythe. Esto fue seguido por el código Fortran para ecuaciones lineales en 1971.

Al principio (antes de la versión 1.0) MATLAB "no era un lenguaje de programación; era una sencilla calculadora matricial interactiva. No había programas, ni cajas de herramientas, ni gráficos. Y sin ODE ni FFT."

La primera versión temprana de MATLAB se completó a fines de la década de 1970. El software se dio a conocer al público por primera vez en febrero de 1979 en la Escuela Naval de Posgrado en California. Las primeras versiones de MATLAB eran simples calculadoras matriciales con 71 funciones predefinidas. En ese momento, MATLAB se distribuía de forma gratuita a las universidades. Moler dejaba copias en las universidades que visitaba y el software desarrolló un gran número de seguidores en los departamentos de matemáticas de los campus universitarios.

En la década de 1980, Cleve Moler conoció a John N. Little. Decidieron reprogramar MATLAB en C y comercializarlo para las computadoras de escritorio de IBM que reemplazaban a las computadoras centrales en ese momento. 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.

Desarrollo comercial

MATLAB se lanzó por primera vez como producto comercial en 1984 en la Conferencia de Control Automático en Las Vegas. Se fundó MathWorks, Inc. para desarrollar el software y se lanzó el lenguaje de programación MATLAB. La primera venta de MATLAB fue al año siguiente, cuando Nick Trefethen del Instituto de Tecnología de Massachusetts compró diez copias.

A finales de la década de 1980, se habían vendido varios cientos de copias de MATLAB a universidades para uso de los estudiantes. El software se popularizó en gran medida gracias a las cajas de herramientas creadas por expertos en diversos campos para realizar tareas matemáticas especializadas. Muchas de las cajas de herramientas se desarrollaron como resultado de que los estudiantes de Stanford usaran MATLAB en el mundo académico y luego llevaran el software al sector privado.

Con el tiempo, MATLAB se reescribió para los primeros sistemas operativos creados por Digital Equipment Corporation, VAX, Sun Microsystems y para PC Unix. La versión 3 se lanzó en 1987. El primer compilador de MATLAB fue desarrollado por Stephen C. Johnson en la década de 1990.

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. Parallel Computing Toolbox de MATLAB se lanzó en 2004 Conferencia de supercomputación y soporte para unidades de procesamiento de gráficos (GPU) se le agregó en 2010.

Historia reciente

Se realizaron algunos cambios especialmente importantes en el software con la versión 8 en 2012. Se modificó la interfaz de usuario y se amplió la funcionalidad de Simulink. Para 2016, MATLAB había introducido varias mejoras técnicas y de interfaz de usuario, incluido el portátil MATLAB Live Editor y otras características.

Sintaxis

La aplicación MATLAB se basa en el lenguaje de programación MATLAB. El uso común de la aplicación MATLAB implica el uso de la "Ventana de comandos" como un shell matemático interactivo o ejecutando archivos de texto que contienen código MATLAB.

Variables

Las variables se definen mediante el operador de asignación, =. MATLAB es un lenguaje de programación débilmente tipado porque los tipos se convierten implícitamente. Es un lenguaje tipado inferido porque las variables se pueden asignar sin declarar su tipo, excepto si se van a tratar como objetos simbólicos y su tipo puede cambiar. Los valores pueden provenir de constantes, de cálculos que involucren valores de otras variables o de la salida de una función. Por ejemplo:

> x = 17x 17> x = 'hat 'xsombrero> x = [3*4, pi/2]x 12.0000 1,5708> Sí. = 3*pecado()x)Y -1.6097 3.0000

Vectores y matrices

Una matriz simple se define usando la sintaxis de dos puntos: inicial:incremento:terminador. Por ejemplo:

> array = 1:2:9array = 1 3 5 7 9

define una variable llamada 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 incremento), y se detiene una vez que alcanza (o está a punto de superar) 9 (el valor terminador).

El valor de incremento en realidad se puede dejar fuera de esta sintaxis (junto con uno de los dos puntos), para usar un valor predeterminado de 1.

> ari = 1:5ari = 1 2 3 4 5

asigne a la variable llamada ari una matriz con los valores 1, 2, 3, 4 y 5, ya que el valor predeterminado de 1 se usa como incremento.

La indexación se basa en uno, que es la convención habitual para las 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 usando un punto y coma para terminar cada fila. La lista de elementos debe estar entre corchetes []. Los paréntesis () se utilizan para acceder a elementos y subarreglos (también se utilizan para denotar una lista de argumentos de funciones).

> 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)ans = 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)ans = 11 8 7 12 14 1

Se puede generar una matriz identidad cuadrada de tamaño n usando la función eye, y se pueden generar matrices de cualquier tamaño con ceros o unos con las funciones ceros y unos, respectivamente.

> ojo()3,3)ans = 1 0 0 0 1 0 0 0 1> ceros()2,3)ans = 0 0 0 0 0 0> uno()2,3)ans = 1 1 1 1 1 1

La transposición de un vector o una matriz se realiza mediante la función transpose o agregando un punto-primo después de la matriz (sin el punto, el primer realizará la transposición conjugada para matrices complejas):

> A = [1 ; 2] B = A.', C = transpose()A)A = 1 2B = 1 2C = 1 2> D = [0, 3 ; 1, 5] D.'D = 0 3 1 5ans = 0 1 3 5

La mayoría de las funciones aceptan matrices como entrada y operan elemento a elemento en 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 estándar for y while, pero (al igual que en otras aplicaciones similares como R), se recomienda el uso de 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 (función MATLAB meshgrid se usa aquí para generar matrices cuadradas I y J que contienen 1:n):

[J,I] = meshgrid()1:n);A = mod()I + J - ()n + 3) / 2, n);B = mod()I + 2 * J - 2, n);M = n * A + B + 1;

Estructuras

MATLAB admite tipos de datos de estructura. 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 campos dinámicos (búsquedas de campos por nombre, manipulaciones de campos, etc.).

Funciones

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 función 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.

rgb Imagen = imread()'ecg.png ');grayImage = rgb2gray()rgb Imagen); % para imágenes no indexadasnivel = graythresh()grayImage); % umbral para la conversión de la imagen a binario, binario Imagen = im2bw()grayImage, nivel); % Extraiga los canales individuales de color rojo, verde y azul.RedChannel = rgb Imagen(: : 1);verde = rgb Imagen(: : 2);BlueChannel = rgb Imagen(: : 3);% Haz las partes negras puras rojas.RedChannel()~binario Imagen) = 255;verde()~binario Imagen) = 0;BlueChannel()~binario Imagen) = 0;% Ahora recombine para formar la imagen de salida.rgbImage Fuera = gato()3, RedChannel, verde, BlueChannel);imshow()rgbImage Fuera);

Manejadores de funciones

MATLAB admite elementos de cálculo lambda mediante la introducción de identificadores de funciones o referencias a funciones, que se implementan en archivos.m o en funciones anónimas/anidadas.

Clases y programación orientada a objetos

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. Sin embargo, la sintaxis y las convenciones de llamadas son significativamente diferentes de otros lenguajes. MATLAB tiene clases de valor y clases de referencia, dependiendo de si la clase tiene control como superclase (para clases de referencia) o no (para clases de valor).

El comportamiento de las llamadas a métodos es diferente entre las clases de valor y de referencia. Por ejemplo, una llamada a un método:

objeto.método();

puede modificar cualquier miembro de objeto solo si 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 simple:

classdef Hola. métodos función salud()obj) disp()¡Hola! ') final finalfinal

Cuando se coloca en un archivo llamado hello.m, se puede ejecutar con los siguientes comandos:

> x = Hola.();> x.salud();¡Hola!

Programación de gráficos e interfaz gráfica de usuario

MATLAB tiene funciones de trazado de gráficos estrechamente integradas. Por ejemplo, la función plot se puede utilizar para generar un gráfico a partir de dos vectores x e y. El código:

x = 0:pi/100:2*pi;Sí. = pecado()x);parcela()x,Sí.)

produce la siguiente figura de la función seno:

Matlab plot sin.svg

MATLAB también admite gráficos tridimensionales:

[X,Y] = meshgrid()-10:0,25:10,-10:0,25:10);f = sinc()Sqrt()X/pi).^2+()Y/pi).^2));Mesh()X,Y,f);axis[-10 10 -10 10 -0.3 1])xlabel()'{bfx} ')Ylabel()'{bfy} ')zlabel()'{bfsinc} ({bfR}))escondido apagado
[X,Y] = meshgrid()-10:0,25:10,-10:0,25:10);f = sinc()Sqrt()X/pi).^2+()Y/pi).^2));surf()X,Y,f);axis[-10 10 -10 10 -0.3 1])xlabel()'{bfx} ')Ylabel()'{bfy} ')zlabel()'{bfsinc} ({bfR}))
Este código produce un cableframe Parcela 3D de la función sincnormalizada bidimensional: Este código produce un superficie Parcela 3D de la función sincnormalizada bidimensional:
MATLAB mesh sinc3D.svgMATLAB surf sinc3D.svg

MATLAB admite el desarrollo de aplicaciones de interfaz gráfica de usuario (GUI). Las interfaces de usuario se pueden generar mediante programación o utilizando entornos de diseño visual como GUIDE y App Designer.

MATLAB y otros lenguajes

MATLAB puede llamar a funciones y subrutinas escritas en los lenguajes de programación C o Fortran. Se crea una función contenedora que permite pasar y devolver tipos de datos de MATLAB. Los archivos MEX (ejecutables de MATLAB) son los archivos de objetos cargables dinámicamente creados al compilar dichas funciones. Desde 2014, se agregó una interfaz bidireccional cada vez mayor con Python.

Las bibliotecas escritas en Perl, Java, ActiveX o.NET se pueden llamar directamente desde MATLAB, y muchas bibliotecas de MATLAB (por ejemplo, compatibilidad con XML o SQL) se implementan como contenedores de bibliotecas Java o ActiveX. Llamar a MATLAB desde Java es más complicado, pero se puede hacer con una caja de herramientas de MATLAB que MathWorks vende por separado, o usando un mecanismo no documentado llamado JMI (interfaz de Java a MATLAB), (que no debe confundirse con los metadatos de Java no relacionados). Interfaz que también se llama JMI). La API oficial de MATLAB para Java se agregó en 2016.

Como alternativa a la caja de herramientas matemática simbólica basada en MuPAD disponible en MathWorks, MATLAB se puede conectar a Maple o Mathematica.

También existen bibliotecas para importar y exportar MathML.

Si bien MATLAB es el paquete de software comercial de computación numérica más popular, hay otras alternativas disponibles, como el lenguaje de computación de código abierto GNU Octave, el lenguaje de programación estadística R, el entorno informático Maple y el lenguaje computacional Julia. Sin embargo, Python, con sus numerosas bibliotecas para aplicaciones numéricas (NumPy, SciPy, Matplotlib, etc.) y su gran flexibilidad como lenguaje de secuencias de comandos multiplataforma totalmente ampliable, es probablemente la alternativa más importante y ampliamente utilizada en la actualidad.

Relaciones con las sanciones de EE. UU.

En 2020, MATLAB retiró los servicios de dos universidades chinas como resultado de las sanciones estadounidenses. Las universidades dijeron que se responderá a esto mediante un mayor uso de alternativas de código abierto y mediante el desarrollo de alternativas nacionales.

Historial de versiones

MATLAB se actualiza dos veces al año. Además de las nuevas funciones y otras mejoras, cada versión tiene nuevas correcciones de errores y cambios más pequeños.

VersiónNombre de la liberaciónNúmeroBundled JVMAñoFecha de lanzamientoNotas
1.0 1984
2 1986
3 1987 Primera caja de herramientas Matlab introducida; soporte para ecuaciones diferenciales comunes añadidos.
3.5 1990 Ran en DOS, el requisito más bajo es un Intel 8088; Math Processor es compatible, sin embargo tenía problemas de compatibilidad con NEC v20 + Intel 8087 combinación.
4 1992 Ran en Windows 3.1x y Macintosh.
4.2c 1994 Ran en Windows 3.1x; necesitaba un coprocesador de matemáticas.
5.0 Volumen 8 1996 Diciembre de 1996 Liberaciones unificadas en todas las plataformas.
5.1 Volumen 9 1997 Mayo de 1997
5.1.1 R9.1
5.2 R10 1998 Marzo de 1998 Última versión trabajando en Macs clásicos.
5.2.1 R10.1
5.3 R11 1999 Enero de 1999
5.3.1 R11.1 Noviembre de 1999
6.0 R12 12 1.1.8 2000 Noviembre de 2000 Primera versión con máquina virtual de Java (JVM).
6.1 R12.1 1.3.0 2001 Junio de 2001 Última versión para Windows 95.
6.5 R13 13 1.3.1 2002 Julio de 2002
6.5.1 R13SP1 2003
6.5.2 R13SP2 Última versión para Windows 98, Windows ME, IBM/AIX, Alpha/TRU64 y SGI/IRIX.
7 R14 14 1.4.2 2004 Junio de 2004 Introdujo funciones anónimas y anidadas; reintroducida para Mac (bajo Mac OS X).
7.0.1 R14SP1 Octubre de 2004
R14SP1+ 2004 Noviembre de 2004 Parallel Computing Toolbox introducido.
7.0.4 R14SP2 1.5.0 2005 7 de marzo de 2005 Soporte añadido para archivos con memoria.
7.1 R14SP3 1.5.0 1o de septiembre de 2005 Primera versión de 64 bits disponible para Windows XP 64-bit.
7.2 R2006a 15 1.5.0 2006 1o de marzo de 2006
7.3 R2006b 16 1.5.0 1o de septiembre de 2006 Soporte de archivo MAT basado en HDF5 añadido.
7.4 R2007a 17 1.5.0_07 2007 1° de marzo de 2007 Nuevo bsxfun función agregada para aplicar la operación binaria elemento-por-elemento con la ampliación de singleton habilitada.
7.5 R2007b 18 1.6.0 Septiembre 1, 2007 Última versión para Windows 2000 y PowerPC Mac; Soporte para servidor de licencias para Windows Vista; nuevo formato interno para código P.
7.6 R2008a 19 1.6.0 2008 1o de marzo de 2008 Mejoras importantes para habilidades de programación orientadas a objetos con una nueva sintaxis de definición de clase; capacidad para gestionar espacios de nombres con paquetes.
7.7 R2008b 20 1.6.0_04 9 de octubre de 2008 Última versión para procesadores w/o SSE2; Nueva estructura de datos de mapa; actualizaciones a generadores de números aleatorios.
7.8 R2009a 21 1.6.0_04 2009 6 de marzo de 2009 Primera versión para Microsoft 32-bit & 64-bit Windows 7; nueva interfaz externa a. Marco NET.
7.9 R2009b 22 1.6.0_12 4 de septiembre de 2009 Primer lanzamiento para Intel 64-bit Mac, y último para Solaris SPARC; nuevo uso para el operador de inclinación (~) ignorar los argumentos en las llamadas de función.
7.9.1 R2009bSP1 1.6.0_12 2010 1 de abril de 2010 Corrección de errores.
7.10 R2010a 23 1.6.0_12 5 de marzo de 2010 Última liberación para Intel 32-bit Mac.
7.11 R2010b 24 1.6.0_17 3 de septiembre de 2010 Soporte añadido para enumeraciones; características adicionales para ejecutar código MATLAB en GPUs basados en NVIDIA CUDA.
7.11.1 R2010bSP1 1.6.0_17 2011 17 de marzo de 2011 Corrección de errores y actualizaciones.
7.11.2 R2010bSP2 1.6.0_17 5 de abril de 2012 Corrección de errores.
7.12 R2011a 25 1.6.0_17 8 de abril de 2011 Nuevo rng función para controlar la generación de números aleatorios.
7.13 R2011b 26 1.6.0_17 Septiembre 1, 2011 Posibilidad de acceso/cambiar partes de variables directamente en los archivos MAT, sin cargar en la memoria; aumento máximo de trabajadores locales con Parallel Computing Toolbox de 8 a 12.
7.14 R2012a 27 1.6.0_17 2012 1 de marzo de 2012 Última versión con soporte Linux de 32 bits.
8 R2012b 28 1.6.0_17 11 de septiembre de 2012 Primera versión con la interfaz Herramientastrip; MATLAB Apps introducidas; sistema de documentación rediseñado.
8.1 R2013a 29 1.6.0_17 2013 7 de marzo de 2013 Nuevo marco de pruebas unitarias.
8.2 R2013b 30 1.7.0_11 6 de septiembre de 2013 Construido en Java Runtime Environment (JRE) actualizado a la versión 7; New table data type.
8.3 R2014a 31 1.7.0_11 2014 7 de marzo de 2014 Configuración simplificada del compilador para la construcción de archivos MEX; soporte USB Webcams en el núcleo MATLAB; número de trabajadores locales ya no limitado a 12 con Parallel Computing Toolbox.
8.4 R2014b 32 1.7.0_11 3 de octubre de 2014 Nuevo motor gráfico basado en la clase (a.k.a. HG2); función de tabbing en GUI; embalaje mejorado de la caja de herramientas de usuario y archivos de ayuda; nuevos objetos para manipulaciones fechadas; integración de Git-Subversion en IDE; habilidades de datos grandes con MapReduce (scalable a Hadoop); nuevo py paquete para utilizar Python desde el interior de MATLAB; nueva interfaz de motor para llamar MATLAB de Python; varias funciones nuevas y mejoradas: webread (Servicios web completos con soporte JSON/XML) tcpclient (conexiones basadas en el socket), histcounts, histogram, animatedline, y otros.
8,5 R2015a 33 1.7.0_60 2015 5 de marzo de 2015
8,5 R2015aSP1 1.7.0_60 Octubre 14, 2015 Última versión soportando Windows XP y Windows Vista.
8.6 R2015b 34 1.7.0_60 Septiembre 3, 2015 Nuevo motor de ejecución del MATLAB (a.k.a. LXE); graph y digraph clases para trabajar con gráficos y redes; MinGW-w64 como compilador compatible en Windows; última versión con soporte de 32 bits.
9.0 R2016a 35 1.7.0_60 2016 Marzo 3, 2016 Scripts en vivo lanzados: documentos interactivos que combinan texto, código y salida (en el estilo de programación de Literate); App Designer introdujo: un nuevo entorno de desarrollo para aplicaciones de construcción (con nuevas figuras de interfaz de usuario, ejes y componentes); deshacer la ejecución de programas de ejecución utilizando un botón de pausa.
9.1 R2016b 36 1.7.0_60 Septiembre 15, 2016 Posibilidad de definir funciones locales en scripts; expansión automática de dimensiones (previously provided via explicit call to bsxfun); tall arrays para Big data; nuevos string tipo; nuevas funciones para codificar/decodificar JSON; API oficial del motor MATLAB para Java.
9.2 R2017a 37 1.7.0_60 2017 Marzo 9, 2017 Liberado MATLAB En línea: MATLAB basado en la nube de escritorio accedido en un navegador web; cadenas de doble cita; nuevas memoize función para la Memoización; validación de propiedades de objeto ampliado; marco de simulación para pruebas unitarias; MEX persigue 64 bits por defecto; nuevo heatmap función para crear diagramas de mapa de calor.
9.3 R2017b 38 1.8.0_121 21 de septiembre de 2017 Presentado un GPU Coder que convierte el código MATLAB al código CUDA para Nvidia.
9.4 R2018a 39 1.8.0_144 2018 15 de marzo de 2018 Mejoras al editor Live; introducción de la interfaz C++ MEX; capacidad de personalizar la finalización de la pestaña; aplicaciones web.
9.5 R2018b 40 1.8.0_152 12 de septiembre de 2018 Añadido soporte para proveedores de nube, como Amazon Web Services; Neural Network Toolbox reemplazado por Deep Learning Toolbox.
9.6 R2019a 41 1.8.0_181 2019 20 de marzo de 2019 Liberado MATLAB Proyectos; programación de máquinas estatales con Stateflow.
9.7 R2019b 42 1.8.0_202 11 de septiembre de 2019 Introducción de bloques "argumentos" para validación de entradas; habilitación de indexación de puntos en salidas de funciones; introducción de tareas de editor en vivo.
9.8 R2020a 43 2020 19 de marzo de 2020 Eliminación de cuaderno Mupad; mejor apoyo para CPUs AMD (AVX2); codificación UTF-8 predeterminada para archivos de código MATLAB; capacidad para crear aplicaciones independientes con Simulink.
9.9 R2020b 44 17 de septiembre de 2020 Mejora del soporte para CPU AMD (AVX2); versión en línea de Simulink.
9.10 R2021a 45 2021 11 de marzo de 2021
9.11 R2021b 46 22 de septiembre de 2021
9.12.0 R2022a 47 2022 9 de marzo de 2022
9.13 R2022b 48 1.8.0_202 15 de septiembre de 2022 Presentado "Diccionarios" (arrays asociativos). Ahora puedo llamar al MATLAB. Aplicaciones NET.

El número (o número de versión) es la versión informada por el programa FLEXlm de Concurrent License Manager. Para obtener una lista completa de los cambios tanto de MATLAB como de las cajas de herramientas oficiales, consulte las notas de la versión de MATLAB.

Contenido relacionado

Lógica combinatoria

Lógica combinatoria es una notación para eliminar la necesidad de variables cuantificadas en lógica matemática. Fue presentado por Moses Schönfinkel y...

Wang tile

El caso de Carmel

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save