GNU Octave es un proyecto de software de línea de comandos de código abierto y distribución libre que tiene como objetivo proporcionar un lenguaje de alto nivel potente, fácil de usar y extensible que se puede usar para manejar cálculos numéricos .
Se puede usar para resolver numéricamente problemas lineales y no lineales
El software se puede usar para resolver numéricamente problemas lineales y no lineales, así como para realizar varios experimentos numéricos. Es compatible con Matlab, un entorno informático numérico de múltiples paradigmas, y puede utilizarse como un lenguaje orientado a lotes.
Además, GNU Octave ofrece varias utilidades que le permiten resolver problemas comunes de álgebra lineal, manipular polinomios, integrar funciones ordinarias, descubrir las raíces de ecuaciones no lineales, así como integrar ecuaciones diferenciales-algebraicas y diferenciales ordinarias.
Puede usar módulos cargados dinámicamente o funciones definidas por el usuario para extender GNU Octave. Estos pueden escribirse en el propio lenguaje de programación de Octave o en C, C ++, Fortran, etc.
Comenzando con GNU Octave
Hay dos métodos disponibles para instalar GNU Octave en un sistema operativo GNU / Linux. El primero es el más fácil e implica la búsqueda de la & ldquo; octava & rdquo; paquete en la aplicación de Software Center (por ejemplo, administrador de paquetes Synaptic) de su distribución.
El segundo método lo ayudará a instalar la última versión del producto, pero implica la ejecución de comandos en un emulador de terminal. Si no está satisfecho con esto, descargue el paquete fuente más reciente desde Softoware o desde la página principal oficial del proyecto (vea el enlace al final del artículo), guárdelo en su PC y descomprímalo.
Abra una aplicación de emulador de terminal, ejecute el & lsquo; cd & rsquo; comando seguido de la ruta a la ubicación de los archivos de archivo extraídos (por ejemplo, cd /home/softoware/octave-3.8.2), ejecute & lsquo; ./ configure & amp; & amp; hacer y rsquo; comando para configurar y compilar el programa, y luego ejecutar el & lsquo; sudo make install & rsquo; comando para instalarlo. Úselo desde la interfaz de línea de comandos ejecutando la & lsquo; octava & rsquo; comando.
Debajo del capó
Echando un vistazo bajo el capó del programa Octave de GNU, podemos observar que está escrito completamente en el lenguaje de programación C ++. Lo hemos instalado en varias distribuciones de GNU / Linux, incluyendo Arch Linux y Ubuntu utilizando las instrucciones proporcionadas en la sección anterior. El software es compatible con plataformas informáticas de 32 y 64 bits.
Qué hay de nuevo en esta versión:
- Uno de las características nuevas más importantes para la serie de lanzamiento Octave 3.8.x es una interfaz gráfica de usuario. Es lo único que los usuarios han solicitado más a menudo en los últimos años y ahora está casi listo. Pero como no está tan pulido como quisiéramos, hemos decidido esperar hasta la serie de versiones 4.0.x antes de convertir a la GUI en la interfaz predeterminada (hasta entonces, puede usar la opción --force-gui para iniciar la GUI) ).
Qué hay de nuevo en la versión:
- Una de las características más importantes para la serie de lanzamientos de Octave 3.8.x es una interfaz gráfica de usuario. Es lo único que los usuarios han solicitado más a menudo en los últimos años y ahora está casi listo. Pero como no está tan pulido como quisiéramos, hemos decidido esperar hasta la serie de versiones 4.0.x antes de convertir a la GUI en la interfaz predeterminada (hasta entonces, puede usar la opción --force-gui para iniciar la GUI) ).
Qué hay de nuevo en la versión 4.2.0:
- Una de las características más importantes para la serie de versiones de Octave 3.8.x es una interfaz gráfica de usuario. Es lo único que los usuarios han solicitado más a menudo en los últimos años y ahora está casi listo. Pero como no está tan pulido como quisiéramos, hemos decidido esperar hasta la serie de versiones 4.0.x antes de convertir a la GUI en la interfaz predeterminada (hasta entonces, puede usar la opción --force-gui para iniciar la GUI) ).
Qué hay de nuevo en la versión 4.0.3:
- Una de las características más importantes para la serie de versiones de Octave 3.8.x es una interfaz gráfica de usuario. Es lo único que los usuarios han solicitado más a menudo en los últimos años y ahora está casi listo. Pero como no está tan pulido como quisiéramos, hemos decidido esperar hasta la serie de versiones 4.0.x antes de convertir a la GUI en la interfaz predeterminada (hasta entonces, puede usar la opción --force-gui para iniciar la GUI) ).
Qué hay de nuevo en la versión 4.0.1:
- Una de las características más importantes para la serie de versiones de Octave 3.8.x es una interfaz gráfica de usuario. Es lo único que los usuarios han solicitado más a menudo en los últimos años y ahora está casi listo. Pero como no está tan pulido como quisiéramos, hemos decidido esperar hasta la serie de versiones 4.0.x antes de convertir a la GUI en la interfaz predeterminada (hasta entonces, puede usar la opción --force-gui para iniciar la GUI) ).
Qué hay de nuevo en la versión 4.0.0:
- Una de las características más importantes para la serie de versiones de Octave 3.8.x es una interfaz gráfica de usuario. Es lo único que los usuarios han solicitado más a menudo en los últimos años y ahora está casi listo. Pero como no está tan pulido como quisiéramos, hemos decidido esperar hasta la serie de versiones 4.0.x antes de convertir a la GUI en la interfaz predeterminada (hasta entonces, puede usar la opción --force-gui para iniciar la GUI) ).
Qué hay de nuevo en la versión 3.8.2:
- Una de las características más importantes para la serie de versiones de Octave 3.8.x es una interfaz gráfica de usuario. Es lo único que los usuarios han solicitado más a menudo en los últimos años y ahora está casi listo. Pero como no está tan pulido como quisiéramos, hemos decidido esperar hasta la serie de versiones 4.0.x antes de convertir a la GUI en la interfaz predeterminada (hasta entonces, puede usar la opción --force-gui para iniciar la GUI) ).
Qué hay de nuevo en la versión 3.8.0:
- Una de las principales características nuevas de Octave 3.8 es una interfaz gráfica de usuario. Es lo único que los usuarios han solicitado más a menudo en los últimos años y ahora está casi listo. Pero como no está tan pulido como quisiéramos, hemos decidido esperar hasta la serie de versiones 4.0.x antes de convertir a la GUI en la interfaz predeterminada (hasta entonces, puede usar la opción --force-gui para iniciar la GUI) ).
- Dado el tiempo y la cantidad de correcciones de fallas y mejoras desde la última versión importante de Octave, también decidimos no retrasar el lanzamiento de todas estas nuevas mejoras para perfeccionar la GUI. Por lo tanto, disfrute de la versión 3.8 de Octave y la vista previa de la nueva GUI. Creemos que está funcionando razonablemente bien, pero también sabemos que hay algunos puntos difíciles obvios y muchas cosas que podrían mejorarse.
Qué hay de nuevo en la versión 3.4.0:
- Las bibliotecas BLAS y LAPACK ahora están obligadas a construir Octave. El subconjunto de las bibliotecas de referencia BLAS y LAPACK se ha eliminado de las fuentes de Octave.
- La función `buscar 'se extendió para ser más útil para la búsqueda binaria de propósito general. Al utilizar esta mejora, la función ismember se reescribió para obtener un rendimiento significativamente mejor.
- Las matrices reales, enteras y lógicas, cuando se usan en indexación, ahora almacenan en caché el valor index_vector interno (índices basados en cero) cuando se usan con éxito como índices, eliminando la penalización de conversión para indexación posterior por la misma matriz. En particular, esto significa que ya no es necesario para evitar la indexación repetida mediante matrices lógicas que utilizan find por motivos de rendimiento.
- Las matrices lógicas ahora se tratan de manera más eficiente cuando se usan como índices. Octave mantendrá el índice como una máscara lógica a menos que la proporción de elementos verdaderos sea lo suficientemente pequeña, utilizando un código especializado. Anteriormente, todas las matrices lógicas siempre se convertían primero a vectores de índice. Esto permite ahorrar tanto en memoria como en tiempo de computación.
- Las funciones `sub2ind 'y` ind2sub' se volvieron a implementar como funciones compiladas para un mejor rendimiento. Estas funciones ahora son más rápidas, pueden ofrecer resultados más económicos para rangos y pueden reutilizar el mecanismo de caché de índice descrito en el párrafo anterior.
- Las funciones integradas equivalentes a los operadores asociativos (`plus ',` times', `mtimes ',` y', y `o ') se han ampliado para aceptar múltiples argumentos. Esto es especialmente útil para sumar (multiplicar, etc.) listas de objetos (de tipos posiblemente distintos):
- matrix_sum = plus (matrix_list {:});
- Se implementó un tipo de objeto FTP basado en libcurl. Estos objetos permiten que se administren conexiones ftp, descargas y cargas. Por ejemplo,
- fp = ftp ("ftp.octave.org); cd (fp," gnu / octave "); mget (fp," octave-3.2.3.tar.bz2 "); close (fp);
- El comportamiento predeterminado de `assert (observado, esperado) 'se ha relajado para emplear una comprobación menos estricta que no requiere que las partes internas de los valores coincidan. Esto evita que las pruebas previamente válidas se rompan debido a las nuevas clases internas introducidas en futuras versiones de Octave.
- Por ejemplo, todas estas afirmaciones eran verdaderas en Octave 3.0.x pero falsas en 3.2.x debido a nuevas optimizaciones y mejoras:
- assert (2 * linspace (1, 5, 5), 2 * (1: 5)) assert (ceros (0, 0), []) assert (2 * unos (1, 5), (2) (unos (1,5)))
- Se modificó el comportamiento de las funciones de la biblioteca `ismatrix ',` issquare' y `issymmetric 'para una mayor coherencia. La función `ismatrix 'ahora devuelve verdadero para todas las matrices numéricas, lógicas y de carácter 2-D o N-D. Anteriormente, 'ismatrix' devolvía false si la primera o la segunda dimensión era cero. Por lo tanto, `ismatrix ([]) 'era falso, mientras que` ismatrix (ceros (1,2,0))' era verdadero.
- La función `issquare 'ahora devuelve un escalar lógico y es equivalente a la expresión
- ismatrix (x) & amp; amp; ndims (x) == 2 & amp; & amp; filas (x) == columnas (x)
- La dimensión ya no se devuelve. Como resultado, `issquare ([]) 'ahora se vuelve verdadero. La función `issymmetric 'ahora comprueba la simetría en lugar de Hermitianness. Para este último, ishermitian fue creado. Además, se devuelve el escalar lógico en lugar de la dimensión, por lo que `issymmetric ([]) 'ahora es verdadero. Los identificadores de función son ahora conscientes de las funciones sobrecargadas. Si una función está sobrecargada, el mango determina en el momento de su referencia a qué función llamar. No es necesario que exista una versión no sobrecargada.
- Las funciones de sobrecarga para las clases incorporadas (doble, int8, celular, etc.) ahora son compatibles con Matlab.
- Los identificadores de función ahora se pueden comparar con los operadores == y! =, así como con la función `isequal '.
- El rendimiento de la concatenación (usando []) y las funciones `cat ',` horzcat' y `vertcat 'se han mejorado para matrices multidimensionales.
- Los operadores de asignación de operación + =, - =, * = y / = ahora se comportan de manera más eficiente en ciertos casos. Por ejemplo, si M es una matriz y S es escalar, entonces la declaración
- M + = S;
- operará en los datos de M in situ si no es compartido por otra variable, generalmente aumentando el tiempo y la eficiencia de la memoria. Solo se ven afectadas las combinaciones comunes seleccionadas, a saber: matriz + = matriz matriz - = matriz matriz. * = Matriz matriz ./= matriz
- matriz + = matriz escalar - = matriz escalar * = matriz escalar / = escalar
- matriz lógica | = matriz lógica matriz lógica & amp; = matriz lógica
- donde la matriz y el escalar pertenecen a la misma clase. El lado izquierdo debe ser una referencia de variable simple.
- Además, cuando los operadores unarios aparecen en expresiones, Octave también intentará realizar la operación in situ si su argumento es una expresión temporal.
- El efecto de los operadores de comparación (, =) aplicados a números complejos ha cambiado para que sea coherente con el orden estricto definido por las funciones `max ',` min' y `sort '. Más específicamente, los números complejos se comparan mediante la comparación lexicográfica de los pares `[abs (z), arg (z)] '. Anteriormente, solo se comparaban partes reales; esto se puede lograr trivialmente envolviendo los operandos en real ().
- La simplificación automática de los resultados de computación complejos ha cambiado. Octave ahora simplificará cualquier número complejo con una parte imaginaria cero o cualquier matriz compleja con todos los elementos que tienen una parte imaginaria de cero a un valor real. Anteriormente, esto se hacía solo por ceros positivos. Tenga en cuenta que el comportamiento de la función compleja no cambia y aún produce un valor complejo incluso si la parte imaginaria es cero.
- Como efecto secundario de la refactorización de código en liboctave, las operaciones lógicas binarias ahora son más fáciles de aplicar a las optimizaciones del compilador y, por lo tanto, son significativamente más rápidas.
- Octave ahora permite métodos `subsasgn 'definidos por el usuario para optimizar las copias redundantes. Para obtener más información, consulte el manual.
- Manejo más eficiente de la división de matriz. Octave ahora puede manejar las expresiones M 'V M.' V V / M
- (M es una matriz y V es un vector) de manera más eficiente en ciertos casos. En particular, si M es triangular, las tres expresiones serán manejadas por una sola llamada a xTRTRS (desde LAPACK), con banderas apropiadas. Anteriormente, las tres expresiones requerían una transposición física de M.
- Manejo más eficiente de ciertas operaciones mixtas de la matriz del complejo real. Por ejemplo, si RM es una matriz real y CM una matriz compleja, RM CM
- ahora se puede evaluar como
- complejo (RM real (CM), RM imag (CM))
- o como
- CM (RM) complejo,
- dependiendo de las dimensiones. La primera forma requiere más temporales y copia, pero reduce a la mitad el recuento de FLOP, que normalmente ofrece un mejor rendimiento si RM tiene suficientes filas. Anteriormente, la segunda forma siempre se usaba.
- La división de la matriz se ve afectada de manera similar.
- Manejo más eficiente de los factores de matriz triangular devueltos por factorizaciones. Las funciones para calcular las factorizaciones QR, LU y Cholesky ahora devolverán automáticamente los factores de la matriz triangular con el tipo de matriz interno adecuado establecido, de modo que no será necesario calcularlo cuando la matriz se utilice para la división.
- La función incorporada 'suma' ahora maneja la suma no nativa (es decir, la suma de doble precisión de las entradas individuales o enteras) de manera más eficiente, evitando una conversión temporal de toda la matriz de entrada para duplicar. Además, `suma 'ahora puede aceptar un argumento de opción extra, utilizando un algoritmo de suma compensado en lugar de una suma directa, lo que mejora significativamente la precisión si se produce mucha cancelación en la sumatoria.
- La función incorporada `bsxfun 'ahora usa código optimizado para ciertos casos en los que se pasan identificadores de operador incorporados. A saber, las optimizaciones conciernen a los operadores` plus', `minus ',` times', `ldivide ' , `rdivide ',` power', `y ',` o' (para arreglos lógicos), los operadores relacionales `eq ',` ne', `lt ',` le', `gt ',` ge', y las funciones `min 'y` max'. Las optimizaciones solo se aplican cuando ambos operandos son de la misma clase incorporada. Las operaciones mixtas reales / complejas y simples / dobles primero convertirán ambos operandos a un tipo común.
- Las funciones `strfind 'y` strrep' ahora tienen implementaciones compiladas, lo que facilita una búsqueda significativamente más eficiente y el reemplazo en cadenas, especialmente con patrones más largos. El código de `strcat 'se ha vectorizado y ahora es mucho más eficiente cuando se concatenan muchas cadenas. Las funciones `strcmpi 'y` strncmpi' ahora son funciones integradas que proporcionan un mejor rendimiento.
- Matlab-style ignorando los argumentos de entrada y salida de función usando tilde (~) ahora es compatible. Los argumentos de salida ignorados se pueden detectar desde una función usando la función incorporada `isargout '. Para más detalles, consulte el manual.
- Se ha eliminado el tipo de datos de la lista, en desuso desde la introducción de las celdas.
- La función accumarray se ha optimizado y ahora es significativamente más rápida en ciertos casos importantes.
- El comportamiento de las funciones isreal e isnumeric se modificó para que fuera más compatible con Matlab.
- El entero matemático & amp; Se han eliminado las advertencias de conversión (Octave: int-convert-nan, Octave: int-convert-non-int-val, Octave: int-convert-overflow, Octave: int-math-overflow).
- rem y mod ahora son funciones integradas. También manejan los tipos enteros de manera eficiente usando la aritmética de enteros.
- La indexación dispersa y la asignación indexada se han reescrito principalmente. Dado que Octave usa almacenamiento de columna comprimida para matrices dispersas, se presta mayor atención a las operaciones que manipulan columnas enteras. Estas operaciones ahora son significativamente más rápidas, así como algunos otros casos importantes.
- Además, ahora es posible asignar previamente una matriz dispersa y luego llenarla por asignaciones, siempre que cumplan con ciertas condiciones. Para obtener más información, consulte la función `spalloc ', que ya no es un simple muñeco. En consecuencia, nzmax y nnz ya no son siempre iguales en Octave. Octave también puede producir una matriz con nnz & lt; nzmax como resultado de otras operaciones, por lo tanto, debe usar consistentemente nnz a menos que realmente desee usar nzmax (es decir, el espacio asignado para elementos distintos de cero).
- La concatenación dispersa también se ve afectada, y la concatenación de matrices dispersas, especialmente colecciones más grandes, es ahora significativamente más eficiente. Esto se aplica tanto al operador [] como a las funciones cat / vertcat / horzcat.
- Ahora es posible utilizar opcionalmente los controladores xGESDD LAPACK para calcular la descomposición de valores singulares utilizando svd (), en lugar de la xGESVD predeterminada, utilizando la configuración pseudovariable svd_driver. El controlador xGESDD puede ser hasta 6 veces más rápido cuando se solicitan vectores singulares, pero se informa que es algo menos robusto en matrices altamente mal acondicionadas.
- Las pseudovariables de configuración, como page_screen_output o confirm_recursive_rmdir (o el svd_driver mencionado anteriormente), ahora aceptan una opción "local" como segundo argumento, solicitando que el cambio se deshaga cuando la función actual regrese: function [status, msg] = rm_rf (dir) confirm_recursive_rmdir (falso, "local"); [estado, msg] = rmdir (dir, "s"); ... endfunction Al regresar, confirm_recursive_rmdir se restaurará al valor que tenía al ingresar a la función, incluso si hubo cambios posteriores a la variable en la función rm_rf o cualquiera de las funciones a las que llama.
- pkg ahora acepta una opción -forge para descargar e instalar paquetes de Octave Forge automáticamente. Por ejemplo, pkg install -forge general descargará automáticamente la última versión del paquete general e intentará instalarlo. No se proporciona una resolución automática de las dependencias. Además,
- pkg list -forge se puede usar para enumerar todos los paquetes disponibles.
- ** La representación de datos internos de structs se ha reescrito completamente para hacer posibles ciertas optimizaciones. Los datos de campo ahora pueden compartirse entre estructuras con claves iguales pero con diferentes dimensiones o valores, lo que hace que las operaciones que conservan los campos sean más rápidas. El almacenamiento economizado ahora se usa para estructuras escalares (al igual que la mayoría de los otros escalares), haciendo que su uso sea más eficiente con la memoria. Ciertas operaciones tipo array en estructuras (concatenación, cellfun uniforme, num2cell) han ganado una aceleración significativa. Además, la clase octave_scalar_map ahora proporciona una interfaz más simple para trabajar con estructuras escalares dentro de una función DLD de C ++.
- ** Hay dos nuevos formatos disponibles para mostrar los números:
- formato formato short eng long eng
- Ambos muestran números en notación de ingeniería, es decir, mantisa + exponente donde el exponente es un múltiplo de 3.
- ** Las siguientes funciones son nuevas en Octave 3.4:
- accumdim erfcx nfields pqpnonneg uigetdir bitpack fileread nth_element quadcc uigetfile bitunpack fminbnd onCleanup randi uiputfile blkmm fskipl pbaspect repelems uimenu cbrt ifelse pie3 reset whitebg curl ishermitian powerset rsf2csf chop isindex ppder saveas daspect luupdate ppint strading divergence merge ppjumps textread
- ** Ya no se admite el uso de la función de imagen para ver imágenes con programas externos, como display, xv y xloadimage. La función image_viewer también se ha eliminado.
- ** Se modificó el comportamiento de las asignaciones de estructuras a valores que no son de estructura. Anteriormente, era posible sobrescribir un valor arbitrario: a = 1; a.x = 2;
- Esto ya no es posible a menos que a sea una matriz vacía o una matriz de celdas.
- ** La función dlmread se ha ampliado para permitir la especificación de un valor personalizado para los campos vacíos.
- ** Las funciones dlmread y dlmwrite se han modificado para aceptar archivos ID (como los devuelve fopen) además de los nombres de archivo.
- ** Octave ahora puede optimizar la sobrecarga del intérprete de un identificador de función anónimo, si la función simplemente llama a otra función o maneja con algunos de sus parámetros ligados a ciertos valores. Ejemplo: f = @ (x) sum (x, 1);
- Cuando se invoca f, la llamada se reenvía a @sum con la constante 1 añadida, y la llamada a la función anónima no se produce en la pila de llamadas.
- Funciones obsoletas.
- Las siguientes funciones quedaron obsoletas en Octave 3.2 y se eliminarán de Octave 3.6 (o de cualquier versión que sea la segunda versión principal después de 3.2):
- create_set spcholinv splu dmult spcumprod spmax iscommand spcumsum spmin israwcommand spdet spprod lchol spdiag spqr loadimage spfind spsum mark_as_command sphcat spsumsq mark_as_rawcommand spinv spvcat spatan2 spkron str2mat spchol splchol unmark_command spchol2inv split unmark_rawcommand
- Las siguientes funciones han quedado obsoletas en Octave 3.4 y se eliminarán de Octave 3.8 (o de cualquier versión que sea la segunda versión principal después de 3.4):
- autocor cellidx gammai krylovb values autocov dispatch glpkmex replot betai fstat is_global saveimage
- Para compatibilidad con Matlab, mu2lin (x) ahora es equivalente a mu2lin (x, 0).
- La biblioteca ARPACK ahora se distribuye con Octave por lo que ya no necesita estar disponible como una dependencia externa cuando se construye Octave.
Qué hay de nuevo en la versión 3.2.3:
- Octave 3.2.3 es una versión de corrección de errores
Qué hay de nuevo en la versión 3.0.4:
- Octave 3.0.4 es una versión de corrección de errores. La mayoría de los errores reportados desde el lanzamiento de la versión 3.0.3 han sido reparados. Tenga en cuenta que Octave 3.0 es significativamente diferente de Octave 2.1.x, especialmente en lo que respecta a gráficos, manejo de rutas y variables integradas.
Comentarios que no se encuentran