stringtranslate.com

Octava GNU

GNU Octave es un lenguaje de programación científica para computación científica y computación numérica . Octave ayuda a resolver numéricamente problemas lineales y no lineales y a realizar otros experimentos numéricos utilizando un lenguaje que es mayormente compatible con MATLAB . También puede utilizarse como lenguaje orientado a 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] En un principio, se pretendía que fuera un complemento a un curso de diseño de reactores químicos. John W. Eaton inició el desarrollo completo en 1992. La primera versión alfa se remonta al 4 de enero de 1993 y el 17 de febrero de 1994 se publicó la versión 1.0. La versión 8.4.0 se publicó el 5 de noviembre de 2023. [7]

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

Historial de desarrollo

Desarrollos

Además de utilizarse en computadoras de escritorio para computación científica personal, Octave se utiliza en el ámbito académico y en la industria. Por ejemplo, Octave se utilizó en una enorme computadora paralela en el Centro de Supercomputación de Pittsburgh para encontrar vulnerabilidades relacionadas con la adivinación de números de seguridad social. [21]

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

Detalles técnicos

Octava, el lenguaje

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 , y también ciertas llamadas y funciones del sistema UNIX . [23] Sin embargo, no admite el paso de argumentos por referencia [24] aunque los argumentos de función se copian al escribir para evitar duplicaciones innecesarias.

Los programas Octave consisten en una lista de llamadas a funciones o un script . La sintaxis está basada en matrices y proporciona varias funciones para operaciones con matrices. Admite varias estructuras de datos y permite la programación orientada a objetos . [25]

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. [26]

Dado que Octave está disponible bajo la Licencia Pública General de GNU , se puede modificar, copiar y utilizar libremente. [8] El programa se ejecuta en Microsoft Windows y la mayoría de los sistemas operativos Unix y similares a Unix , incluidos Linux , Android y macOS . [27] [28] [29]

Características destacables

Completar nombre de variable y comando

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

Historial de comandos

Cuando se ejecuta de forma interactiva, Octave guarda los comandos escritos en un búfer interno para que puedan recuperarse y editarse.

Estructuras de datos

Octave incluye una cantidad limitada de compatibilidad para organizar datos en estructuras. En este ejemplo, vemos una estructura x con elementos a , b y c (un 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  4 c  =  cadena

Operadores booleanos de cortocircuito

Los operadores lógicos &&y de octava se evalúan de manera de cortocircuito (como los operadores correspondientes en el lenguaje C ), en contraste con los operadores elemento por elemento y .||&|

Operadores de incremento y decremento

Octave incluye operadores de incremento y decremento similares a C ++, --tanto en su forma de prefijo como de sufijo. Octave también realiza asignaciones aumentadas , por ejemplo x += 5:

Desenrollar-proteger

Octave admite una forma limitada de manejo de excepciones que sigue el modelo de unwind_protect de Lisp . La forma general de un bloque unwind_protect es la siguiente:

desenrollar_proteger  cuerpo desenrollar_proteger_limpiar  limpieza fin_desenrollar_proteger

Como regla general, GNU Octave reconoce como terminación de un bloque 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 la parte del cuerpo genere una excepción , 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):

Intente capturar el cuerpo de la excepción y terminar con el manejo de excepciones  

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

Listas de argumentos de longitud variable

Octave tiene un mecanismo para manejar funciones que toman una cantidad no especificada de argumentos sin un límite superior explícito. Para especificar una lista de cero o más argumentos, use el argumento especial varargincomo el último (o único) argumento en 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 cantidad de valores utilizando el valor de retorno especial varargout. Por ejemplo:

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

Integración de C++

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

#include <octava/oct.h> ... ColumnVector NumRands ( 2 ); NumRands ( 0 ) = 10 ; NumRands ( 1 ) = 1 ; lista_valores_octava f_arg , f_ret ; f_arg ( 0 ) = valor_octava ( NumRands ); f_ret = feval ( "rand" , f_arg , 1 ); Matriz unis ( f_ret ( 0 ). valor_matriz ());               

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

Compatibilidad con MATLAB

Octave se ha creado teniendo en cuenta la compatibilidad con MATLAB y comparte muchas características con él:

  1. Matrices como tipo de datos fundamental.
  2. Soporte integrado para números complejos.
  3. Potentes funciones matemáticas integradas y amplias bibliotecas de funciones.
  4. Extensibilidad en forma de funciones definidas por el usuario.

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

Los scripts de MATLAB del repositorio FileExchange de MathWorks son, en principio, compatibles con Octave. Sin embargo, si bien los usuarios suelen proporcionarlos y cargarlos bajo una licencia BSD de código abierto compatible con Octave , las Condiciones de uso de FileExchange prohíben cualquier uso que no sea el MATLAB propietario de MathWorks . [31] [32] [33]

Compatibilidad de sintaxis

Hay algunas adiciones de sintaxis menores, aunque intencionadas Archivado el 26 de abril de 2012 en Wayback Machine :

  1. Las líneas de comentarios pueden tener como prefijo el carácter # así como el carácter %;
  2. Se admiten varios operadores basados ​​en C ++ , -- , += , *=, /=;
  3. Se puede hacer referencia a elementos 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 comillas dobles " así como con el carácter de comillas simples ';
  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 único (MATLAB en el dominio doble ), lo que es más rápido pero da resultados menos precisos;
  6. Los bloques también pueden terminarse 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 el indicador de Octave;
  8. Presencia de un bucle do-until (similar a do-while en C).

Compatibilidad de funciones

Muchas de las numerosas funciones de MATLAB, pero no todas, están disponibles en GNU Octave, y algunas de ellas son 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 de marzo de 2024 en Wayback Machine .

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

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

 octave : 1 >  guía  advertencia :  la  función 'guía'  aún no está implementada en Octave       Lea  < http://www.octave.org/missing.html > para saber cómo puede contribuir con la funcionalidad faltante . error : ' guide ' undefined 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 . Está disponible desde Octave 3.8, [34] y se ha convertido 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. [35]

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

Aplicaciones GUI

Con el código de Octave, el usuario puede crear aplicaciones 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

# crea una figura y un panel sobre ella f  =  figure ; # crea un botón (estilo predeterminado) b1  =  uicontrol  ( f ,  "string" ,  "A Button" ,  "position" ,[ 10  10  150  40 ]); # crea un control de edición e1  =  uicontrol  ( f ,  "style" ,  "edit" ,  "string" ,  "editable text" ,  "position" ,[ 10  60  300  40 ]); # crea una casilla de verificación c1  =  uicontrol  ( f ,  "style" ,  "checkbox" ,  "string" ,  "a checkbox" ,  "position" ,[ 10  120  150  40 ]);

Cuadro de texto

prompt  =  { "Ancho" ,  "Alto" ,  "Profundidad" }; valores predeterminados  =  { "1,10" ,  "2,20" ,  "3,30" }; rowscols  =  [ 1 , 10 ;  2 , 20 ;  3 , 30 ]; dims  =  inputdlg  ( prompt ,  "Ingrese las dimensiones del cuadro" ,  rowscols ,  valores predeterminados );

Cuadro de lista con cuadros de mensajes.

mis_opciones  =  { "Un elemento" ,  "otro" ,  "otro más" }; [ sel ,  ok ]  =  listdlg  ( "ListString" ,  mis_opciones ,  "SelectionMode" ,  "Múltiple" ); if  ( ok  ==  1 )  msgbox  ( "Seleccionaste:" );  for  i  =  1 : numel  ( sel )  msgbox  ( sprintf  ( "\t%s" ,  mis_opciones { sel ( i )}));  endfor else  msgbox  ( "Canceló." ); endif

Botones de radio

# crea una figura y un panel sobre ella f  =  figure ; # crea un grupo de botones gp  =  uibuttongroup  ( f ,  "Posición" ,  [  0  0.5  1  1 ]) # crea botones en el grupo b1  =  uicontrol  ( gp ,  "estilo" ,  "botón de opción" ,  "cadena" ,  "Opción 1" ,  "Posición" ,  [  10  150  100  50  ]); b2  =  uicontrol  ( gp ,  "estilo" ,  "botón de opción" ,  "cadena" ,  "Opción 2" ,  "Posición" ,  [  10  50  100  30  ]); # crea un botón que no está en el grupo b3  =  uicontrol  ( f ,  "style" ,  "radiobutton" , "string" ,  "No está en el grupo" , "Posición" ,  [  10  50  100  50  ]);

Paquetes

Octave también tiene muchos paquetes disponibles. Esos paquetes se encuentran en Octave-Forge Octave Forge - Paquetes o Github Octave Packages. Cualquiera también puede crear y mantener paquetes.

Comparación con otros programas similares

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

Además, el lenguaje de programación Julia y sus capacidades de representación gráfica tienen similitudes con GNU Octave.

Véase también

Notas

  1. ^ GPL-3.0 o posterior desde 2007-10-12.
  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 fue lanzada el 4 de enero de 1993 y la versión 1.0 se lanzó el 17 de febrero de 1994."".
  3. ^ "Lanzamiento de GNU Octave 9.2.0". 7 de junio de 2024. Consultado el 10 de julio de 2024 .
  4. ^ "Edificio - Octave". wiki.octave.org . GNU . Consultado el 1 de mayo de 2018 .
  5. ^ "vasco, bielorruso, catalán, chino, holandé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. ^ "Lanzamiento de GNU Octave 8.4.0". octave.org . 2023-11-05 . Consultado el 2023-11-20 .
  8. ^ ab Eaton, John W. "Acerca de Octave" . Consultado 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. ^ ab "GNU Octave versión 4.0". www.gnu.org .
  13. ^ "Lanzamiento de GNU Octave 4.0.0". www.gnu.org . 29 de mayo de 2015.
  14. ^ "Lanzamiento de GNU Octave 4.0.1". www.gnu.org . 23 de marzo de 2016.
  15. ^ "Lanzamiento de GNU Octave 4.0.3". www.gnu.org . 2 de julio de 2016.
  16. ^ "GNU Octave versión 5". www.gnu.org .
  17. ^ "Lanzamiento de GNU Octave 6.1.0". www.gnu.org . 26 de noviembre de 2020.
  18. ^ "Lanzamiento de GNU Octave 7.1.0". www.gnu.org . 6 de abril de 2022.
  19. ^ "Lanzamiento de GNU Octave 8.1.0". octave.org . 7 de marzo de 2023.
  20. ^ "GNU Octave versión 9". octave.org . Consultado el 25 de marzo de 2024 .
  21. ^ "Los hallazgos sobre vulnerabilidades de los números de la Seguridad Social se basaron en supercomputación". 8 de julio de 2009. Archivado desde el original el 29 de febrero de 2012.
  22. ^ "Aceleración directa de GNU Octave". Blog para desarrolladores de NVIDIA . 5 de junio de 2014.
  23. ^ "GNU Octave - Control de subprocesos". 14 de noviembre de 2008. Archivado desde el original el 7 de enero de 2009. Consultado el 28 de enero de 2009 .
  24. ^ "GNU Octave" . Consultado el 28 de enero de 2009 .
  25. ^ "Resumen de los cambios importantes visibles para el usuario en la versión 3.2" . Consultado el 5 de enero de 2012 .
  26. ^ "Preguntas frecuentes: compatibilidad con MATLAB". Archivado desde el original el 21 de noviembre de 2011. Consultado el 4 de abril de 2009 .
  27. ^ "Preguntas frecuentes: Cómo obtener Octave". Archivado desde el original el 21 de noviembre de 2011. Consultado el 4 de abril de 2009 .
  28. ^ "Arriba (GNU Octave (versión 6.3.0))". octave.org .
  29. ^ "Octave para Android - Octave". wiki.octave.org . Consultado el 23 de agosto de 2021 .
  30. ^ Eaton, John W. "Dejar que Readline escriba por usted". Manual de referencia de GNU Octave . Archivado desde el original el 12 de febrero de 2018. Consultado el 29 de julio de 2016 .
  31. ^ "Preguntas frecuentes - Octave". wiki.octave.org . Consultado el 5 de diciembre de 2022 .
  32. ^ "Condiciones de uso de MATLAB Central". www.mathworks.com . Consultado el 5 de diciembre de 2022 .
  33. ^ "Preguntas frecuentes sobre licencias de intercambio de archivos" www.mathworks.com . Consultado el 5 de diciembre de 2022 .
  34. ^ "GNU Octave versión 3.8". www.gnu.org .
  35. ^ Hageman, Steve (7 de febrero de 2014). "GNU Octave alcanza una nota alta". EDN .
  36. ^ ab Trappenberg, Thomas (2010). Fundamentos de la neurociencia computacional . Oxford University Press. pág. 361. ISBN 978-0-19-956841-3.
  37. ^ Muhammad, A; Zalizniak, V (2011). Computación científica práctica . Woodhead Publishing . pág. 3. ISBN. 978-0-85709-226-7.
  38. ^ Megrey, Bernard A.; Moksness, Erlend (2008). Computadoras en la investigación pesquera . Springer Science & Business Media. pág. 345. ISBN 978-1-4020-8636-6.
  39. ^ 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.
  40. ^ 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.
  41. ^ Wouwer, Alain Vande; Saucez, Philippe; Vilas, Carlos (2014). Simulación de modelos de ecuaciones diferenciales ordinarias y parciales parciales con MATLAB, Octave y Scilab: aplicaciones científicas y de ingeniería . Springer. pp. 114–115. ISBN. 978-3-319-06790-2.
  42. ^ "FreeMat". freemat.sourceforge.net . Consultado el 22 de febrero de 2020 .

Lectura adicional

Enlaces externos