Créditos: GNU/Octave

Alternativas ao MATLAB #1 – GNU/Octave

Algumas vezes publicamos alternativas para programas ou ferramentas utilizadas na engenharia para quem não pode, ou não está a fim de, gastar os valores cobrados por quem os distribui. Já comentamos sobre o Solver do Microsoft Excel, o Maple e o Microsoft Visio. Hoje começaremos uma série de artigos sobre um programa considerado referência em vários ramos da Engenharia e algumas Exatas: o MATLAB®.

O MATLAB® (do acrônimo MATrix LABoratory) é atualmente desenvolvido pela The Mathworks, Inc. e lida nativamente com manipulação de matrizes e criação de gráficos, o que facilita a codificação de problemas de álgebra linear em relação a outras linguagens como Fortran, C/C++ ou Java. Porém, é sabido que o custo de uma licença de uso é proibitivo para a maioria dos estudantes e empresas. Uma cópia para estudantes da versão mais recente no dia que escrevo (a R2013a) sai por 89 Obamas, isso se você não depender de alguma funcionalidade adicional que sai a 26 Obamas cada.

Mas saiba que há algumas alternativas grátis/livres sim, são coisas diferentes para o MATLAB®. Algumas que tentam manter uma máxima compatibilidade, outras preferem implementar suas próprias funções, e outras no estilo DIY. Ao longo dessas semanas apresentarei algumas delas,  expondo as suas vantagens, desvantagens e o que se pode fazer com cada uma delas.

Hoje apresento a ferramenta GNU/Octave. Vamos lá?

A ferramenta

Créditos: GNU/Octave
Créditos: GNU/Octave

O GNU/Octave é um software livre, participante do projeto GNU, o qual é utilizado para solução de diversos problemas numéricos lineares e não lineares. A versão 1.0 foi lançada por John Eaton em Fev/1994 e hoje ele se encontra na versão 3.8, lançada no réveillon de 2013. Uma curiosidade: o nome do software se deve ao professor Octave Levenspiel, o qual foi professor de Eaton na Universidade de Oregon.

O GNU/Octave pode ser encontrado no seu site oficial, e possui versões para GNU/Linux, FreeBSD, OpenBSD, MacOS X e Windows. Para instalar no GNU/Linux e nos sistemas BSD utilize o gerenciador de pacotes da sua distribuição. Por exemplo, no Ubuntu basta ir na Central de Aplicativos e procurar por “octave”, ou digitar o comando no Terminal:

sudo apt-get install octave

Para MacOS X, basta seguir as instruções deste wiki, e para Windows recomendo o download de um instalador, ou seguir as informações deste wiki.

O software, além de ser livre de custos, edita nativamente os arquivos do MATLAB® (ou M-Files) além de possuir boa compatibilidade com os seus comandos, sendo que uma rotina bem escrita em M-Code (ou linguagem MATLAB®) deverá rodar sem maiores percalços no GNU/Octave.

Na próxima página temos uma análise resumida do GNU/Octave.

Análise

The Good

  • Livre de custos;
  • Edita M-files oriundos do MATLAB®;
  • Boa compatibilidade com as rotinas do MATLAB®;
  • Multiplataforma;
  • Pode ter suas funcionalidades expandidas através da instalação de pacotes adicionais, obtidos a partir desse site.

The Bad

  • Não possui interface gráfica;
  • Não possui editor de código integrado;
  • Não possui ferramenta nativa para plotar gráficos.

The Ugly

  • Não possui aplicativo similar ao SIMULINK®.

Mesmo com boa compatibilidade o GNU/Octave tem os seus defeitos. O mais grave deles é não possuir um similar ao SIMULINK® o que inviabiliza a migração de alguns usuários para esta ferramenta. Uma interface gráfica é prometida para a versão 4.0 do software, mas caso você instale a versão 3.8 ela está disponível para testes ao se executar o comando “octave –force-gui” (sem as aspas).

Com a chegada da interface gráfica, além da incorporação de um editor de código integrado, auxilia na diminuição da curva de aprendizagem ao novo software, o que pode viabilizar uma migração mais efetivas de usuários do MATLAB®, desde que não necessitem de um SIMULINK®. Outra forma de utilizar o GNU/Octave com interface gráfica é a instalação de programas de terceiros para este fim. Uma recomendação é o DomainMath IDE. Outra limitação que pode ser superada é a ausência de um plotador de gráficos integrado, pois o GNU/Octave se integra muito bem ao GnuPlot, que é uma ferramenta de visualização gráfica gratuita (não é livre) multiplataforma. O GnuPlot pode ser obtido nesse site.

Na próxima página realizaremos alguns testes para verificar o grau de compatibilidade entre os softwares e quanto ao seu desempenho numérico.

Alguns testes

Para essa alternativa, e outras que virão em futuros posts, usaremos um script simples de regressão linear. Os dados foram obtidos a partir do site da NIST e consiste em um modelo polinomial de sete parâmetros, ou seja:

\(y = b_0 + b_1 \cdot x_1 + b_2 \cdot x_2 + b_3 \cdot x_3 + b_4 \cdot x_4 + b_5 \cdot x_5 + b_6 \cdot x_6 + \epsilon.\)

?View Code MATLAB
% Arquivo de testes para as alternativas do MATLAB
% Modelo de regressão linear com 7 parâmetros
% y = B0 + B1*x1 + B2*x2 + B3*x3 + B4*x4 + B5*x5 + B6*x6 + e
 
clc
clear all
format short e
 
% Definindo variáveis
% data = [y x1 x2 x3 x4 x5 x6]
data = [60323    83.0   234289   2356     1590    107608  1947
        61122    88.5   259426   2325     1456    108632  1948
        60171    88.2   258054   3682     1616    109773  1949
        61187    89.5   284599   3351     1650    110929  1950
        63221    96.2   328975   2099     3099    112075  1951
        63639    98.1   346999   1932     3594    113270  1952
        64989    99.0   365385   1870     3547    115094  1953
        63761   100.0   363112   3578     3350    116219  1954
        66019   101.2   397469   2904     3048    117388  1955
        67857   104.6   419180   2822     2857    118734  1956
        68169   108.4   442769   2936     2798    120445  1957
        66513   110.8   444546   4681     2637    121950  1958
        68655   112.6   482704   3813     2552    123366  1959
        69564   114.2   502601   3931     2514    125368  1960
        69331   115.7   518173   4806     2572    127852  1961
        70551   116.9   554894   4007     2827    130081  1962];
y = data(:,1);
x = data(:,2:end);
 
% Adicionando uma coluna de 1 para x0
x = [ones(size(y)) x];
 
% Obtendo os parâmetros
b = xy
 
% Plotando os resultados
y_mod = x * b;
h = figure(1);
plot(x(:,7),y,'ro',x(:,7),y_mod,'k-')
legend('x_6 versus y')
print(h, '-dpng', 'test.png')

Os resultados apresentados no MATLAB® foram:

\(b = \begin{bmatrix} -3.4823e+006 \\
1.5062e+001 \\
-3.5819e-002 \\
-2.0202e+000 \\
-1.0332e+000 \\
-5.1104e-002 \\
1.8292e+003
\end{bmatrix}\)

Resultado - Matlab

Ao executar o mesmo m-file no GNU/Octave, não houve surpresa… Não foi preciso nenhuma adaptação no código-fonte original, ou no formato do arquivo para que os comandos fossem executados. Os resultados apresentados pelo GNU/Octave foram:

\(b = \begin{bmatrix} -3.4823e+06 \\
1.5062e+01 \\
-3.5819e-02 \\
-2.0202e+00 \\
-1.0332e+00 \\
-5.1104e-02 \\
1.8292e+03
\end{bmatrix}\)

Resultado - GNU/Octave

Vale ressaltar que apesar de reconhecer os comandos do MATLAB®, o GNU/Octave faz livres abordagens de como esses comandos serão processados. Um exemplo disso é, no m-file executado neste artigo, como o GNU/Octave prefere o formato de exibição de dados “short e” em vez do “short”, que é padrão no MATLAB®. Outro exemplo é como as informações são exibidas em gráfico: o GNU/Octave, por usar o GnuPlot como padrão, prefere um eixo com decimais, enquanto o MATLAB® prefere o formato “short g”.

Por hoje é só. Quaisquer dúvidas e/ou sugestões podem usar a seção de comentários localizada abaixo do artigo.

Deixe uma resposta