Articulo de referencia

GNU Octave

{{cite web|title=contributors.in|author=Rik|url=http://hg.savannah.gnu.org/hgweb/octave/file/tip/doc/interpreter/contributors.in|access-date=14 June 2015|date=10 June 2015}} "},...

GNU Octave es un lenguaje de programación científica para computación científica y computación numérica . Entre otras cosas, Octave se puede usar para resolver problemas lineales y no lineales numéricamente y para realizar otros experimentos numéricos mediante un lenguaje compatible en gran medida con MATLAB . También se puede usar como lenguaje para procesamiento por lotes . Como parte del Proyecto GNU , es software libre bajo los términos de la Licencia Pública General de GNU .

Historia

El proyecto se concibió alrededor de 1988. [ 6 ] Inicialmente, se pretendía que sirviera como complemento de un curso de diseño de reactores químicos. John W. Eaton inició su desarrollo completo en 1992. La primera versión alfa data del 4 de enero de 1993 y el 17 de febrero de 1994 se lanzó la versión 1.0. La versión 9.2.0 se lanzó el 7 de junio de 2024. [ 7 ]

El programa lleva el nombre de Octave Levenspiel , antiguo profesor del autor principal. Levenspiel era conocido por su habilidad para realizar cálculos rápidos y aproximados . [ 8 ]

Historia del desarrollo

Desarrollos

Además de su uso en ordenadores de sobremesa para computación científica personal, Octave se utiliza en el ámbito académico y la industria. Por ejemplo, Octave se utilizó en un superordenador de procesamiento paralelo masivo en el Centro de Supercomputación de Pittsburgh para encontrar vulnerabilidades relacionadas con la adivinación de números de la seguridad social. [ 23 ]

La aceleración con OpenCL o CUDA también es posible mediante el uso de GPU. [ 24 ]

Detalles técnicos

Octava, el lenguaje

Octave es un lenguaje de programación interpretado. Es un lenguaje de programación estructurado (similar a C ) y admite muchas funciones comunes de la biblioteca estándar de C , así como ciertas llamadas y funciones del sistema UNIX . [ 25 ] Sin embargo, no admite el paso de argumentos por referencia [ 26 ], aunque los argumentos de las funciones se copian en escritura para evitar duplicaciones innecesarias.

Los programas de Octave consisten en una lista de llamadas a funciones o un script . La sintaxis se basa en matrices y proporciona diversas funciones para operaciones matriciales. Admite varias estructuras de datos y permite la programación orientada a objetos . [ 27 ]

Su sintaxis es muy similar a la de MATLAB, y una programación cuidadosa de un script permitirá que se ejecute tanto en Octave como en MATLAB. [ 28 ]

Dado que Octave se distribuye bajo la Licencia Pública General de GNU , puede modificarse, copiarse y utilizarse libremente. [ 8 ] El programa se ejecuta en Microsoft Windows y en la mayoría de los sistemas operativos Unix y similares , incluidos Linux , Android y macOS . [ 29 ] [ 30 ] [ 31 ]

Características destacadas

Autocompletado de comandos y nombres de variables

Al escribir un carácter de tabulación en la línea de comandos, Octave intenta completar los nombres de variables, funciones y archivos (de forma similar a la función de autocompletado de tabulación de Bash ). Octave utiliza el texto anterior al cursor como la parte inicial del nombre que debe completar. [ 32 ]

Historial de comandos

Cuando se ejecuta en modo interactivo, Octave guarda los comandos que se escriben en un búfer interno para que puedan recuperarse y editarse.

Estructuras de datos

Octave incluye un soporte limitado para organizar datos en estructuras. En este ejemplo, vemos una estructura x con elementos a , b y c (un número entero, una matriz y una cadena, respectivamente):

octava : 1 > x.a = 1 ; x.b = [ 1 , 2 ; 3 , 4 ] ; x.c = " cadena " ; octava : 2 > x.a ans = 1 octava : 3 > x.b ans =1 2 3 4octava : 4 > x . c ans = cadena octava : 5 > x x =estructura escalar que contiene los campos :a = 1 b =1 2 3 4c = cadena

Operadores booleanos de cortocircuito

Los operadores lógicos &&y de Octave se evalúan de forma de cortocircuito (como los operadores correspondientes en el lenguaje C ), a diferencia de los operadores elemento por elemento y .||&|

Operadores de incremento y decremento

Octave incluye los operadores de incremento y decremento tipo C ++, --tanto en su forma prefija como postfija. Octave también realiza asignación aumentada , por ejemplo x += 5.

Desenrollar-proteger

Octave admite una forma limitada de manejo de excepciones modelada a partir de la unwind_protectde Lisp . La forma general de un bloque unwind_protect es la siguiente:

unwind_protect cuerpo unwind_protect_cleanup limpieza fin_unwind_protect

Como regla general, GNU Octave reconoce como terminación de un bloque dado blockla palabra clave end(que es compatible con el lenguaje MATLAB) o una palabra clave más específica o, en algunos casos, . En consecuencia, un bloque puede terminarse con la palabra clave como en el ejemplo, o con la palabra clave más portable .endblockend_blockunwind_protectend_unwind_protectend

La parte de limpieza del bloque siempre se ejecuta. En caso de que se genere una excepción en el cuerpo del bloque , la limpieza se ejecuta inmediatamente antes de propagar la excepción fuera del bloque unwind_protect.

GNU Octave también admite otra forma de manejo de excepciones (compatible con el lenguaje MATLAB):

intentar cuerpo capturar manejo de excepciones fin

Esta última forma se diferencia de un unwind_protectbloque en dos aspectos. Primero, exception_handling solo se ejecuta cuando body genera una excepción . Segundo, después de la ejecución de exception_handling, la excepción no se propaga fuera del bloque (a menos que rethrow( lasterror )se inserte explícitamente una instrucción dentro del código de exception_handling ).

Listas de argumentos de longitud variable

Octave cuenta con un mecanismo para manejar funciones que aceptan un número indeterminado de argumentos sin límite superior explícito. Para especificar una lista de cero o más argumentos, utilice el argumento especial varargincomo último (o único) argumento de la lista. varargines una matriz de celdas que contiene todos los argumentos de entrada.

función s = plus ( varargin ) si ( nargin == 0 ) s = 0 ; de lo contrario s = varargin { 1 } + plus ( varargin { 2 : nargin }); fin fin

Listas de retorno de longitud variable

Se puede configurar una función para que devuelva cualquier número de valores utilizando el valor de retorno especial varargout. Por ejemplo:

función varargout = multiassign ( data ) para k = 1 : nargout varargout { k } = data (:, k ); fin fin

Integración de C++

También es posible ejecutar código Octave directamente en un programa C++. Por ejemplo, aquí hay un fragmento de código para llamar a rand([10,1]):

#include <octave/oct.h> ... ColumnVector NumRands ( 2 ); NumRands ( 0 ) = 10 ; NumRands ( 1 ) = 1 ; octave_value_list f_arg , f_ret ; f_arg ( 0 ) = octave_value ( NumRands ); f_ret = feval ( "rand" , f_arg , 1 ); Matrix unis ( f_ret ( 0 ). matrix_value ());

El código C y C++ se puede integrar en GNU Octave creando archivos .oct o utilizando archivos MEX compatibles con MATLAB .

Compatibilidad con MATLAB

Octave se ha diseñado teniendo en cuenta la compatibilidad con MATLAB y comparte muchas características con este programa:

% Script: myscript.m a = 5 ; b = a * 2% Función: myfunc.m función resultado = myfunc ( x ) resultado = x ^ 2 + 3 ; fin    
  1. Las matrices como tipo de dato fundamental.
  2. Soporte integrado para números complejos.
  3. Potentes funciones matemáticas integradas y amplias bibliotecas de funciones.
  4. Extensibilidad mediante funciones definidas por el usuario.

Octave trata la incompatibilidad con MATLAB como un error ; por lo tanto, podría considerarse un clon de software , lo cual no infringe los derechos de autor del software según el caso judicial Lotus v. Borland .

En principio, los scripts de MATLAB del repositorio FileExchange de MathWorks son compatibles con Octave. Sin embargo, aunque a menudo los usuarios los proporcionan y suben bajo una licencia BSD de código abierto compatible con Octave , los Términos de uso de FileExchange prohíben cualquier uso que no sea el MATLAB propietario de MathWorks . [ 33 ] [ 34 ] [ 35 ]

Compatibilidad de sintaxis

Hay algunas adiciones sintácticas intencionadas, aunque menores. Archivado el 26/04/2012 en Wayback Machine :

  1. Las líneas de comentarios pueden ir precedidas del carácter # o del  carácter %;
  2. Se admiten varios operadores basados ​​en C : ++ , -- , += , *=, /=;
  3. Los elementos pueden referenciarse sin crear una nueva variable mediante indexación en cascada, por ejemplo [1:10](3);
  4. Las cadenas se pueden definir con el carácter de comilla doble " así como con el carácter de comilla simple ';
  5. Cuando el tipo de variable es simple (un número de punto flotante de precisión simple), Octave calcula la " media " en el dominio simple (MATLAB en el dominio doble ), lo cual es más rápido pero da resultados menos precisos;
  6. Los bloques también pueden finalizarse con palabras clave de estructura de control más específicas , es decir, endif, endfor, endwhile, etc.;
  7. Las funciones se pueden definir dentro de los scripts y en la línea de comandos de Octave;
  8. Presencia de un bucle do-until (similar al do-while en C).

Compatibilidad de funciones

Muchas, pero no todas, de las numerosas funciones de MATLAB están disponibles en GNU Octave, algunas de ellas accesibles a través de paquetes en Octave Forge . Las funciones disponibles como parte de los paquetes principales de Octave o Forge se enumeran en línea (Archivado el 14/03/2024) en Wayback Machine .

En la función Octave se incluye una lista de funciones no disponibles __unimplemented.m__. Las funciones no implementadas también se enumeran en muchos paquetes de Octave Forge en la Wiki de Octave .

Cuando se llama a una función no implementada, se muestra el siguiente mensaje de error:

Octave : 1 > advertencia de guía : la función 'guide' aún no está implementada en Octave.Por favor, lee < http : // www . octave . org / missing . html > para saber cómo puedes contribuir con la funcionalidad faltante . error : 'guide' no definido cerca de la línea 1 columna 1

Interfaces de usuario

Octave viene con una interfaz gráfica de usuario (GUI) oficial y un entorno de desarrollo integrado (IDE) basado en Qt . Ha estado disponible desde Octave 3.8, [ 36 ] y se convirtió en la interfaz predeterminada (sobre la interfaz de línea de comandos ) con el lanzamiento de Octave 4.0. [ 12 ] Fue bien recibida por un colaborador de EDN, quien escribió "[Octave] ahora tiene una GUI muy funcional" al revisar la entonces nueva GUI en 2014. [ 37 ]

También se han desarrollado varias interfaces gráficas de terceros, como ToolboX para la enseñanza de la programación.

Aplicaciones con interfaz gráfica de usuario (GUI)

Con el código de Octave, el usuario puede crear aplicaciones con interfaz gráfica de usuario (GUI). Consulte Desarrollo de GUI (GNU Octave (versión 7.1.0)) . A continuación se muestran algunos ejemplos:

Botón, control de edición, casilla de verificación

# crear figura y panel en ella f = figura ; # crear un botón (estilo predeterminado) b1 = uicontrol ( f , "cadena" , "Un botón" , "posición" , [ 10 10 150 40 ]); # crear un control de edición e1 = uicontrol ( f , "estilo" , "editar" , "cadena" , "texto editable" , "posición" , [ 10 60 300 40 ]); # crear una casilla de verificación c1 = uicontrol ( f , "estilo" , "casilla de verificación" , "cadena" , "una casilla de verificación" , "posición" , [ 10 120 150 40 ]);

Cuadro de texto

prompt = { "Ancho" , "Alto" , "Profundidad" }; defaults = { "1.10" , "2.20" , "3.30" }; rowscols = [ 1 , 10 ; 2 , 20 ; 3 , 30 ]; dims = inputdlg ( prompt , "Ingrese las dimensiones de la caja" , rowscols , defaults );

Lista desplegable con cuadros de mensaje.

my_options = { "Un artículo" , "otro" , "otro más" }; [ sel , ok ] = listdlg ( "ListString" , my_options , "SelectionMode" , "Multiple" ); if ( ok == 1 ) msgbox ( "Has seleccionado:" ); for i = 1 : numel ( sel ) msgbox ( sprintf ( "\t%s" , my_options { sel ( i )})); endfor else msgbox ( "Has cancelado." ); endif

Botones de opción

# crear figura y panel en ella f = figura ; # crear un grupo de botones gp = uibuttongroup ( f , "Posición" , [ 0 0.5 1 1 ]) # crear botones en el grupo b1 = uicontrol ( gp , "estilo" , "radiobutton" , "cadena" , "Opción 1" , "Posición" , [ 10 150 100 50 ]); b2 = uicontrol ( gp , "estilo" , "radiobutton" , "cadena" , "Opción 2" , "Posición" , [ 10 50 100 30 ]); # crear un botón que no esté en el grupo b3 = uicontrol ( f , "style" , "radiobutton" , "string" , "Not in the group" , "Position" , [ 10 50 100 50 ]);

Paquetes

Octave también cuenta con numerosos paquetes disponibles. Estos paquetes se encuentran en Octave-Forge (Octave Forge - Packages) o en GitHub (Octave Packages ). Además, cualquier persona puede crear y mantener paquetes.

Comparación con software similar

Entre las alternativas a GNU Octave bajo una licencia de código abierto , además del mencionado MATLAB, se incluyen Scilab y FreeMat . [ 38 ] [ 39 ] [ 40 ] [ 41 ] Octave es más compatible con MATLAB que Scilab, [ 38 ] [ 42 ] [ 43 ] y FreeMat no se ha actualizado desde junio de 2013. [ 44 ]

Asimismo, el lenguaje de programación Julia y sus capacidades gráficas presentan similitudes con GNU Octave.

Véase también

Notas

  1. GPL-3.0 o posterior desde el 12/10/2007.
  2. GPL-2.0 o posterior desde el 19 de febrero de 1992 hasta el 11 de octubre de 2007.

Referencias

  1. Rik ​​(10 de junio de 2015). "contributors.in" . Consultado el 14 de junio de 2015 .
  2. ""El desarrollo a tiempo completo comenzó en la primavera de 1992. La primera versión alfa se lanzó el 4 de enero de 1993, y la versión 1.0 se lanzó el 17 de febrero de 1994."" .
  3. "GNU Octave 11.3.0 lanzado" . 1 de junio de 2026. Consultado el 23 de junio de 2026 .
  4. "Building - Octave" . wiki.octave.org . GNU . Consultado el 1 de mayo de 2018 .
  5. "Vasco, bielorruso, catalán, chino, neerlandés, inglés, francés, alemán, húngaro, italiano, japonés, letón, portugués (Brasil), portugués (Portugal), ruso, español, turco, ucraniano" . hg.savannah.gnu.org .
  6. "Acerca de GNU Octave" . www.gnu.org . GNU . Consultado el 1 de mayo de 2018 .
  7. "Octave 9.2.0 lanzado" . octave.org . 2024-06-07 . Consultado el 2024-11-05 .
  8. 1 2 Eaton, John W. "Acerca de Octave" . Recuperado el 28 de junio de 2009 .
  9. "GNU Octave Versión 1" . www.gnu.org .
  10. "GNU Octave Versión 2" . www.gnu.org .
  11. "GNU Octave Versión 3" . www.gnu.org .
  12. 1 2 "GNU Octave Versión 4.0" . www.gnu.org .
  13. "GNU Octave 4.0.0 lanzado" . www.gnu.org . 29 de mayo de 2015.
  14. "GNU Octave 4.0.1 lanzado" . www.gnu.org . 23 de marzo de 2016.
  15. "GNU Octave 4.0.3 lanzado" . www.gnu.org . 2 de julio de 2016.
  16. "GNU Octave Versión 5" . www.gnu.org .
  17. "GNU Octave 6.1.0 lanzado" . www.gnu.org . 26 de noviembre de 2020.
  18. "GNU Octave 7.1.0 lanzado" . www.gnu.org . 6 de abril de 2022.
  19. "GNU Octave 8.1.0 lanzado" . octave.org . 7 de marzo de 2023.
  20. "GNU Octave Versión 9" . octave.org . 14 de marzo de 2024. Consultado el 25 de marzo de 2024 .
  21. "OGNU Octave Versión 10" . octave.org . 28 de marzo de 2025. Consultado el 12 de julio de 2026 .
  22. "GNU Octave Versión 11" . octave.org . 18 de febrero de 2026. Consultado el 12 de julio de 2026 .
  23. "Los hallazgos sobre la vulnerabilidad del número de la Seguridad Social se basaron en la supercomputación" . 8 de julio de 2009. Archivado del original el 29 de febrero de 2012.
  24. "Aceleración instantánea de GNU Octave" . Blog para desarrolladores de NVIDIA . 5 de junio de 2014.
  25. "GNU Octave - Control de subprocesos" . 14 de noviembre de 2008. Archivado del original el 7 de enero de 2009. Consultado el 28 de enero de 2009 .
  26. "GNU Octave" . Consultado el 28 de enero de 2009 .
  27. "Resumen de los cambios importantes visibles para el usuario en la versión 3.2" . Consultado el 5 de enero de 2012 .
  28. "Preguntas frecuentes: compatibilidad con MATLAB" . Archivado del original el 21/11/2011 . Consultado el 04/04/2009 .
  29. "Preguntas frecuentes: Cómo obtener Octave" . Archivado del original el 21/11/2011 . Consultado el 04/04/2009 .
  30. "Top (GNU Octave (versión 6.3.0))" . octave.org .
  31. "Octave para Android - Octave" . wiki.octave.org . Consultado el 23 de agosto de 2021 .
  32. Eaton, John W. "Dejando que Readline escriba por ti" . Manual de referencia de GNU Octave . Archivado del original el 12 de febrero de 2018. Consultado el 29 de julio de 2016 .
  33. "Preguntas frecuentes - Octave" . wiki.octave.org . Consultado el 5 de diciembre de 2022 .
  34. "Condiciones de uso de MATLAB Central" . www.mathworks.com . Consultado el 5 de diciembre de 2022 .
  35. "Preguntas frecuentes sobre licencias de intercambio de archivos" . www.mathworks.com . Consultado el 5 de diciembre de 2022 .
  36. "GNU Octave Versión 3.8" . www.gnu.org .
  37. Hageman, Steve (7 de febrero de 2014). "GNU Octave alcanza un nivel muy alto" . EDN .
  38. 1 2 Trappenberg, Thomas (2010). Fundamentos de la neurociencia computacional . Oxford University Press. pág. 361. ISBN  978-0-19-956841-3.
  39. Muhammad, A; Zalizniak, V (2011). Computación científica práctica . Woodhead Publishing . pág . 3. ISBN  978-0-85709-226-7.
  40. ↑ Megrey, Bernard A.; Moksness , Erlend (2008). Computers in Fisheries Research . Springer Science & Business Media. p. 345. ISBN  978-1-4020-8636-6.
  41. Kapuno, Raul Raymond (2008). Programación para ingenieros químicos con C, C++ y MATLAB . Jones & Bartlett Publishers. pág. 365. ISBN  978-1-934015-09-4.
  42. Herman, Russell L. (2013). Un curso de métodos matemáticos para físicos . CRC Press. pág. 42. ISBN  978-1-4665-8467-9.
  43. Wouwer, Alain Vande; Saucez, Philippe; Vilas, Carlos (2014). Simulación de modelos ODE/PDE con MATLAB, Octave y Scilab: Aplicaciones científicas y de ingeniería . Springer. pp. 114–115 . ISBN  978-3-319-06790-2.
  44. "FreeMat" . freemat.sourceforge.net . Consultado el 22 de febrero de 2020 .

Lecturas adicionales

  • Hansen, Jesper Schmidt (junio de 2011). Octava GNU. Guía para principiantes . Publicación de paquetes . ISBN 978-1-849-51332-6Archivado del original el 2 de agosto de 2014. Consultado el 26 de junio de 2011 .
  • Sitio web oficialEdita esto en Wikidata