Usuario:Viferico/Taller-Octave
GNU Octave es un software que ofrece un lenguaje de programación de alto nivel, pensado principalmente para computaciones numéricas. Proporciona una Interfaz de línea de comandos para dar soluciones tanto a problemas lineales como a no lineales, y para resolver otros muchos problemas en un lenguaje compatible con MATLAB. También puede ser utilizado como un lenguaje de procesado por lotes. Es parte del Proyecto GNU, es software libre bajo los términos de la licencia GNU.
Octave es una de las alternativas a Matlab de software libre más conocidas, siendo otra de ellas Scilab.[1][2][3][4] Sin embargo, Scilab no está pensado para ser tan compatible con el lenguaje Matlab, cosa que Octave hace específicamente.[1][5][6]
Historia
[editar]El proyecto fue concebido alrededor de 1988. Al principio fue diseñado para acompañar el diseño de un reactor químico. El desarrollo real estuvo lo empezó John W. Eaton en 1992. La primera liberación de software en estado alfa se remonta al 4 de enero de 1993 y el 17 de febrero de 1994, la versión 1.0 se lanzó. La más reciente, la 4.0.0 se lanzó el 29 de mayo de 2015.
El autor del programa se inspiró en Octave Levenspiel, un profesor suyo anterior que era conocido por su habilidad de hacer cálculos rápidos [7]
Desarrollos
[editar]Además del uso en ordenadores de escritorio para hacer cálculos científicos personales, Octave se usa tanto en las universidades como en la industria. Por ejemplo, Octave se ha usado en un supercomputador paralelo en Pittsburgh para encontrar las vulnerabilidades relacionadas con adivinar números de la seguridad social.[8]
Detalles técnicos
[editar]- Octave está escrito en C++ utilizando la biblioteca estándar de C++.
- Octave utiliza un intérprete para ejecutar el lenguaje de Script Octave.
- Octave puede ser ampliado con la carga dinámica de módulos.
- El intérprete de Octave es capaz de funcionar con gnuplot y Grace para crear gráficas y grafos, ya sea para guardarlos o imprimirlos.
- Las versiones posteriores de Octave 3.8.0 incluían una Interfaz de Usuario Gráfica (GUI) además de la Interfaz de línea de comandos tradicional (CLI).
El lenguaje Octave
[editar]El lenguaje Octave es un lenguaje de programación interpretado . Es un lenguaje de programación estructurado (similar a C) y soporta muchas funciones de la biblioteca biblioteca estándar de C, así como llamadas al sistema operativo UNIX.[9] A pesar de todo, el lenguaje no soporta el paso de argumentos por referencia.[10]
Los programas de Octave consisten en una lista de llamadas a funciones que se conoce como Script. La sintaxis se basa principalmente en operaciones matriciales, y soporta una amplia variedad de funciones para trabajar con ellas. Soporta varios tipos de estructuras de datos y permite la programación orientada a objetos.[11]
Su sintaxis es muy similar a MATLAB, y si se programa adecuadamente es posible ejecutar un mismo script tanto en Matlab como en Octave.[12]
Octave es Software Libre, liberado bajo la licencia GPL, así que puede ser libremente distribuido, copiado y usado.[7] El programa corre en Microsoft Windows y la mayoría de sistemas operativos estilo Unix, incluyendo GNU/Linux y OS X.[13]
Características notables
[editar]Autocompletado de comandos y variables
[editar]Pulsando el tabulador en la línea de comandos, Octave intentará completar el nombre de la variable, de una función o de un nombre de archivo, de forma similar a como funciona el autocompletado de Bash. Octave usa el texto antes del cursor para completar el nombre.
Historial de comandos
[editar]Cuando el programa se ejecuta interactivamente, Octave guarda los comandos escritos en un búfer interno para poder acceder a ellos fácilmente y editarlos.
Estructuras de datos
[editar]Octave incluye soporte para organizar los datos en estructuras. En el ejemplo de abajo podemos observar una estructura "x" con los elementos "a", "b" y "c" respectivamente (un entero, un vector y una cadena, respectivamente).
Operadores booleanos lógicos
[editar]Los operadores lógicos (&&
, ||
) se evalúan de forma mínima, al igual que ocurre en otros lenguajes de programación como C o Bash. De esta forma, el segundo argumento de la operación se evalúa sólo si con el primero no se satisface la condición.
También existen los operadores de bit (o de elemento a elemento): &
y |
.
Operadores de incremento y decremento
[editar]Octave incluye los operadores de incremento (++
) y decremento (--
) en ambas formas: de prefijo y sufijo, funcionando de la misma forma a la que se evalúa en C.
Excepciones
[editar]Octave soporta una limitada forma de manejo de excepciones, que se modelan siguiendo el 'unwind_protect' de Lisp. La forma general de un bloque de excepciones es de este tipo: como regla general, GNU Octave reconoce el final de un bloque tanto con la palabra clave 'end' (que es compatible con Matlab) como con una palabra clave más concreta como 'end_unwind_protect'. De esta forma un bloque 'unwind_protect' se puede terminar con la palabra 'end_unwind_protect' (como en el ejemplo), o con una palabra más portable como 'end'.
La parte del bloque que pone "limpieza" se ejecuta siempre. En caso de que la parte del cuerpo lanze una excepción, el código en 'limpieza' se ejecutará antes de propagar la excepción fuera del bloque 'unwind_protect'.
GNU Octave soporta también una forma de manejo de excepciones más común, y que además es compatible con Matlab: Esta forma difiere de la anterior en dos aspectos clave. El primero, que el bloque 'manejo_excepcion' se ejecuta sólo cuando una excepción se genere en 'cuerpo'. El segundo, que después de la ejecución de 'manejo_excepcion' la excepción no se propaga fuera del bloque a menos que se fuerze a ello con la orden 'rethrow( lasterror)'.
Argumentos de longitud variable
[editar]Octave tiene un mecanismo para manejar funciones que tendrán un número indeterminado de argumentos. Para especificar una lista de cero o más argumentos, existe el argumento especial 'varargin'. Debe figurar como últimoo (o único) argumento.
Valor de retorno de longitud variable
[editar]Una función puede devolver una lista de valores de longitud variable usando el valor de retorno especial varargout
. Por ejemplo:
Integración con C++
[editar]También es posible ejecutar código de Octave directamente en un programa escrito en C++. Por ejemplo, en este fragmento de código se llama a la función rand([10,1]): El código escrito en C o en C++ puede ejecutarse con Octave creando archivos .oct, o bien el homólogo compatible con Matlab: los archivos MEX
Compatibilidad con Matlab
[editar]Octave se ha creado pensando siempre en ser compatible con Matlab, y por ello tiene muchas características en común con él:
- Matrices como tipo de dato fundamental.
- Soporte para números complejos integrado.
- Potemtes funciones matemáticas y gran cantidad de funciones de biblioteca.
- Extensibilidad en el sentido de funciones definidas por el usuario
De hecho, la incompatibilidad de Octave con Matlab está considerada como un bug eotus v.[14] y por ello puede ser considerado un clon de software, que no infrinje el copyriycht por software por el caso Lotus v. Borland.
Compatibilidad de sintaxis
[editar]Hay algunos añadidos a la sintaxis:
- Los comentarios pueden comenzar por el carácter # o por %.
- Soporte para los operadores de la familia C: ++, --, +=, *=, /=.
- Pueden referenciarse elementos sin crear una variable nueva debido al indexado en cascada.
- El tipo string puede definirse tanto con comilla simple o por comilla doble: ' o ".
- Cuándo el tipo variable es solo, la octava calcula el "malo" en el solo-ámbito (Matlab en doble-ámbito) cuál es más rápido pero da menos resultados cuidadosos.
- Los bloques también pueden ser rescindidos con Control más concreto palabras clave de estructura, i.e., endif, endfor, endwhile, etc.
- Las funciones pueden ser definidas dentro de guiones y en la Octava puntual.
- Todos los operadores actúan automáticos retransmitiendo o singleton expansión.
- Presencia de un -hasta que bucle (similar de hacer-mientras en C).
Compatibilidad de funciones
[editar]Muchas de las numerosas funciones de MATLAB están disponibles en Octave, algunas pueden usarse con paquetes como Octave-forge, pero, ciertamente, no todas las funciones de Matlab están en Octave. Existen listas de funciones no disponibles en Octave, y los desarrolladores están tratando de buscar ayuda para implementarlas. Si buscas la función __unimplemented.m__, te lleva a la lista de funciones sin implementar
Las funciones sin implementar se encuentran ordenadas por paquetes: Imagen, Mapeo, Optimización, Señal, y Estadística.
Cuando se llama a una función sin implementar, aparece el siguiente error:
octave:1> quad2d atención: quad2d no está implementada. Considera usar dblquad. Por favor, lea <http://www.octave.org/missing.html> para saber más sobre cómo puedes ayudar a funcionalidades que faltan atención: llamado desde __unimplemented__ en linea 523 columna 5 error: 'quad2d' sin definir near linea 1 columna 1
Interfaces de usuario
[editar]Hasta la versión 3.8, Octave no venía con una interfaz gráfica por defecto. Apareció de forma no oficial en esa versión a modo de prueba[15], aunque se ha convertido en el modo por defecto en la versión 4.0[16].
También se han desarrollado algunas interfaces de terceros, que con la llegada de forma oficial en la 4.0 se han ido.
Véase también
[editar]Referencias
[editar]- ↑ a b Trappenberg, Thomas (2010).
- ↑ Muhammad, A; Zalizniak, V (2011).
- ↑ Megrey, Bernard A.; Moksness, Erlend (2008).
- ↑ Kapuno, Raul Raymond (2008).
- ↑ Herman, Russell L. (2013).
- ↑ Wouwer, Alain Vande; Saucez, Philippe; Vilas, Carlos (2014).
- ↑ a b Eaton, John W. "About Octave".
- ↑ "Social Security Number Vulnerability Findings Relied on Supercomputing". 8 de julio de 2009.
- ↑ "GNU Octave - Controlling subprocesses". 14 de noviembre de 2008.
- ↑ "GNU Octave".
- ↑ "Summary of important user-visible changes for version 3.2".
- ↑ "FAQ: MATLAB compatibility".
- ↑ "FAQ: Getting Octave".
- ↑ "GNU Octave - Bugs: Submit Item [Savannah]".
- ↑ "Summary of important user-visible changes for version 3.8".
- ↑ "Summary of important user-visible changes for version 4.0".
[[Categoría:Software libre multiplataforma]] [[Categoría:Software educativo libre]] [[Categoría:Software libre programado en C++]] [[Categoría:Software del Proyecto GNU]] [[Categoría:Paquetes de software estadístico]]