post list
QuantDare
categories
all

Neural Networks

alarije

all

Foreseeing the future: a user’s guide

Jose Leiva

all

Stochastic portfolio theory, revisited!

P. López

all

“Past performance is no guarantee of future results”, but helps a bit

ogonzalez

all

Playing with Prophet on Financial Time Series (Again)

rcobo

all

Interviewing prices: Don’t settle for less

jramos

all

The Simpson Paradox

kalinda

all

Seeing the market through the trees

xristica

all

Shift or Stick? Should we really ‘sell in May’?

jsanchezalmaraz

all

What to expect when you are the SPX

mrivera

all

K-Means in investment solutions: fact or fiction

T. Fuertes

all

Lévy Flights. Foraging in a Finance blog. Part II

mplanaslasa

all

How to… use bootstrapping in Portfolio Management

psanchezcri

all

What is the difference between Artificial Intelligence and Machine Learning?

ogonzalez

all

Playing with Prophet on Financial Time Series

rcobo

all

Prices Transformation Cheat Sheet

fjrodriguez2

all

Dual Momentum Analysis

J. González

all

Random forest: many are better than one

xristica

all

Non-parametric Estimation

T. Fuertes

all

Classification trees in MATLAB

xristica

all

Using Multidimensional Scaling on financial time series

rcobo

all

Applying Genetic Algorithms to define a Trading System

aparra

all

Graph theory: connections in the market

T. Fuertes

all

Lévy flights. Foraging in a finance blog

mplanaslasa

all

Data Cleansing & Data Transformation

psanchezcri

all

Principal Component Analysis

j3

all

Comparing ETF Sector Exposure Using Chord Diagrams

rcobo

all

Learning with kernels: an introductory approach

ogonzalez

all

SVM versus a monkey. Make your bets.

P. López

all

Clustering: “Two’s company, three’s a crowd”

libesa

all

Euro Stoxx Strategy with Machine Learning

fjrodriguez2

all

Visualizing Fixed Income ETFs with T-SNE

j3

all

Hierarchical clustering, using it to invest

T. Fuertes

all

Lasso applied in Portfolio Management

psanchezcri

all

Markov Switching Regimes say… bear or bullish?

mplanaslasa

all

Exploring Extreme Asset Returns

rcobo

all

Playing around with future contracts

J. González

all

“K-Means never fails”, they said…

fjrodriguez2

all

What is the difference between Bagging and Boosting?

xristica

all

BETA: Upside Downside

j3

all

Outliers: Looking For A Needle In A Haystack

T. Fuertes

all

Autoregressive model in S&P 500 and Euro Stoxx 50

psanchezcri

all

“Let’s make a deal”: from TV shows to identifying trends

mplanaslasa

all

Machine Learning: A Brief Breakdown

libesa

all

Approach to Dividend Adjustment Factor Calculation

J. González

all

Are Low-Volatility Stocks Expensive?

jsanchezalmaraz

all

Predict returns using historical patterns

fjrodriguez2

all

Dream team: Combining classifiers

xristica

all

Stock classification with ISOMAP

j3

all

Could the Stochastic Oscillator be a good way to earn money?

T. Fuertes

all

Central Limit Theorem: Visual demonstration

kalinda

all

Sir Bayes: all but not naïve!

mplanaslasa

all

Returns clustering with k-Means algorithm

psanchezcri

all

Correlation and Cointegration

j3

all

Momentum premium factor (II): Dual momentum

J. González

all

Dynamic Markowitz Efficient Frontier

plopezcasado

all

Confusion matrix & MCC statistic

mplanaslasa

all

Prices convolution, a practical approach

fuzzyperson

all

‘Sell in May and go away’…

jsanchezalmaraz

all

S&P 500 y Relative Strength Index II

Tech

all

Performance and correlated assets

T. Fuertes

all

Reproducing the S&P500 by clustering

fuzzyperson

all

Retrocesos y Extensiones de Fibonacci

fjrodriguez2

all

Size Effect Anomaly

T. Fuertes

all

Predicting Gold using Currencies

libesa

all

La Paradoja de Simpson

kalinda

all

Inverse ETFs versus short selling: a misleading equivalence

J. González

all

Random forest vs Simple tree

xristica

all

S&P 500 y Relative Strength Index

Tech

all

Efecto Herding

alarije

all

Cointegración: Seguimiento sobre cruces cointegrados

T. Fuertes

all

Seasonality systems

J. González

all

Una aproximación Risk Parity

mplanaslasa

all

Números de Fibonacci

fjrodriguez2

all

Using Decomposition to Improve Time Series Prediction

libesa

all

Las cadenas de Markov

j3

all

Clasificando el mercado mediante árboles de decisión

xristica

all

Momentum premium factor sobre S&P 500

J. González

all

Árboles de clasificación en Matlab

xristica

all

Fractales y series financieras II

Tech

all

Redes Neuronales II

alarije

all

El gestor vago o inteligente…

jsanchezalmaraz

all

In less of a Bayes haze…

libesa

all

Teoría de Valores Extremos II

kalinda

all

Cointegración

T. Fuertes

all

Cópulas: una alternativa en la medición de riesgos

mplanaslasa

all

¿Por qué usar rendimientos logarítmicos?

jsanchezalmaraz

all

Análisis de Componentes Principales

j3

all

Vecinos cercanos en una serie temporal

xristica

all

Redes Neuronales

alarije

all

Fuzzy Logic

fuzzyperson

all

El filtro de Kalman

mplanaslasa

all

Estimación no paramétrica

T. Fuertes

all

Fractales y series financieras

Tech

all

In a Bayes haze…

libesa

all

Volatility of volatility. A new premium factor?

J. González

all

Caso Práctico: Multidimensional Scaling

rcobo

all

Teoría de Valores Extremos

kalinda

all

De Matlab a Octave

fuzzyperson

04/07/2014

No Comments
De Matlab a Octave

Matlab es un buen entorno para desarrollar programas de cálculo numérico, sin embargo tiene el inconveniente de ser privado y de alto coste.

Una alternativa de código abierto y sintaxis similar es Octave. En este post se ha probado con la versión 3.6.4 por consola de comandos, aunque se han testeado un par de cosas en la versión 3.8.1.

Lo primero

Una vez que iniciamos Octave, lo primero que hace el programa es ejecutar un script llamado octaverc (escrito en Octave y editable con un editor de texto). Este archivo se puede crear en varias rutas al instalar Octave y se ejecutan todas, en este script podemos poner la configuración inicial del entorno de trabajo, etc.

Algunas rutas bastante comunes donde puede estar este archivo es: /C/Users/nombredeusuario o //share/octave//m/startup.

Primeros pasos

El flujo de trabajo recomendable para trabajar con Octave (sobre todo desde consola) es crear scripts de texto con extensión *.m y simplemente ejecutarlos desde Octave.

Para esto debemos movernos a la carpeta del sistema donde tengamos los scripts que queremos ejecutar, esto lo hacemos con el comando:

               >> chdir ‘<PathToFolder>’;       o      >> chdir(‘<PathToFolder>’);

Y a continuación ejecutar el script, mediante su nombre

               >> MyScript;

En general para los usuarios de Matlab encontrarán pocas diferencias en la sintaxis, siendo altamente compatible Octave con Matlab, aunque no al revés, es decir:

               Matlab →Octave  :  SI

               Octave →Matlab  :  NO

Esto se debe a que Octave tiene su propia sintaxis diferente a la de Matlab por lo que si escribimos script con esta sintaxis Matlab no los reconocerá. Sin embargo Octave reconoce perfectamente la sintaxis de Matlab.

También hay que decir que hablamos de compatibilidad en sintaxis básica, no del uso de toolboxes o características avanzadas, donde por lo general no son muy compatibles, por ejemplo las gráficas avanzadas si son diferentes o el acceso a base de datos o computación en paralelo, incluso en la sintaxis más básica si hay diferencias entre ambos.

Veamos un cuadro resumen de éstas:

Característica Octave Matlab Compatibilidad
Terminación de funciones y control de flujo: function … endfunction oif… endif function … endif… end SI
Anidamiento de funciones function …function … end

end

function … endfunction … end SI
Operadores logicos En Matlab & y | en algunas situaciones funcionan como operadores de cortocircuito, en Octave no.
Strings Simple o doble comilla (‘’ o “”) Solo comilla simple (‘’) SI
Comentarios Con % o # Con % SI
Operadores de incremento y asignación Notación C:X++, –Y, X+=2… Autoreferencia:K = K+1; SI

Desde luego hay muchas más diferencias entre Octave y Matlab pero no a nivel, por ejemplo Matlab incluye un intérprete JIT (just-in-time) que acelera mucho los procesos, mientras que Octave solo dispone de él en las últimas versiones, por lo que se nota menor performance en Octave.

Manejando paquetes

Una de las principales diferencias entre Octave y Matlab es el manejo de toolboxes, mientras en Matlab se deben instalar con el ejecutable que instala Matlab, en Octave es diferente. Una vez instalado Octave puedes bajarte los toolboxes como archivos comprimidos denominados paquetes e instalarlos desde la consola de Octave escribiendo:

               >> pkg install nombre_del_paquete

También es posible instalar algunos paquetes desde un repositorio común alojado en sourceforge, mediante el comando:

               >> pkg install –forge nombre_del_paquete

La lista de paquetes disponibles se puede ver en: http://octave.sourceforge.net/packages.php

Una vez instalado el paquete es posible desinstalarlo de forma similar pero con la instrucción uninstall.

Sin embargo a diferencia de Matlab, no tenemos disponibles por defecto estos paquetes al iniciar Octave. Para que estén disponibles es necesario cargarlos y cuando queramos que no estén disponibles habrá que “descargarlos” con las siguientes instrucciones

               >> pkg load nombre_del_paquete          >> pkg unload nombre_del_paquete

Para ver en qué estado se encuentra un paquete (instalado, cargado, etc) es posible verlo ejecutando:

               >> pkg describe nombre_del_paquete

Una posible solución para que el funcionamiento de Octave sea más similar al de Matlab es cargar los paquetes necesarios escribiendo en el archivo octaverc el pkg load correspondiente a los paquetes que se deseen cargar (los paquetes solo necesitan instalarse una vez).

Bajando al sótano

Otra diferencia que hay que destacar es en la compilación de archivos. Tanto en Matlab como en Octave se pueden utilizar funciones compiladas directamente desde C, en Matlab se denominan MEX-files y tienen extensión *.mex, mientras que en Octave se denominan OCT-files y tienen extensión *.oct.

En Octave este tipo de archivos tienen especial relevancia ya que si quieres ganar en rendimiento de código, la mejor opción es compilar las funciones en C y crear los oct-files para usarlas, en próximos post veremos cómo crear este tipo de funciones.

Tomando un café

También hay que hacer una mención especial al paquete java, que permite manejar objetos java desde Octave, para que este paquete funcione correctamente es necesario tener una máquina virtual java instalada y una variable de sistema configurada con el valor de la ruta donde esté el archivo jvm.cfg.

Cuando arrancamos Octave y cargamos el paquete java, éste busca un archivo de texto: classpath.txt, donde se encuentran las rutas a los archivos *.jar (archivos comprimidos que contienen código java), la forma de buscar estas rutas, así como una descripción del funcionamiento del paquete la podemos encontrar aquí.

Una vez que tenemos disponibles los paquetes Java, podemos crear objetos con la función javaObject y utilizar las funciones de dichos objetos anteponiendo el objeto seguido por punto, ejemplo:

               >> myObject = javaObject(“type”, input1, input2);

               >> resultado = myObject.myObjectsFunction(input);

En próximos post ampliaremos información sobre cómo trabajan juntos Java y Octave.

Tweet about this on TwitterShare on LinkedInShare on FacebookShare on Google+Email this to someone

add a comment

wpDiscuz