Sei sulla pagina 1di 11

GNU Octave

MatLAB for FREE

Eugenio Polto

Copyright c 2003 Eugenio Polto. All rights reserved. This document is free; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this document; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.

Sosteniamo la Cultura Libera: sosteniamo il Free Software

Indice
1 2 3 4 5 6 Introduzione Installazione Usare GNU Octave Estendere Octave Octave e la graca Conclusioni 3 3 4 5 7 9

Introduzione

Il MATLAB riveste, senza ombra di dubbio, il ruolo di leader indiscusso nel settore della matematica su PC. Esiste, tuttavia, una valida alternativa a questo prodotto commerciale: GNU Octave, programma offerto con la licenza GPL e dunque liberamente distribuibile. Lutilizzo di MATLAB in ambienti scolastici ed accademici (scientici in generale) pressoch scontato: purtroppo, per, essendo un prodotto commerciale, per poterlo utilizzare, necessita della relativa licenza, apportando costi elevati agli Enti pubblici, dove il numero di licenze si aggira mediamente intorno ai 10-20. Fortunatamente, il settore del FREE Software diventato talmente ricco e maturo da offrire prodotti che possono tranquillamente competere con le relative controparti commerciali: un ottimo esempio di quanto detto rappresentato da GNU Octave, clone di MATLAB coperto da licenza GNU GPL, e presente in molte distro di Linux (esiste anche la versione per Windows cfr. [2]).

Installazione

Se il programma non presente sulla nostra Linux box, possiamo scaricare il pacchetto octave-2.0.16.tar.gz dal sito ufciale di Octave (vedere [1]). A questo punto possiamo decomprimerlo (ad esempio nella directory /usr/local/src, ricordandoci di eseguire il login come root):
tar xvfz octave-2.0.16.tar.gz -C /usr/local/src

e quindi compilarlo ed installarlo:


cd /usr/local/src/octave-2.0.16 && make && make install

Octave pronto per luso.

Usare GNU Octave

Per lanciare il programma basta digitare da shell:


octave

ed il risultato questo:

Figura 1: GNU Octave dopo lavvio. Proviamo subito a fare qualcosa di utile, risolvendo, per esempio, un sistema di equazioni di ordine 3, della forma Ax=b. Deniamo dapprima una matrice A (3x3), con il seguente assegnamento:
A = [3 2 -5; 0 1 -1; 0 1 1]

se non vogliamo leco a video sufciente inserire un ";" alla ne della riga. Non ci resta che denire il vettore b dei termini noti:
b = [2; -1; 1/2];

se avessimo omesso i ";" allinterno delle parentesi quadre, sarebbe stato necessario eseguire una delle due operazioni sotto indicate per ottenere b come vettore colonna: 4

b = b % calcola il trasposto di b

b = b(:)

% trasforma b in vettore colonna

il simbolo % individua un commento. A questo punto calcoliamo il vettore x delle soluzioni del sistema appena descritto:
x = A \ b

Il gioco fatto.

Estendere Octave

Cos come MATLAB, anche in Octave si possono denire gli M-le, cio dei semplici le di testo che contengono istruzioni MATLAB (Octave). Per denire una funzione sufciente richiamare un editor ed utilizzare la sintassi:
function [parametri di output] = nome(parametri di input) blocco di istruzioni end;

Tali le hanno generalmente lestensione .m. Il blocco di istruzioni contiene, oltre agli assegnamenti, le keyword fondamentali per il controllo del usso:
if (espressione booleana) blocco else blocco end;

while (espressione booleana) blocco end;

for indice = indice_inf : indice_sup blocco end;

Applichiamo quanto detto scrivendo un M-le che sia in grado di risolvere una equazione (anche non lineare), cio cerchiamo almeno una radice di una funzione continua su un itervallo I di estremi [a,b] (cio un punto in cui la funzione interseca 5

lasse delle ascisse); supponiamo che tale funzione assuma valori di segno opposto in a e in b. Lanalisi ci insegna che esiste almeno un punto in cui la funzione si annulla in I (Teorema di esistenza degli zeri). Sotto queste ipotesi, la soluzione pu essere trovata dividendo iterativamente lintervallo a met e vericando se la funzione calcolata nel punto medio uguale a zero: in caso affermativo la radice stata trovata ed il loop termina, altrimenti si itera, nch non si trova lo zero (Metodo di bisezione). Nel seguente listato riportato quanto detto, in termini di funzione interpretabile da Octave e da noi informatici:
% % % % % INPUT:f funzione di cui ricercare la soluzione a,b estremi dellintervallo tolx tolleranza sulla radice OUTPUT: soluzione (zero della funzione)

function [soluzione] = bisezione (f, a, b, tolx) % calcolo del numero massimo di iterazioni max_i = ceil (log (b - a) - log (tolx)) / log (2); % valuta f negli estremi f_a = feval (f, a); f_b = feval (f, b); % calcola delta delta = tolx * abs ((f_b - f_a) / (b - a)); % divisione iterativa dellitervallo: % il ciclo termina quando si trova uno zero for iter = 0 : max_i soluzione = (a + b) / 2; f_x = feval (f, soluzione); if (abs (f_x) < delta) break; elseif ((f_a * f_x) < 0) b = soluzione; fb = f_x; elseif ((f_b * f_x) < 0) a = soluzione; f_a = f_x;

else break; end; end; if ((f_a * f_x) > 0 & (f_b * f_x) > 0) disp ("La soluzione non pu essere trovata!"); else disp ("La soluzione : "); disp(soluzione); end;

Possiamo rendere built-in la funzione appena scritta, avendo cura di copiare il le bisezione.m nella directory degli M-le:
mkdir /usr/local/share/octave/2.0.16/m/mia_directory cp bisezione.m /usr/local/share/octave/2.0.16/m/mia_directory

Per esempio calcoliamo in quale punto la funzione seno (viene passata come stringa) ha una radice nellintervallo I=[2,4], con una precisione sulla soluzione no alla quarta cifra decimale:
y = bisezione(sin,2,4,10e-4);

effettivamente, come ci aspettavamo la risposta 3,1416...

Octave e la graca

Uno dei punti forti di MATLAB senzaltro rappresentato dalle enormi capacit grache. Anche su questo fronte non si pu dire che Octave sia da meno. Per loutput graco, a differenza di MATLAB che ha un visualizzatore di graci incorporato, Octave si poggia su un altro programma: il leggero ma potente GNUPLOT (cfr. [3]). Anche di questultimo esiste la versione per Windows (se installate Octave per Windows trovate GNUPLOT incluso nel pacchetto). Afnch sia possibile visualizzare graci su Linux, necessario avviare Octave da X (per esempio tramite xterm - Figura 1). Proviamo quindi a fare il plot di una funzione, per esempio della funzione seno. Deniamo dapprima il range dei valori della variabile x, imponendo che le ascisse varino fra -p e p con passo 0.001:
x = -pi:0.001:pi;

conviene aggiungere il ";" altrimenti vedremmo scorrere a video molti valori! Quindi calcoliamo le ordinate:
y = sin(x);

i punti sono pronti: non ci resta che eseguire il plot con 7

plot(x,y)

Se siamo amanti delle tre dimensioni e vogliamo stressare la nostra CPU, proviamo le mesh di Octave. A titolo di esempio, il seguente M-le contiene le istruzioni per il plot del Nastro di Mebius ed in Figura 2 potete osservarne loutput.
% Esegue il calcolo del "Nastro di Moebius" function [] = moebius() a = -3:0.1:3; b = 0:0.1:2*pi; [u,v] = meshgrid(a,b); x = (10 + u .* sin(v ./ 2)) .* cos(v); y = (10 + u .* sin(v ./ 2)) .* sin(v); z = u .* cos(v ./ 2); mesh(x,y,z) end;

Figura 2: Il Nastro di Mebius ottenuto con GNU Octave.

Conclusioni

Ovviamente questo articolo non ha la presunzione di presentare tutti gli aspetti e le funzionalit di Octave, che spaziano dalla risoluzione di equazioni differenziali alladdestramento di reti neurali, ma vuole essere un incoraggiamento a provare questo fantastico programma (tanto non costa niente: proprio il caso di dirlo). Se decidete di installarlo, trovate una ottima documentazione sia come pagine di manuale, consultabili col comando:
info octave

sia digitando da Octave:


help

Inoltre sul sito troverete anche esempi e librerie utili.

Riferimenti bibliograci
[1] GNU Octave, http://www.octave.org/download.html [2] Mathlinks, http://sourceforge.net/projects/mathlinks [3] Gnuplot, http://www.gnuplot.info

10