Octava GNU

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Lenguaje de programación de análisis numérico

GNU Octave es un lenguaje de programación de alto nivel diseñado principalmente para computación científica y computación numérica. Octave ayuda a resolver numéricamente problemas lineales y no lineales, y para realizar otros experimentos numéricos utilizando un lenguaje que es en su mayoría compatible con MATLAB. También se puede utilizar como un 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. Al principio, estaba destinado a ser 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 7.1.0 se lanzó el 6 de abril de 2022.

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 al dorso del sobre.

Historial de desarrollo

HoraMedida
1988/1989Primeras discusiones (Libro y Software)
Febrero de 1992Inicio del desarrollo
Enero de 1993Noticias en Web (Versión 0.60)
Febrero de 1994Primera publicación (Versión 1.0.0 a 1.1.1)
Diciembre de 1996Segunda publicación (Version 2.0.x) con Puerto de Windows (Cygwin)
Marzo de 1998Versión 2.1
Noviembre de 2004Versión 2.9 (versión de 3.0)
Diciembre de 2007Publicación de la versión 3.0 (Milestone)
Junio de 2009Publicación de la versión 3.2 (Milestone)
8 de febrero de 2011Versión 3.4.0 (Milestone)
22 de febrero de 2012Publicación de Octave 3.6.1 (Milestone)
31 de diciembre de 2013Publicación de Octave 3.8.0 (GUI experimental)
29 de mayo de 2015Versión 4.0.0 (Stable GUI and new Syntax for OOP)
14 noviembre 2016Versión 4.2.0 (gnuplot 4.4+)
30 de abril de 2018Versión 4.4.0 (nuevo Objetivo para GUI QT Toolkit, el kit de herramientas FLTK no está deprecatado y no hay calendario para su eliminación - mientras que ya no se prioriza)
1 marzo 2019Publicación de Octave 5.1.0 (QT5 preferido, Qt 4.8 mínimo), soporte hiDpi
31 de enero de 2020Publicación de Octave 5.2.0 (QT5 preferido)
26 de noviembre de 2020Publicación de Octave 6.1.0 (QT5 prefirió, Qt 4.x deprecated para eliminar en 7)
20 de febrero de 2021Publicación de Octave 6.2.0 (QT5 preferido), Bugfix, mejora el soporte de sintaxis matlab
6 de abril de 2022Publicación de Octave 7.1.0 (QT5 preferido), mejora de la compatibilidad de la función de backend gráfico y matlab
28 de julio de 2022Publicación de Octave 7.2.0 (QT5 preferido), versión de corrección de errores
02 Nov 2022Publicación de Octave 7.3.0 (QT5 preferido), versión de corrección de errores

Desarrollos

Además de usarse en computadoras de escritorio para computación científica personal, Octave se usa en la academia y la industria. Por ejemplo, Octave se usó en una computadora paralela masiva en el Centro de Supercomputación de Pittsburgh para encontrar vulnerabilidades relacionadas con adivinar números de seguro social.

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

Detalles técnicos

  • Octave está escrito en C++ usando la biblioteca estándar C++.
  • Octave usa un intérprete para ejecutar el lenguaje de scripting Octave.
  • Octave es extensible usando módulos cargables dinámicamente.
  • El intérprete Octave tiene un motor gráfico basado en OpenGL para crear diagramas, gráficos y gráficos y para guardarlos o imprimirlos. Alternativamente, gnuplot se puede utilizar para el mismo propósito.
  • Octave incluye una interfaz gráfica de usuario (GUI) además de la interfaz tradicional de línea de comandos (CLI); vea interfaces #User para más detalles.

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. Sin embargo, no admite el paso de argumentos por referencia, aunque los argumentos de función se copian al escribir para evitar duplicaciones innecesarias.

Los programas de 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. Soporta varias estructuras de datos y permite la programación orientada a objetos.

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

Debido a que Octave está disponible bajo la Licencia Pública General GNU, se puede cambiar, copiar y usar libremente. El programa se ejecuta en Microsoft Windows y en la mayoría de los sistemas operativos Unix y similares a Unix, incluidos Linux, Android y macOS.

Características notables

Completar nombre de comando y variable

Escribir un carácter TAB en la línea de comando hace que Octave intente completar los 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.

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 soporte 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):

octavo:1 x.a = 1; x.b = [1, 2; 3, 4]; x.c = "Estring";octavo:2 x.aans = 1octavo:3 x.bans = 1 2 3 4octavo:4 x.cans = cuerdaoctavo:5 xx ={} a = 1 b = 1 2 3 4 c = cuerda}

Operadores booleanos de cortocircuito

Los operadores lógicos && y || de Octave se evalúan en forma 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 los operadores de incremento y decremento tipo C ++ y -- en sus formas de prefijo y posfijo. Octave también realiza asignaciones aumentadas, p. x += 5.

Desenrollar-proteger

Octave admite una forma limitada de manejo de excepciones modelada según el unwind_protect de Lisp. La forma general de un bloque unwind_protect se ve así:

unwind_protect cuerpounwind_protect_cleanup limpiezaend_unwind_protect

Como regla general, GNU Octave reconoce como terminación de un bloque ya sea la palabra clave end (que es compatible con el lenguaje MATLAB) o una palabra clave más específica end_block. Como consecuencia, un bloque unwind_protect se puede terminar con la palabra clave end_unwind_protect como en el ejemplo, o con la palabra clave más portátil end.

La parte de limpieza del bloque siempre se ejecuta. En caso de que la parte body genere una excepción, cleanup 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):

Prueba cuerpocaptura exception_handlingfinal

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

Listas de argumentos de longitud variable

Octave tiene un mecanismo para manejar funciones que toman un número no especificado de argumentos sin límite superior explícito. Para especificar una lista de cero o más argumentos, use el argumento especial varargin como último (o único) argumento en la lista.

función s = más ()varargin) si ()nargin==0) s = 0; más s = varargin{}1} + más ()varargin{}2:nargin}); finalfinal

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 ()datos) para k=1:nargout varargout{}k} = datos(:k); finalfinal

Integración con 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...ColumnaVector Números()2);Números()0) = 10;Números()1) = 1;octave_value_list f_arg, F_ret;f_arg()0) = octave_value()Números);F_ret = feval()"Rand", f_arg, 1);Matriz unis()F_ret()0).matriz_valor());

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 creó teniendo en cuenta la compatibilidad con MATLAB y comparte muchas funciones con MATLAB:

  1. Matrices como tipo de datos fundamental.
  2. Soporte integrado para números complejos.
  3. Potentes funciones de matemáticas incorporadas y extensas 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.

Scripts de MATLAB de MathWorks' Los repositorios de FileExchange en principio son compatibles con Octave. Sin embargo, aunque los usuarios suelen proporcionarlos y cargarlos con 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 MathWorks' MATLAB patentado.

Compatibilidad de sintaxis

Hay algunas adiciones de sintaxis intencionadas, aunque menores:

  1. Las líneas de comentario pueden ser prefijadas con el carácter # y el carácter %;
  2. Se admiten varios operadores basados en C ++, --, +=, *=, /=;
  3. Los elementos pueden ser referenciados sin crear una nueva variable por indexación cascada, por ejemplo [1:10](3);
  4. Las cuerdas se pueden definir con el carácter de doble frase, así como con el carácter de una sola frase;
  5. Cuando el tipo variable es único (número de punto flotante de una sola precisión), Octave calcula el "medio" en el dominio único (MATLAB en doble dominio) que es más rápido pero da resultados menos precisos;
  6. Los bloques también pueden terminarse con palabras clave más específicas de la estructura de control, es decir, endif, endfor, endtime, etc.;
  7. Las funciones pueden definirse dentro de los scripts y en el prompt Octave;
  8. Presencia de un bucle do-until (similar a hacer-mientras 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.

Se incluye una lista de funciones no disponibles en la función de octava __no implementada.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:

 octavo:1 guía advertencia: el 'guide ' función es no aún aplicadas dentro Octave Por favor. leído .http://://www.octavo.org/desaparecido.html a aprender cómo  puede contribución desaparecido funcionalidad. error: 'guide ' indefinidos cerca 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 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. Fue bien recibido por un colaborador de EDN, quien escribió "[Octave] ahora tiene una GUI muy funcional" en la revisión de la entonces nueva GUI en 2014.

También se han desarrollado varias interfaces gráficas de terceros, como ToolboX para la educación en programació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 ellaf = gráfico;# crear un botón (estilo predeterminado)b1 = uicontrol ()f, "Estring", "Un botón", "posición",[10 10 150 40]);# Crear un control de edicióne1 = uicontrol ()f, "estilo", "edit", "Estring", "texto editable", "posición",[10 60 300 40]);# Crear una casilla de verificaciónc1 = uicontrol ()f, "estilo", "checkbox", "Estring", "una casilla de verificación", "posición",[10 120 150 40]);

Cuadro de texto

pronta = {}"Width", "Altura", "Depth"};defaults = {}"1.10", "2.20", "3.30"};rowscols = [1,10; 2,20; 3,30];dims = inputdlg ()pronta, "Enter Box Dimensiones", rowscols, defaults);

Cuadro de lista con cuadros de mensaje.

my_options = {}"Un artículo", "otro", "No otro"};[Sel, Ok] = listdlg ()"ListString", my_options, "SelectionMode", "Multiple");si ()Ok == 1) msgbox ()"Seleccionó:"); para i = 1:numel ()Sel) msgbox ()sprintf ()", my_options{}Sel()i)}) endformás msgbox ()"Has cancelado".);endif

Botones de radio

# crear figura y panel en ellaf = gráfico;# crear un grupo de botonesgp = uibuttongroup ()f, "Position", [ 0 0.5 1 1])# crear botones en el grupob1 = uicontrol ()gp, "estilo", "radiobutton", "Estring", "Choice 1", "Position", [ 10 150 100 50 ]);b2 = uicontrol ()gp, "estilo", "radiobutton", "Estring", "Choice 2", "Position", [ 10 50 100 30 ]);# crear un botón no en el grupob3 = uicontrol ()f, "estilo", "radiobutton","Estring", "No en el grupo","Position", [ 10 50 100 50 ]);

Paquetes

Octave también tiene muchos paquetes disponibles. Esos paquetes se encuentran en Octave-Forge Octave Forge - Packages o Github Octave Packages. También es posible que cualquier persona cree y mantenga paquetes.

Comparación con otro software similar

Otras alternativas gratuitas a MATLAB incluyen Scilab y FreeMat. Octave es más compatible con MATLAB que Scilab y FreeMat no se ha actualizado desde junio de 2013.

Contenido relacionado

XPCOM

Submarino clase Trafalgar

Recuperación de información

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