stringtranslate.com

Octava GNU

GNU Octave es un lenguaje de programación científico 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 mayoritariamente compatible con MATLAB . También se puede utilizar como lenguaje orientado a lotes . Como parte del Proyecto GNU , es software libre bajo los términos de la Licencia Pública General GNU .

Historia

El proyecto se concibió alrededor de 1988. [6] Al principio se pretendía que fuera un complemento de 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 lanzó 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 , ex profesor del autor principal. Levenspiel era conocido por su capacidad para realizar cálculos rápidos y sencillos . [8]

Historia del desarrollo

Desarrollos

Además de su uso en computadoras de escritorio para computación científica personal, Octave se usa en el mundo académico y 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. [41]

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

Detalles técnicos

Octava, el idioma

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 . [43] Sin embargo, no admite el paso de argumentos por referencia [44] aunque los argumentos de la función se copian en escritura para evitar duplicaciones innecesarias.

Los programas de octava constan de una lista de llamadas a funciones o un script . La sintaxis está basada en matrices y proporciona varias funciones para operaciones matriciales. Soporta diversas estructuras de datos y permite la programación orientada a objetos . [45]

Su sintaxis es muy similar a MATLAB y una programación cuidadosa de un script le permitirá ejecutarse tanto en Octave como en MATLAB. [46]

Debido a que Octave está disponible bajo la Licencia Pública General GNU , se puede cambiar, copiar y utilizar 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 . [47] [48] [49]

Características notables

Completar comandos y nombres de variables

Escribir un carácter TAB en la línea de comando hace que Octave intente completar nombres de variables, funciones y archivos (similar a la finalización de tabulación de Bash ). Octave usa el texto antes del cursor como la parte inicial del nombre para completar. [50]

Historial de comandos

Cuando se ejecuta de forma interactiva, Octave guarda los comandos escritos en un búfer interno para poder recuperarlos y editarlos.

Estructuras de datos

Octave incluye una cantidad limitada de soporte 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 . un  =  1 ;  X . segundo  =  [ 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  =  octava de cuerda : 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 en 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 operadores de incremento y decremento tipo C ++y --en sus formas de prefijo y postfijo. Octave también realiza asignaciones aumentadas , por ejemplo x += 5.

Relajarse-proteger

Octave admite una forma limitada de manejo de excepciones modelada a partir de unwind_protect de Lisp . La forma general de un bloque unwind_protect se ve así:

unwind_protect  cuerpo unwind_protect_cleanup  limpieza end_unwind_protect

Como regla general, GNU Octave reconoce como terminación de una determinada blockpalabra clave end(que es compatible con el lenguaje MATLAB) o una palabra clave más específica o, en algunos casos, . Como consecuencia, un bloque se puede terminar con la palabra clave como en el ejemplo o con la palabra clave más portátil .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 excepción_manejo final  

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

Listas de argumentos de longitud variable

Octave tiene un mecanismo para manejar funciones que toman un número no especificado de argumentos sin un 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 ; else s = varargin { 1 } + más ( varargin { 2 : nargin }); fin fin               

Listas de devolución de longitud variable

Se puede configurar una función para devolver cualquier número 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 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 rand([10,1]):

#include <octava/oct.h> ... NumRands de Vector de columna ( 2 ); NumRands ( 0 ) = 10 ; NúmRands ( 1 ) = 1 ; lista_valor_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 archivos MEX compatibles con MATLAB .

Compatibilidad con matlab

Octave se creó teniendo en cuenta la compatibilidad con MATLAB y comparte muchas características con MATLAB:

  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 adecuada y compatible con Octave , los Términos de uso de FileExchange prohíben cualquier uso además de MATLAB, propiedad de MathWorks. [51] [52] [53]

Compatibilidad de sintaxis

Hay algunas adiciones de sintaxis útiles, aunque menores:

  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 simple (MATLAB en dominio doble ), que es más rápido pero da resultados menos precisos;
  6. Los bloques también se pueden terminar con palabras clave de estructura de control más específicas , es decir, endif, endfor, end while, etc.;
  7. Las funciones se pueden definir dentro de scripts y en el indicador de Octave;
  8. Presencia de un bucle hacer hasta (similar a hacer mientras en C).

Compatibilidad de funciones

Muchas, pero no todas, 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.

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:

 octava : 1 >  advertencia de guía  : la función 'guía' aún no está implementada en Octave          Por favor  lea  < http : // www . octava . org / falta . html >  para  aprender  cómo  puedes  contribuir con  la funcionalidad que falta . error : 'guía' indefinida 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, [17] y se ha convertido en la interfaz predeterminada (a través de la interfaz de línea de comandos ) con el lanzamiento de Octave 4.0. [20] Fue bien recibido por un colaborador de EDN, quien escribió "[Octave] ahora tiene una GUI muy funcional" al revisar la entonces nueva GUI en 2014. [54]

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

aplicaciones GUI

Con el código 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

# crear figura y panel en ella f  =  figura ; # crear un botón (estilo predeterminado) b1  =  uicontrol  ( f ,  "string" ,  "A Button" ,  "position" ,[ 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 ]);

Caja de texto

indicador  =  { "Ancho" ,  "Alto" ,  "Profundidad" }; valores predeterminados  =  { "1.10" ,  "2.20" ,  "3.30" }; filascols  =  [ 1 , 10 ;  2 , 20 ;  3 , 30 ]; dims  =  inputdlg  ( mensaje ,  "Ingresar dimensiones del cuadro" ,  filas ,  valores predeterminados );

Cuadro de lista con cuadros de mensajes.

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

Botones de radio

# crear figura y panel en ella f  =  figura ; # crear un grupo de botones gp  =  uibuttongroup  ( f ,  "Position" ,  [  0  0.5  1  1 ]) # crear un botón en el grupo b1  =  uicontrol  ( gp ,  "style" ,  "radiobutton" ,  "string" ,  "Choice 1 " ,  "Posición" ,  [  10  150  100  50  ]); b2  =  uicontrol  ( gp ,  "estilo" ,  "botón de radio" ,  "cadena" ,  "Elección 2" ,  "Posición" ,  [  10  50  100  30  ]); # crear un botón que no esté en el grupo b3  =  uicontrol  ( f ,  "estilo" ,  "botón de radio" , "cadena" ,  "No 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 Paquetes Github Octave. También es posible que cualquiera cree y mantenga paquetes.

Comparación con otro software similar

Otras alternativas gratuitas a MATLAB incluyen Scilab y FreeMat . [55] [56] [57] [58] Octave es más compatible con MATLAB que Scilab, [55] [59] [60] y FreeMat no se ha actualizado desde junio de 2013. [61]

Ver también

Notas

  1. ^ GPL-3.0 o posterior desde el 12 de octubre de 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). "colaboradores.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 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 8.4.0". 5 de noviembre de 2023.
  4. ^ "Edificio - Octava". wiki.octave.org . GNU . Consultado el 1 de mayo de 2018 .
  5. ^ "Alemán, español, francés, húngaro, vasco, bielorruso, catalán, chino, holandés, inglés, italiano, japonés, letón, portugués (Brasil), portugués (Portugal), ruso, turco, ucraniano". hg.savannah.gnu.org .
  6. ^ "Acerca de GNU Octave". www.gnu.org . GNU . Consultado el 1 de mayo de 2018 .
  7. ^ ab "Lanzamiento de GNU Octave 8.4.0". octava.org . 2023-11-05 . Consultado el 20 de noviembre de 2023 .
  8. ^ ab Eaton, John W. "Acerca de Octave" . Consultado el 28 de junio de 2009 .
  9. ^ "GNU Octava Versión 1". www.gnu.org .
  10. ^ "GNU Octava Versión 2". www.gnu.org .
  11. ^ "Archivo de noticias". www.gnu.org . 31 de diciembre de 2012.
  12. ^ "GNU Octava Versión 3". www.gnu.org .
  13. ^ "GNU Octava Versión 3.2". www.gnu.org .
  14. ^ "GNU Octava Versión 3.4". www.gnu.org .
  15. ^ "GNU Octava Versión 3.6". www.gnu.org .
  16. ^ "Lanzamiento de GNU Octave 3.6.4". www.gnu.org . 21 de febrero de 2013.
  17. ^ ab "GNU Octave versión 3.8". www.gnu.org .
  18. ^ "Lanzamiento de GNU Octave 3.8.0". www.gnu.org . 31 de diciembre de 2013.
  19. ^ "Lanzamiento de GNU Octave 3.8.1". www.gnu.org . 4 de marzo de 2014.
  20. ^ ab "GNU Octave versión 4.0". www.gnu.org .
  21. ^ "Lanzamiento de GNU Octave 4.0.0". www.gnu.org . 29 de mayo de 2015.
  22. ^ "Lanzamiento de GNU Octave 4.0.1". www.gnu.org . 23 de marzo de 2016.
  23. ^ "Lanzamiento de GNU Octave 4.0.3". www.gnu.org . 2 de julio de 2016.
  24. ^ "Lanzamiento de GNU Octave 4.2.0". 14 de noviembre de 2016.
  25. ^ "GNU Octava Versión 4.2". www.gnu.org .
  26. ^ "Lanzamiento de GNU Octave 4.2.1". www.gnu.org . 24 de febrero de 2017.
  27. ^ "Lanzamiento de GNU Octave 4.2.2". www.gnu.org . 13 de marzo de 2018.
  28. ^ "GNU Octava Versión 4.4". www.gnu.org .
  29. ^ "Lanzamiento de GNU Octave 4.4.0". www.gnu.org . 30 de abril de 2018.
  30. ^ "Lanzamiento de GNU Octave 4.4.1". www.gnu.org . 9 de agosto de 2018.
  31. ^ "GNU Octava Versión 5". www.gnu.org .
  32. ^ "Lanzamiento de GNU Octave 5.2.0". www.gnu.org . 31 de enero de 2020.
  33. ^ "Lanzamiento de GNU Octave 6.1.0". www.gnu.org . 26 de noviembre de 2020.
  34. ^ "Lanzamiento de GNU Octave 6.2.0". www.gnu.org . 20 de febrero de 2021.
  35. ^ "Lanzamiento de GNU Octave 7.1.0". www.gnu.org . 6 de abril de 2022.
  36. ^ "Lanzamiento de GNU Octave 7.2.0". octava.org . 28 de julio de 2022.
  37. ^ "Lanzamiento de GNU Octave 7.3.0". octava.org . 2 de noviembre de 2022.
  38. ^ "Lanzamiento de GNU Octave 8.1.0". octava.org . 7 de marzo de 2023.
  39. ^ "Lanzamiento de GNU Octave 8.2.0". octava.org . 13 de abril de 2023.
  40. ^ "Lanzamiento de GNU Octave 8.3.0". octava.org . 8 de agosto de 2023.
  41. ^ "Los hallazgos de vulnerabilidad del número de seguridad social se basaron en supercomputación". 8 de julio de 2009. Archivado desde el original el 29 de febrero de 2012.
  42. ^ "Aceleración directa de GNU Octave". Blog para desarrolladores de NVIDIA . 5 de junio de 2014.
  43. ^ "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 .
  44. ^ "Octava GNU" . Consultado el 28 de enero de 2009 .
  45. ^ "Resumen de cambios importantes visibles para el usuario para la versión 3.2" . Consultado el 5 de enero de 2012 .
  46. ^ "Preguntas frecuentes: compatibilidad con MATLAB". Archivado desde el original el 21 de noviembre de 2011 . Consultado el 4 de abril de 2009 .
  47. ^ "Preguntas frecuentes: obtener octava". Archivado desde el original el 21 de noviembre de 2011 . Consultado el 4 de abril de 2009 .
  48. ^ "Arriba (GNU Octave (versión 6.3.0))". octava.org .
  49. ^ "Octava para Android - Octava". wiki.octave.org . Consultado el 23 de agosto de 2021 .
  50. ^ Eaton, John W. "Dejar que Readline escriba por usted". Manual de referencia de GNU Octave .
  51. ^ "Preguntas frecuentes: Octava". wiki.octave.org . Consultado el 5 de diciembre de 2022 .
  52. ^ "Términos de uso de MATLAB Central". www.mathworks.com . Consultado el 5 de diciembre de 2022 .
  53. ^ "Preguntas frecuentes sobre licencias de intercambio de archivos". www.mathworks.com . Consultado el 5 de diciembre de 2022 .
  54. ^ Hageman, Steve (7 de febrero de 2014). "GNU Octave alcanza una nota alta". EDN .
  55. ^ ab Trappenberg, Thomas (2010). Fundamentos de la Neurociencia Computacional . Prensa de la Universidad de Oxford. pag. 361.ISBN _ 978-0-19-956841-3.
  56. ^ Mahoma, A; Zalizniak, V (2011). Computación Científica Práctica . Publicación Woodhead . pag. 3.ISBN _ 978-0-85709-226-7.
  57. ^ Megrey, Bernard A.; Moksness, Erlend (2008). Computadoras en la investigación pesquera . Medios de ciencia y negocios de Springer. pag. 345.ISBN _ 978-1-4020-8636-6.
  58. ^ Kapuno, Raúl Raymond (2008). Programación para ingenieros químicos que utilizan C, C++ y MATLAB . Editores Jones y Bartlett. pag. 365.ISBN _ 978-1-934015-09-4.
  59. ^ Herman, Russell L. (2013). Un curso de métodos matemáticos para físicos . Prensa CRC. pag. 42.ISBN _ 978-1-4665-8467-9.
  60. ^ Vaya, 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 . Saltador. págs. 114-115. ISBN 978-3-319-06790-2.
  61. ^ "FreeMat". freemat.sourceforge.net . Consultado el 22 de febrero de 2020 .

Otras lecturas

enlaces externos