Interpolazione polinomiale

10 04 2011

Cominciamo a spiegare cosa è l’interpolazione polinomiale. Immaginate di avere una curva analitica da studiare y=”qualcosa di complicato”, oppure una serie di dati in coppie (x1,y1), (x2,y2)…. con tutti gli xi diversi.
Come potete ben immaginare non sarà sempre un oggetto semplice da studiare.

Un tipo di curve particolarmente semplici da studiare sono i polinomi, e quindi ci piacerebbe trovare dei polinomi che assomiglino alle funzioni che vogliamo studiare, in modo da avere un lavoro più semplice da svolgere.
Per chi conosce relativamente bene la matematica avrà magari pensato ai polinomi di Taylor o al caso particolare McLaurin, ma noi vogliamo prendere polinomi che siano anche molto semplici da costruire. Fare le derivate non è sempre una operazione semplice e poi questi due polinomi sono adatti per fare una analisi locale in un punto, non sempre approssimano una funzione su un intervallo.

Il metodo è utilizziamo è il seguente (supponendo di dover sudiare una funzione in una variabile o qualcosa di analogo)
Scegliamo sull’intervallo che vogliamo studiare n+1 punti. Fissati questi punti sull’ascissa delle x li valutiamo e otteniamo la coppie (x1,y1),(x2,y2),…

A questo punto si può dimostrare che esiste un solo polinomio di grado n (ad esempio per due punti distinti passa una sola retta, per tre punti distinti una sola parabola…). Il problema (ma neanche tanto complicato) è come costruirlo.

Il primo metodo è quello di Vandermonde. Si considera un generico polinomio di grado n e si impongono tutte le condizioni. Dovremo quindi poi risolvere un sistema lineare, che coincide con una matrica, guarda a caso, chiamata matrice di Vandermonde…

Il secondo metodo, forse più “diretto” e che uso più spesso (ma siete liberi di usare il metodo che volete) è quello di Lagrange.
Si costruiscono n polinomi L_i(x) di grado n tali che $latexL_i(x_j)=0$ per ogni i diverso da j, mentre L_i(x_i)=1. Il polinomio interpolante sarà quindi semplicemente \sum_i(L_i(x)*y_i). Provare per credere se inserite nel polinomio il valore x_i otterrete il valore y_i.

Facciamo un esempio, dati i nostri punti da interpolare:
(1,2), (2,3), (3,4)
Costruiamo
L_1(x)=\frac{(x-2)(x-3)}{(1-2)(1-3)}\ \ \ L_2(x)=\frac{(x-1)(x-3)}{(2-1)(2-3)}\ \ \ \L_3(x)=\frac{(x-1)(x-2)}{(3-1)(3-2)}
E quindi abbiamo P_3(x)=2*L_1(x)+3*L_2(x)+4*L_3(x) il nostro polinomio interpolante!

Il terzo metodo, concettualmente più complicato ma da un punto di vista operativo molto più conveniente.
Infatti se adesso volessimo il punto (4,5) ai nostri punti precedenti, dovremmo rifare tutti i conti per ottenere il polinomio interpolante. Con il metodo delle differenze divise i conti si riducono drasticamente se vogliamo aggiungere dei punti.

Sono un poco più complicate da spiegare e mi porterebbero via tanto spazio, rischiando di rendere poco leggibile il tutto, pertanto vi rimando a Wikipedia, purtroppo l’articolo in italiano non esiste, e purtroppo la spiegazione in inglese non è (a mio parere) molto buona, trovo quella in tedesco più comprensibile, qui l’algoritmo viene anche chiamato di Neville-Aitken ma temo che non tutti conosciate abbastanza questa lingua.

In ogni caso, il metodo di Lagrange sarà quello che useremo per interpolare un polinomio, vediamo un esempio!

Ho scritto le function lagr.m per il metodo di lagrange, e per chi volesse anche diffdiv_coeff.m, che servono per creare i polinomi interpolanti.
Vogliamo, ad esempio, interpolare con un polinomio di grado 5 la funzione sin(2*pi*x) nell’intervallo [-1,1].
Creiamo quindi uno script-file (considerate che da ora in poi qualsiasi esercizio lo dovete fare su uno script-file, per poterlo correggere, rileggere, salvare…) e cominciamo a scrivere:

f=inline('sin(2*pi*x)');
xnodi=linspace(-1,1,5+1); %ci servono n+1 punti per avere un polinomio di grado n!
ynodi=f(xnodi); %qui stiamo valutando la nostra funzione nei nodi d'interpolazione
x=linspace(-1,1);
p_lag = lagr(xnodi,ynodi,x);
y=f(x);
plot(x,y,x,p_lag)

Dopo aver eseguito lo script-file verrà visualizzato un grafico contenente le due funzioni. È auspicabile pensare che all’aumentare del grado n del polinomio aumenti la somiglianza tra le due funzioni. Provate infatti ad aumentare il numero di nodi a 11.

La funzione lagr.m si occupa di valutare il polinomio interpolanti sull’asse delle x, in sostanza quello che ci restituisce è un vettore con la valutazioni del polinomio interpolante.

Purtroppo però non è vero che prendendo nodi equispaziati (come li abbiamo scelti nell’esempio precedente) la funzione interpolante aumenti il grado di precisione all’aumentare del grado del polinomio stesso. Esiste infatti un famoso controesempio, il controesempio di Runge. Per visualizzarlo potete scaricare il file runge.m e provare ad eseguirlo con Octave.

Possiamo notare che al crescere di n le due funzioni non sono poi tanto simili e si può dimostrare che queste differenze diventano sempre più evidenti.

Risolto quindi il problema di come studiare una funzione generica attraverso un polinomio ci dobbiamo porre il problema di come scegliere i nodi d’interpolazione, in modo che al crescere del loro numero il polinomio interpolante assomigli alla funzione da studiare. Dal controesempio di Runge appare ovvio che scegliendo più nodi ai bordi si costringerebbe il polinomio interpolante a stare più vicino alla funzione da approssimare.

Si può dimostrare, che scegliendo i nodi di Tschebyscheff (valori che sono soluzione di un particolare polinomio), la funzione interpolante tenderà sempre al polinomio da studiare. Per fortuna questi nodi non sono difficili da calcolare, se stiamo lavorando nell’intervallo [-1,1] questi sono tutti nella forma: x_j=\cos((2_j-1)*\frac{\pi}{2(n+1)}), dove n è il grado di interpolazione e j assume i valori da 1 a n.

Se lavoriamo su un generico intervallo [a,b] basterà effettuare la trasposizione t_j=(b-a)*x_j/2+(b+a)/2 e valutare il problema con i nodi t_j.
Proviamo quindi a eseguire runge2.m. Avremo però bisogno di mettere tra le nostre function nodicheb.m che si occupa di creare i giusti nodi.
Possiamo osservare che all’aumentare dei nodi il polinomio interpolante diventa sempre più simile alla nostra funzione.

Ovviamente non è strettamente necessario usare le mie function per interpolare un polinomio, le ho messe a disposizione soltanto per scopo didattico. Octave integra già questa possibilità attraverso il comando polyfit(xnodi, ynodi, n), dove n è il grado del polinomio che vogliamo ottenere e xnodi, ynodi sono due vettori di lunghezza n+1.

A questo punto potete passare agli esercizi. Ovviamente potete interpolare anche altri tipi di funzioni!





Funzioni matematiche e grafici

17 03 2011

Ecco un nuovo capitolo a questa guida su Octave

Grafici (2D)
In Octave è possibile creare grafici in modo molto semplice utilizzando il comando plot. Un esempio è sicuramente più che esplicativo:

x=linspace(0,10); %genera valori su cui valutare la funzione, vettore delle ascisse
y=x.*cos(x)/2; %valutiamo la funzione nei punti definiti prima, vettore delle ordinate
plot(x,y);

Ovviamente è possibile passare diversi paramatri con il comando plot, se volevamo una linea rossa è tratteggiata avremmo dovuto dare il comando

plot(x,y,'r--') %per altre opzioni date il comando
doc plot

(così imparate un poco a usare il doc, che può davvero salvare in molte situazioni).
Vale la pena menzionare però un altro paio di comandi, che si possono dare subito dopo aver disegnato la funzione.
Il comando “grid”, dato dopo il comando plot(…) aggiunge le linee di griglia, mentre il comando “hold on” permette di disegnare più grafici sullo stesso foglio. Per smettere di disegnare grafici sullo stesso foglio basta dare “hold off”. Oppure, sempre per disegnare più grafici sullo stesso foglio, li si può passare entrambi sotto lo stesso plot(…), ecco un paio di esempi:

x=linspace(0,10);
y1=x.*cos(x);
y2=sin(x);
plot(x,y1,'r' , x,y2,'b');

oppure:

x=linspace(0,10);
y1=x.*cos(x);
plot(x,y1,'r');
hold on
y2=sin(x)
plot(x,y2,'b')
hold off

Funzioni
Abbiamo già visto per il disegnare i grafici, come possiamo creare delle funzioni da disegnare. In sostanza abbiamo creato dei vettori con i valori valutati nei punti sul quale era definita la funzione.
Se però, oltre a disegnarla con una funzione dobbiamo anche lavorarci, sapere per quali punti passa potrebbe non bastare.
Attraverso il comando inline è possibile definire una generica funzione, ad esempio:

f=inline('sin(x).*x', 'x')

Se diamo il comando “whos” potremo infatti vedere che a f non è associato un numero, bensì una funzione.
Se adesso, come prima vogliamo disegnare la nostra funzione, possiamo operare nel seguente modo:

x=linspace(-5,5);
y=f(x);
plot(x,y)

Grafici (3D)
Quando ci ritroviamo a disegnare un grafico in 3 dimensioni dobbiamo distinguere se stiamo per andare a disegnare una curva, oppure una superficie, due oggetti che vengono trattati in modo distinto.

Se vogliamo disegnare una curva, possiamo adottare la seguente sintassi

t=linspace(0,20*pi,1000);
plot3(cos(t).*t, sin(t).*t,t);

Se invece vogliamo disegnare una superficie abbiamo bisogno di due variabili una x e una y. I grafici possiamo disegnarli come nel se

guente esempio con la funzione mesh

x=y=linspace(-2*pi,2*pi,40);
[X,Y]=meshgrid(x,y);
Z=sin(X).*sin(Y);
mesh(X,Y,Z)

oppure, al posto di mesh(X,Y,Z) possiamo dare il comando surf(X,Y,Z)

Polinomi
Abbiamo visto come definire una funzione generica attraverso il comando inline, nel caso di polinomi è però possibile considerare un’altra sintassi.
Supponiamo di avere un polinomio di grado n (cioè con il primo coefficente diverso da 0)
a_n*x^n+a_{n-1}*x^{n-1}+...+a_1*x+a_0
allora possiamo rappresentarlo attraverso il vettore dei coefficienti di dimensione n+1.
Se vogliamo valutare il polinomio in un punto, possiamo fare così:

p=[2 3 4 0]
x=2;
w=polyval(p,x)

Se vogliamo invece disegnare un grafico, allora possiamo valutarlo in un vettore di punti, ad esempio:

p=[-3 0 -1 2];
x=linspace(-5,5);
plot(x, polyval(p,x));

Mentre per la somma di due polinomi basta sommare due vettori (osservando che devono avere la stessa lunghezza, si può usare ad esempio la function polyadd), per il prodotto esiste una function apposita:

p=[-3 0 -1 2];
q=[1 -3];
conv(p,q)

Per calcolare la funzione derivata e la funzione integrale esistono i comandi appositi polyint e polyder.

Come al solito, ecco alcuni esercizi e le relative soluzioni.





Script file e function in Octave

11 03 2011

Comincia qui la seconda lezione di Octave
Script-file
Normalmente è possibile navigare nella cronologia dei comandi effettuati premendo il tasto su o giu, risulta però molto comodo salvare su dei file tutte le istruzioni date, con tanto di commenti, in modo da poter ritirare fuori, a distanza di giorni, mesi o anni, il proprio lavoro.

I file che introduciamo ora si chiamano script-file, per saranno file con estensione .m, e il loro contenuto è una sequenza di istruzioni, scritte come se fossero digitate direttamente in Octave.
Per eseguirli, da Octave, se ci si trova nella stessa cartella dello script-file, basta digitare il nome del file (senza l’estensione).

Notate che normalmente si deve ad uno script-file un nome diverso dalle funzioni già presenti in Octave, altrimenti Octave utilizzerà la funzione al posto del vostro script-file.
Per controllare se un nome esiste già potete dare il comando

exist('nome_file')

Se il comando esiste vi verrà riportato un numero diverso da 0.
Il seguente script-file calcola, ad esempio, la somma dei primi n numeri:
somma.m

%Questo script-file (somma.m) calcola la somma da 1 a n.

n=input('inserisci un numero intero positivo')
v=[1:n];
s=sum(v);
disp('somma= ')
disp(s)

I commenti sono normalmente preceduti da %, oppure, per chi conosce già il C o un minimo di bash, #. Tuttavia in Matlab non è possibile, quindi in questi tutorial, userò la sintassi compatibile con Matlab, appunto per mostrare quanto siano intercambiabili (almeno fino ad un certo livello) i due programmi. Come potete infatti notare, nella documentazione di Octave i commenti vengono dati antecedendo il simbolo ‘#’, mentre nella documentazione di Matlab si usa il simbolo ‘%’ che può appunto venir anche usato in Octave.

Function
Le function sono, normalmente, degli “script-file” che accettano dei parametri e danno un risultato. Normalmente vengono richiamate dagli script-file, inoltre la loro sintassi è leggermente diversa, in modo da essere facilmente interpretati da altri file.
L’intestazione deve avere la struttura
function [out_1,out_2,...out_n]=nomefunction(inp_1,inp_2,...,inp_n)

Il file deve avere il nome “nomefunction.m” e un file può contenere una e una sola function.
Per interrompere la function è consigliato usare la parola return, e i valori output1,output2,…outputn devono essere stati tutti assegnati.
Una function viene richiamata semplicemente nel seguente modo:

[value1, value2, ...valuen]=nomefunction(input1, input2, ...inputn)

A titolo di esempio scriviamo un function che, dato un vettore, riporta il minimo e massimo e elemento

function [min, max]=minmax(v)
%Questa function riporta il minimo e massimo elemento di un vettore
min=min(v);
max=max(v);
return

Come già scritto più volte in precedenza, uso questa sintassi per il Matlab, mentre per Octave sarebbero possibile anche altre soluzioni più specifiche che non presento, appunto per mantenermi compatibili con ambedue i programmi. Qui trovate ad esempio la documentazione per Octave, non sono però sicuro che Matlab riconosca il comando endfunction (purtroppo non possiedo Matlab e quindi non ho potuto controllare), per evitare questo problema vi do’ il link alla documentazione di Matlab.

In uno dei primi articoli ho scritto che avremmo dovuto creare una cartella dove avremmo posizionato le nostre function. Se non lo avete ancora fatte fatelo, e salvate la function minmax.m (assicuratevi di salvarla con il nome giusto!)

Cicli in Octave
Come in tutti i linguaggi di programmazione anche in Octave è possibile definire dei cicli. In sostanza si dice a Octave di ripetere un certo calcolo (in cui ovviamente i numeri dati varieranno) finché non accade una certa condizione preimpostata.

Cicli while
La sintassi è la seguente
while (condizione==true)
istruzione
end

un esempio sciocco

>n=0;
>while (n<5) >n=n+1
>end

Questo ciclo aumenta di 1 il numero n (che abbiamo impostato a 0 prima) finché esso è minore di 5, per n=0,1,2,3,4 questa condizione è vera, quando n=5 non lo è più e il ciclo si ferma.

Cicli for
La sintassi è la seguente:
for contatore=inizio:passo:fine
istruzioni
end
oppure al contatore possiamo assegnare i valori di un vettore.

In ambedue i casi nel ciclo for un istruzione viene eseguito un numero predefinito di volte per i valori che il contato assume.
ad esempio

>for i=1:10 %(oppure i=1:1:10)
>disp('ciao')
>end

Qui il ciclo viene eseguito 10 volte, e in ogni ciclo verrà visualizzata la scritta “ciao”

Normalmente in Octave è sconsigliato, quando si può, scrivere cicli.
Ovviamente gli esempi di prima sono poco significativi, supponiamo però di voler calcolare la media di un vettore v=[1 2 3 4 5 6]
con un ciclo for scriveremmo

>n=0
>for i=v %v è il vettore, i assume i valori presenti nel vettore
>n=n+i
>end
>media=n/lenght(v)

Un modo molto più elegante è quello di scrivere

>media=sum(v)/length(v)

oppure

>mean(v)

visto che in questo caso esiste la funzione apposita.
Evitare cicli, ma effettuare operazioni vettoriali o matriciali permette di risparmiare tempo, su vettori con pochi componenti, come tutti quelli tratti in esempio, la differenza sarà praticamente nulla, ma se si deve lavorare con centinaia di centinaia di valori, dati che vengono da un esperimento, allora anche risparmiare pochi decimi di secondo ad ogni operazione può significare di risparmiare ore e ore di elaborazione dei dati per un codice scritto in maniera più pulita e efficiente.

Operatori logici
In informatica vengono spesso usato operatori logici (oppure booleani), che riportano il valore 0 se una cosa è falsa, un numero diverso da 0 (per convenzione 1) se una cosa è vera.
Gli operatori logici in Octave sono:

>,<,>=,<=,==,~=

potete provare a definire un vettore (o un numero) a e b provare i comandi

>a==b
>a~=b

e via dicendo e osservare i risultato. Le operazioni vengono fatte per ogni componente.

Vi sono poi i seguenti operatori

& , ||, ~, xor

a & b vi da una condizione vera se gli vengono passate due condizioni vere (cioè due numeri diversi da 0, ad esempio
>6 & 3)
a||b da una condizione vera se almeno una delle due condizione che gli vengono passate è vera
xor(a,b) da vero se solo una delle due condizioni è vera/falsa
~a vi da la condizione opposta; da falso se gli passata un qualcosa di vero, da vero se gli passate qualcosa di falso.

Istruzioni if
la sintassi generica è
if (condizione1==true)
istruzione1
elseif (condizione2==true)
istruzione2
elseif …

else
istruzione3
end

In pratica Octave controlla se una condizione è vera (cioè se nella parentesi ha un numero diverso da 0), se lo è esegue una operazione, se non lo è va a controllare se è vera un’altra condizione per eseguire un’altra istruzione.
Esempio

if (n==5) %si vedano gli operatori logici per il significato
disp('n è uguale a cinque')
elseif (n>5)
disp('n è maggiore di cinque')
else
disp('n è minore di cinque')
end

Finita anche questa lezione, eccovi gli esercizi e le soluzioni. Ovviamente è un’ottima idea salvare anche tutti gli esercizi del capitolo precedente sotto forma di script-file, in modo da averli tutti salvati insieme ;)





Scalari, vettori e matrici in Octave

7 03 2011

Comincia ora la prima, di una serie, guida di Octave.
In questo capitolo parlerò dei valori scalari, vettori e matrici, come anche delle operazioni principali che possiamo effettuare con esse. Per chi avesse ravanato un poco nei miei articolu più vecchi avrebbe trovato questo articolo su gnuplot, dove avevo messo una tabella riassuntiva di molte funzioni analitiche, ovviamente anche presenti in Octave.

Valori scalari
Con valori scalari si intendono le cifre, reali o complesse è indifferente. In questo modo si assegnano ad una variabile i valori scalari:

>a=5
a=
 	5
>b=5-1
b=
 	1

Se non viene specificata una variabile, il valore viene assegnato in automatico alla variabile ans

>3
ans=
 	3
>0*2
ans=
 	0

Le operazioni elementari +,-,*,/,^ sono definite nel modo naturale, attraverso le parentesi “(” e “)” è possibile dare la precedenza alle operazioni. (In Octave è possibile scrivere anche ** al posto di ^, ma in Matlab questa sintassi non è accettata.) Se scriviamo “;” alla fine di un comando, viene omesso l’output:

>z=5;

Se abbiamo bisogno di sapere quali variabili abbiamo già usato, possiamo usare il comando “who”

>who

Con il seguente comando cancelleremo tutte le variabili in memoria

>clear all

Sono definite inoltre molte altre funzioni, come ad esempio: abs(x), sqrt(x), exp(x), log(x), sin(x),cos(x), tan(x), asin(x), …
E anche alcune variabili: pi, i,j, exp(1) che ovviamente possono venir sovrascritte con una assegnazione

I vettori
I vettori vengono assegnati nel seguente modo: vettore riga

>a=[1 2 3]
a=
 	1	2	3

vettore colonna

>b=[1;2;3]
b=
 	1
 	2
	3

Si possono inoltre assegnare vettori nel seguente modo:

>c=[1:4]
c=
 	1	2	3	4
>d=[1:0.5:4]
d=
 	1.0000	1.5000	2.0000	2.5000	3.0000	3.5000	4.0000

qui 0.5 segna il “passo”, cioè la distanza tra due numeri adiacenti

>e=linspace(0,1,5) e= 	0.00000	0.25000	0.50000	0.75000	1.00000

mentre qui abbiamo l’intervallo [0,1] diviso in 5 sottointervalli larghi uguali.
Esistono svariate operazioni (non solitamente usate in matematica) che si possono fare con i vettori: per conoscere la lunghezza di un vettore:

>length(c)
ans= 	3

per accedere ad un singolo componente:

>d(2)
ans= 	1.5000

l’ultima posizione del vettore è sempre end:

>d(end)
ans= 	4.0000

Per chi sa un poco programmare: In Octave, al contrario che, ad esempio in C, l’indicizzazione comincia da 1, non da 0, infatti proviamo a vedere cosa conterrebbe il componente 0 di un vettore:

>d(0)
error: subscript indices must be either positive integers or logicals.

Ovviamente un indice non naturale non è di alcun significato.
Si può inoltre trasporre un vettore:

>c=c'
c=
 	1
 	2
 	3
 	4

Ovviamente le operazioni matematiche sono tutte definite, in modo particolare la norma euclidea:

>norm(e)
ans= 	1.3693

oppure altri tipi di norme con la seguente sintassi: “norm(v,p)” Dove p è un valore numerico positivo oppure inf. In Octave è definita anche la norma -inf (anche se non si tratta propriamente di una norma, come tutte le norme negative).
La somma e la differenza vengono trattati in modo analogo ai scalari, si deve solo fare attenzioni che i vettori abbiano le stesse dimensioni e siano tutti e due orizzontali o verticali.
Per il prodotto scalare invece ci si deve preoccupare di avere due vettori di ugual dimensioni, il primo orizzontale, il secondo verticale. In alternativa si può usare il comando “dot(v,w)” con v,w due vettori di ugual lunghezza. Octave provvederà da solo ad assicurarsi che uno sia orizzontale e l’altro verticale.
È definito anche il prodotto vettoriale attraverso il comando “cross(v,w)”, con v e w due vettori di ugual lunghezza.
È possibile sommare tutti gli elementi di un vettore, attraverso il comando “sum(v)”, con v vettore, mentre con “prod(v)” verrà eseguito il prodotto delle componenti. Le funzioni “max(v)” e “min(v)” vi daranno come output l’elemento massimo e minimo del vettore. La funzione “sort(v)” ordinerà gli elementi del vettore in ordine di grandezza mentre il comando “diff(v)” effettuerà la differenza a due a due di tutti i componenti del vettore (secondo componente meno il primo, terzo componente meno il secondo…) e come output vi darà un vettore di con n-1 entrate (supponendo che la dimensione di v fosse n) .
Inoltre è possibile fare anche alcuni operazioni “componente per componente”. Queste non sono operazioni che vengono di solito definite/usate in matematica, ma sono di largo uso in ambito numerico e permettono di risparmiare (per chi conoscesse un poco di programmazione) l’uso di cicli for.
Abbiamo ad esempio il prodotto componente per componente:

>a=[1 2 3];
>b=[4 5 6];
>c=a.*b
c=
 	4	10	8

Allo stesso modo si definisce la divisione, e l’elevamento a potenza tra due vettori. Operazioni come la somma, la differenza, il prodotto/divisione con uno scalare, sono già definite componente per componente come normalmente lo sono in matematica, mentre funzioni come modulo, seno, coseno, logaritmo, exp… oppure la somma/sottrazione con uno scalare sono anch’esse, in Octave, definite componente per componente (si può pensare che lo scalare viene prima moltiplicato con un vettore di 1 prima di effettuare la somma/sottrazione).
In sostanza le uniche funzioni per la quale serviva una definizione a parte per le operazioni “componente per componente” sono il prodotto, la divisione e l’elevamento a potenza tra due vettori.

Matrici
Come gli scalari sono un caso particolare dei vettori (si trattano, a tutti gli effetti, di vettori con una riga (o una colonna, dipende come si pone il vettore)), i vettori sono matrici particolari, nuovamente con una sola riga, oppure colonna. In Octave è possibile definire matrici n*m, e normalmente si lavora con esse. Ovviamente sono anche definite le operazioni “det(A)” (il determinante) e inv(A) (per calcolare l’inversa di una matrice), supponendo che A sia una matrice quadrata. Tutti i discorsi sulle operazioni “componente per componente” introdotte sui vettori, si applicano anche alle matrici, mentre per le funzioni che sono state introdotte ai vettori si estendono alle matrici, ricordandosi che le operazioni vengono effettuate sulle righe, e quindi l’output non sarà uno scalare, bensì un vettore.
Ad esempio

>A=[1 2 3;7 8 9; 4 5 6];
>sum(A)
ans=
 	12	15	18

La somma viene quindi fatta sulle colonne (si può pensare che le matrici siano vettori di vettori…)

>prod(A)
ans=
 	28	80	162
>sort(A)
ans=
	1	2	3
	4	5	6
 	7	8	9

Anche la funzione “max” e “min” lavorano allo stesso modo, su colonne. se invece diamo il comando

>a=diag(A)
a=
 	1 	8 	6

otteniamo in output la diagonale di A, se diamo invece

>A2=diag(a)
A2=
 Diagonal Matrix
 	1	0	0
	0	8	0
 	0	0	6

Dando “diag(a,n)” o “diag(A, n)” si sposta di n righe (verso l’alto o il basso dipende dal segno di n) la diagonale interessata. Al posto di lavorare direttamente sulle matrici, si può lavorare anche su sottomatrici, ad esempio:

>A(1,2)
ans=	2
>A(2,:)
ans=
 	7	8	9

Se vogliamo, ad esempio eliminare una colonna dobbiamo scrivere

>A(:,2)=[]
 A=
 	1	3
 	7	9
 	4	6

Un’altra operazione importante che si può fare con le matrici (e quindi anche i vettori), è la concatenazione. Scrivete ad esempio

>B=[A A]

oppure

>B=[A;A]

Esistono poi matrici particolari che vengono spesso usate in calcolo numerico:

eye(n) %crea la matrice identità di dimensione n*n
ones(m,n) %crea una matrice di 1 di dimensione m*n
zeros(m,n) %crea una matrice di 0 di dimensione m*n
rand(n,m) %crea una matrice di dimensione n*m di valori pseudocasuali

Dopo questo lungo capitolo, eccovi un po’ di esercizi, giusto per vedere se avete capito tutto e per eventualmente chiarire dubbi!
I risultati sono salvati sui file con l’estensione .m, per ora vi basta sapere che dovete copiare-incollare le singole istruzioni sulle righe, la prossima volta vedremo invece meglio cosa sono.





Octave, installazione, personalizzazione e i numeri sul calcolatore

1 03 2011

Voglio fare una piccola premessa.
Io il programma lo ho testato su un sistema Debian ma tutte le indicazioni fatte, rimangono invariate per tutti i sistemi (escluse le considerazioni fatte sui percorsi, su Windows saranno un po’ diversi).
Per l’installazione dovete usare i package manager presenti nella vostra distro, come aptitude oppure yum. È consigliato inoltre installare oltre al pacchetto octave anche octave-doc e octave-info per avere la documentazione. Se usate Windows o se Octave non è presente nei vostri repository recatevi al sito di Octave, i pacchetti che ho installato sul mio sistema terminale sono octave octave-doc octave-info
Come editor di testo (vedremo più avanti perché ce ne servirà uno) uso personalmente gedit, in quanto è in grado di riconoscere la sintassi di Octave, ma vi sono tantissimi editor in grado su farlo. Su Windows di default insieme ad Octave verrà installato noteppad++, ovviamente in grado di riconoscere la sintassi.

Octave, durante questo laboratorio, verrà usato dal terminale (non abbiamo infatti installato nessuna interfaccia grafica, ma niente vi vieta di cercarne una).
Ogni riga comincia con

>

I comandi scritti verranno interpretati solo dopo essere andati a capo (premere tasto enter).
Nel caso di errori di sintassi Octave produrrà un output segnando dove si trova l’errore oppure il tipo di errore commesso
Per chiudere il programma Octave basta dare il comando

>quit

oppure

>exit

Alcuni comandi che vengono normalmente usati in un sistema Gnu che si ritrovano all’interno di Octave sono:
pwd (mostra dove ci troviamo all’interno del sistema)
mkdir (serve per creare cartelle
ls (serve per visualizzare il contenuto della cartella in cui ci troviamo)
cd (serve per muoversi da una cartella all’altra)
Esempio:

>pwd
/home/fekir
>ls
Documenti	Multimedia
>mkdir Laboratorio
>ls
Documenti	Multimedia	Laboratorio
>cd Laboratorio
>pwd
/home/fekir/Laboratorio

Attenzione perché i comandi sono case sensitive, se avessimo scritto

>cd laboratorio
error: laboratorio: No such file or directory

Avremmo ottenuto un errore, che ci informa, che tale cartella (o file, ma non in questo caso) non esiste.

Spesso si inoltre a che fare con diverse funzioni predefinite e può darsi di non sapere bene come funzionano.
I comandi help e doc servono a capire come funzionano, ad esempio:

>help sqrt
>doc sin

Inoltre in Octave è possibile impostare una cartella dove posizionare le function che scriveremo. Vedremo più avanti cosa sono e come funzionano, ma possiamo già impostare una cartella.
Se abbiamo i permessi di amministratore andiamo a modificare il file

/usr/share/octave/3.2.4/m/startup/octaverc

(notate che se la vostra versione è diversa dalla 3.2.4 dovrete cambiare il percorso), dovreste trovare una linea del tipo

addpath (genpath ("/usr/local/share/octave/site-m"), "-begin");

sotto di questa aggiungiamo semplicemente

addpath("~/.octave/function")

. Dobbiamo poi creare nella nostra home la cartella .octave/function, e qui andremo, nei laboratori successivi, a inserire le function che vi darò o scriverete.
Altrimenti (sopratutto se non avete i permessi di amministratore) potete farlo direttamente da Octave dando il comando

addpath("~/.octave/function")

Il vantaggio di fare l’operazione da amministratore era nel caso aveste un computer con più utenti, in tal caso la modifica avrebbe interessato tutti gli utenti, in questo modo invece soltanto il vostro profilo.
Se volete rimuovere tale percorso basta rimuovere la riga scritta oppure dare da Octave il comando

rmpath("~/.octave/function")

Questa nota vale agli utenti che usano Windows, in quanto sui Sistemi Microsoft il terminale appare molto povero. Mentre sui sistemi Gnu/Linux il programma octave parte con le impostazioni predefinite del vostro terminale, su Windows (almeno nel mio caso quando ho fatto una prova), partiva con dei caratteri un po’ bruttini e troppo piccoli.
È per fortuna possibile personalizzare l’ambiente, facendo click destro sul collegamento a Octave (o direttamente con l’eseguibile) si può impostare i font da usare, la dimensione dei caratteri, i colori, e molto altro.

I numeri a virgola mobile
Vediamo adesso di dare una veloce (molto veloce) rappresentazione dei numeri sul calcolatore.
Sui calcolatori, si sa, la memoria disponibile è finita, quindi è ad esempio impossibile scrivere numeri irrazionali, che dopo la virgola hanno infinite cifre. Dal momento che quindi è impossibile rappresentare la maggior parte dei numeri reali, sui calcolatori si lavora con i numeri floating point, altrimenti chiamati numeri a virgola mobile.
Questi numeri rappresentano i numeri reali fino ad una certa cifra, dopo di essa vi è un troncamento. Normalmente gli errori sono molto piccoli, “invisibili” all’occhio umano, però, un errore, per quanto piccolo sia, si può propagare e aumentare, portando a dei risultati “sbagliati”.
Vediamo un semplice esempio, scriviamo in Octave:

>n=2;
>while (n>0)
>n=n/2;
>end
>n

Vediamo cosa abbiamo pressapoco scritto. Dapprima abbiamo assegnato ad n il valore due, poi diciamo ad Octave che finché n non è pari a 0, n verrà dimezzato.
Ovviamente questo ciclo dovrebbe risultare infinito. Nel senso che se dividete un numero in due, la sua metà sarà ancora diversa da zero. Ovviamente se pensate al significato analitico di quello che abbiamo scritto, stiamo facendo tendere n a 0, ma vi ricordo che questo è un limite per quando facciamo infinite operazioni. Eppure Octave si ferma dopo poco e valuta n come se fosse nullo proprio perché l’errore di cui vi ho parlato prima rende n e il numero 0 uguali.
Se riscrivete il ciclo di prima, senza il “;” dopo n=n/2, vi verrà mostrata ogni iterazione, e potrete notare come viene dimezzato n di volta in volta, fino a diventare un numero piccolissimo: 4.9407e-324
Vuol dire che ci sono 324 zeri prima che appaia una cifra diversa da zero. L’errore è senz’altro minuscolo, però rischia appunto di aumentare se il numero n venisse poi usato per altri calcoli, poiché (in questo caso specifico) moltiplicare per 0 o un numero diverso costituisce una grossa differenza. E sono state necessario “solo” 1076 iterazioni per annullare n.
Questi numeri possono apparire assurdi, ma durante la simulazioni di modelli matematici poter gestire numeri minuscoli o giganteschi mette a dura prova la precisione dei calcolatori.
Esistono poi dei numeri un poco particolari: Inf, -Inf, NaN, cioè infinito, meno infinito e Not a Number.
I primi due numeri si ottengono quando ad esempio state considerano numeri (in valore assoluto) troppo grandi. Visto che la memoria del calcolatore è finita, da un certo numero in poi (un numero a 308 cifre) i numeri verranno trattati come infinito. NaN è una espressione che si ottiene moltiplicando un numero infinito con un numero nullo, oppure facendo la differenza tra due infiniti, casi in cui, a priori, è impossibile dire quale sarà il risultato.
Ci sarebbe ancora tanto da dire sulla rappresentazione numerica sui calcolatori, ad esempio non valgono sempre le proprietà commutative o associative, ma penso che questa piccola parte sia sufficiente per capire un poco cosa succede dietro lo schermo e perché esistono gli errori di arrotondamento.





Octave al posto di Matlab

26 02 2011

In questo Blog vi avevo già parlato una volta, di Octave (qui e qui), e ora torno a farlo nuovamente, per un motivo diverso.

In ambiente universitario può capitare che gli studenti debbano fare dei laboratori, ad esempio, di calcolo numerico. E il software che viene dato in dotazione è, purtroppo, troppo spesso Matlab. Ultimamente si parla sempre di crisi, che vogliono togliere i soldi alle università e via dicendo. Ora, non voglio fare polemica (ma parlare di software open) e analizziamo un attimo i fatti.

Personalmente non ho assolutamente nulla contro Matlab, probabilmente è un ottimo prodotto e di qualità, ma a mio parere non vale la pena spendere centinaia e centinaia di euro per tenere su dei laboratori, quando alternative libere come Octave, Scilab o altri ancora possono essere più che sufficienti. Anche perché, tra i vari problemi che incorrono nel software proprietario, escludendo il fattore puramente economico, si ha che (nel caso di Matlab, ma spesso si può generalizzare)
1) Le richieste minime dell’hardware sono assai più superiori delle controparti libere, e spesso i computer delle aule informatiche non sono recentissimi. Matlab richiede ad esempio 2 Gb di ram (minimo assoluto 1) e 10Gb di spazio sul disco. Ovviamente i computer di oggi sono molto più potenti, ma su computer di anche solo 5 anni fa i due Gb di ram cominciano a diventare pochi…
2) Vi è un incremento sostanziale alla pirateria, lo studente medio vorrebbe poter lavorare a casa con gli stessi programmi che si usano in laboratorio (giustamente)
3) Ovviamente mancano tutti i vantaggi del software libero (poter migliorare il programma alle proprie esigenze, offrire collaborazione per avere la documentazione italiana, poter aggiungere funzionalità intrinseche che possono servire anche per la ricerca all’interno di un dipartimento…)

Notate che non sto dicendo che le università dovrebbero smettere di usare Matlab dall’oggi al domani. Sto dicendo che è inutile usare Matlab se sono disponibili alternative libere, sopratutto per non mettere in difficoltà lo studente. Se poi il ricercatore universitario deve assolutamente usare Matlab perché gli servono delle funzioni che li sono presenti e in Octave/Scilab/altri software no e non si riescono a implementare facilmente, allora mi va bene che sul suo computer (e quindi una licenza, non centinaia…) ci sia Matlab. Ma dovrebbe essere appunto un poco l’eccezione e non la regola.

L’alternativa che voglio proporre è quindi Octave. Ovviamente la scelta poteva ricadere anche su altri programmi, ho scelto Octave perché ho già scritto su questo programma qualcosa in merito, e mi sono accorto che la sintassi tra Octave e Matlab, per quanto ho studiato, è pressapoco identica. Ho trovato soltanto un paio di cose che con Matlab avrei potuto fare in un certo modo e Octave no (almeno non al primo colpo), ma niente che potesse incidere sulla qualità dei due programmi. In sostanza se al posto di aver usato Matlab, gli studenti avessero usato Octave, non ci sarebbe stata nessuna differenza. I comandi, gli script-file, le funzioni…tutto avrebbe funzionato alla perfezione senza cambiare una virgola!
Ovviamente dire che tutto funzioni alla perfezione è quasi assurdo, alcune funzioni di Matlab in Octave non sono ancora presenti e la sintassi di Octave è molto più “ricca”  (poichè riprende in alcuni contesti anche la sintassi che si usa nel terminale) in confronto a Matlab, però la compatibilità è talmente alta da poter permettere di tenere la maggior parte dei laboratori inalterati dal punto di vista degli esercizi e dei contenuti.
Incuriosito dal fatto che si usasse un programma che difficilmente uno studente potesse avere a casa mi sono un poco informato sull’argomento. Il motivo ufficiale (o meglio: quello che mi è stato dato) è che Matlab sa gestire meglio i grafici.
La cosa, almeno per quello che ne so io, è abbastanza vera. Di default i grafici di Octave sono un po’ poveri e si deve prestare quindi un attimo di attenzione in più, attenzione che viene però a costare fino a 500 euro a licenza! Secondo me non ne vale quindi la pena, visto che non sembra portare altri vantaggi.

Per mostrare la veridicità di quello che sto dicendo ho deciso di “tenere un corso di Octave” (con calma, quando il tempo mi permette di scrivere qualcosa). Gli argomenti trattati saranno puramente matematici, spiegherò alcuni metodi di Calcolo Numerico su come risolvere determinati problemi e introdurrò la programmazione su Octave. Se avete la possibilità di riprovare tutto quello che ho scritto su Octave su Matlab, fate pure, non dovreste cambiare nemmeno una virgola e viceversa. Il corso non sarà incentrato su Octave stesso (altrimenti rischierei di perdere la compatibilità con Matlab visto che alcune differenze esistono!), quanto più su un suo metodo di utilizzo e alcuni metodi numerici per l’approssimazione di soluzioni, implementati poi ovviamente per i software come Octave e Matlab.
Il “corso” che intendo tenere vorrei dividerlo nelle seguenti lezioni:
1) Questa introduzione :-P
2) Come installare Octave, personalizzazioni e come vengono rappresentati i numeri sul calcolatore
3) Scalari, Vettori, Matrici e funzioni elementari
4) Programmare in Octave, script-file, function, operatori logici, cicli
5) Disegnare grafici, rappresentare funzioni, polinomi
Dopo questa prima parte interamente dedicata a Octave, comincia quella più legata alla Matematica.
6) Interpolazione polinomiale
7) Spline interpolanti e Minimi quadrati discreti
8) Integrazione numerica
9) Risoluzione di equazioni non lineari
10) Localizzazione di Autovalori
11) Risoluzione di sistemi lineari
Vedrò di mettere online inoltre esercizi e soluzioni, in modo da poter appurare di aver capito le lezioni e di rendere il tutto un poco più interessante.





Cosa è legale fare con il computer

20 11 2010

Al giorno d’oggi con un computer si può fare di tutto e di più, e vi sono svariate situazioni in cui non ci si sa come comportare. E non intendo nel confronto di altri utenti (esiste gia un galateo), ma nel confronto della legge.
Molti utenti pensano che sia illegale usare emulatori di vario genere, mentre tantissima gente scarica a più non posso musica e film senza nemmeno accorgersi delle proprie azioni.
Il problema è che sul web è spesso difficile informarsi su cosa si possa fare o meno, in molti forum, blog e altri luoghi di discussioni argomenti come le crack o download di programmi a pagamento sono completamente banditi, sebbene questo non implichi sempre che la domanda stessa che si vuole porre sia sbagliata o destinata a produrre una azione illegale.
Ecco perché ho voluto scrivere questo articolo, sebbene non tratti di programmi opensource, in cui voglio tentare di chiarire cosa si può fare o meno. Sappiate che non sono un avvocato, io qui scrivo cose che secondo me si possono o non si possono fare, prendendo spunto e esempio da fatti accaduti realmente, se mai doveste ottenere dei problemi non mi prendo nessuna responsabilità, se doveste subire una causa non scrivo che la vincerete! Sto riportando quello che penso, quello che ritengo giusto, quello che lascia intendere in parte la legge (perché non troverete mai nel codice penale scritto: “questo si può scaricare, quest’altro solo in questo caso…” altrimenti a cosa servirebbero i tribunali?) e degli esempi che si possono trovare liberamente in rete. Se speravate di aver trovato un articolo che vi spiegasse come scaricare programmi e giochi a pagamento, crack, o aggirare i sistemi di protezione dei software (come il DRM), allora avete sbagliato pagina, l’intenzione di questo articolo è quella di spiegare quando (e non come!) è possibile fare questo cose e quando non lo è, rispettando la legge (italiana, ma i consigli dati sono sicuramente applicabili anche in altri paesi). Evitate quindi di chiedere anche nei commenti come scaricare o sbloccare qualcosa, verranno rimossi in quanto non è l’argomento del tema, i consigli (da parte mia o vostra) e domande inerenti al tema sono ben accetti.

Questo è più o meno l’elenco dei punti che voglio discutere:
- Caso generico
- Programmi e siti illegali
- Scaricare programmi, musica e film
- Usare crack per giochi per pc
- Scaricare/copiare giochi per consolle e usare gli emulatori e wine
- Rimuovere il DRM e altri tipo di protezione software
- Nota sulla SIAE e la tassa sui supporti di memorizzazione
- Fare il Jailbreak su dispositivi di propria proprietà
- Windows e altri Sistemi Operativi sui PC
- Mantenere l’anonimato in rete
- Guardare la TV sul computer
- Una ultima nota sui fil e la musica

Caso generico
Un caso generico non esiste, ogni caso va analizzato a se stante, normalmente per evitare brutte sorprese è sempre meglio leggersi la licenza dei file interessati, e controllare la fonta dalla quale li stiamo scaricando. Inoltre “prevenire è meglio che curare”, quindi conviene sicuramente cercare prima consiglio in rete che avventurarsi da soli

Programmi e siti illegali
Non esistono programmi o siti illegali. Alcuni definiscono emule, i torrent oppure thepiratebay come illegale, ma questo deriva dal fatto che molta gente utilizzi tali strumenti per scopi illegali. In realtò, ad esempio, i torrent sono nati per la condivisione di grandi file tra le aziende, mica per scaricare qualche video.
Per questo motivo emule, limewire e molti altri programmi sono ancora liberamente utilizzabili anche se a volte (spesso in Italia, ma non solo) vengono emmesse sentenze contraddittorie (a mio parere), ad esempio il sito http://thepiratebay.org/ in Italia è ufficialmente irraggiungibile perché (secondo la sentenza) contiene materiale illegale o perché facilità la diffusione di materiale illegale.
Peccato che ThePiratebay non ospiti materiale illegale ma è un motore di ricerca come google, bing o yahoo specializzato per i file torrent, ma che sopratutto basta spostarsi in un altro paese (oppure esistono anche trucchetti vari, del tutto legalie ultrasemplici) perché il sito sia nuovamente disponibile…

Scaricare programmi, musica e film
Prima di scaricare un programma si dovrebbe leggere la licenza (basta cercare un attimo in rete o sulla homepage del progetto e si trovano). Licenze come la GPL permettono di scaricare programmi e sistemi operativi interi e anche di redistribuirli (passarli ad amici, copiarli nel proprio sito e lasciarli liberamente scaricabili…), ma naturalmente non si fermano ai software, ma anche alla musica (guardate ad esempio jamendo) e ai film (un esempio è la blender foundation).
Se pensiamo invece a programmi a pagamento, senza pensare ad una licenza particolare, come la musica che ascoltiamo normalmente alla radio, i film al cinema, la suite Microsoft Office, il sistema operativo Mac, Nero, Photoshop o non so cosa altro, allora ci si chiede se è possibile ottenere tali programmi risparmiando un po’ di soldi, e si finisce per scaricare gratuitamente e illegalmente tale software.
Vi sono però delle eccezioni. In alcuni casi è concesso scaricare programmi/musica/film a pagamento, anche se personalmente penso sia comunque da evitare. Se ad esempio comprate un film, avete diritto a farvi una copia di backup, per uso personale, nel caso il supporto originale (quindi il DVD o il bluray) si rovini. Ovviamente questo non vuol dire che potete lucrarci sopra, facendo ad esempio copie di backup e vendere il DVD originale (o il contrario), oppure a fare una copia di backup di un DVD che avete noleggiato o che vi è stato prestato. Nel casi abbiate il diritto di fare una copia, se non avete i mezzi a disposizione per crearvela, potete allora scaricare la vostra copia di backup dalla rete. Notate che la situazione in italia è molto caotica, ma in linea teorica abbiamo sempre il diritto di farci la copia di backup per uso personale, ma se non abbiamo gli strumenti adatti a disposizione, causa i sistemi anticopia, allora il download potrebbe essere l’unica alternativa.
Qui e qui trovate un poco di materia prima da leggere, all’articolo 28 noterete che la copia si può fare se il “fatto non concorra con i reati di cui agli articoli 171, 171-bis, 171-ter, 171­quater, 171-quinquies, 171-septies e 171-octies”, questi articoli li potete trovare tutti alla seguente pagina nella seconda sezione.
Supponiamo ad esempio che io abbia comprato Norton Ghost (ovviamente è un esempio, non uso questo programma, anche perché mi sembra non funzioni correttamente se avete installato più di un sistema sul vostro PC, però è il primo che mi è venuto in mente escludendo MSOffice e Photoshop :D ). Se adesso volessi ma non avessi gli strumenti adatti per fare una copia di backup, ho una buona scusante (non dico diritto proprio perché non sono un avvocato) per scaricare il programma dalla rete. Ovviamente dovrò preoccuparmi di prendere la stessa versione con le stesse feature e niente in più. (Non so adesso nello specifico se esistono più versioni…).
La stessa cosa vale per i cd musicali e i film. Dovrei scaricare esattamente lo stesso cd, non uno che magari ha dei brani in più o un film con scene inedite. Eventualmente devo rimuovere quello che è di troppo in confronto al cd che ho acquistato.
Su ogni cd musicale o film vi sono i diritti di autore, che durano, se non sbaglio, almeno 50 anni. Noi dobbiamo pagarli (non tiriamo in ballo la SIAE, spenderemo più tardi un paio di parole su di essa) cosi che l’autore (e chi ha collaborato) guadagni qualcosa per il suo lavoro e noi per poter sentire/vedere/usare. In teoria non ci vedo niente di sbagliato.
Notate che inoltre da un paio di anni (in america se non sbaglio) vi è la possibilità di utilizzare piccole porzioni di video ottenute da copie legalmente acquistate di un DVD in opere derivative quando esse abbiano finalità educativa o servano per la realizzazione di documentari o di opere non commerciali, da qui potete ottenere maggiori informazioni

Usare crack per giochi per pc
Suppongo sappiate tutti che quando avete un gioco spesso è richiesto l’inserimento del cd d’installazione per poterlo giocare (parlo di giochi commerciali per Windows), e probabilmente non ci troverete niente di strano, la stessa cosa si fa su qualsiasi console di giochi (Wii, PSP, Nintendo…). Eppure dover usare il cd ha diversi svantaggi:
- usura più veloce del cd e probabile rompimento
- se si è in viaggio e si dimentica il cd non si può giocare
- leggere i dati dal disco è più lento che dal’hard disk interno, il gioco potrebbe risultare un poco più lento (sopratutto su pc vecchi, usando wine o sistemi di emulazione)
- sui cd ci sono molti sistemi di protezione, che rallentano ulteriormente il gioco (estremamente su wine)
- se il cd si rompe e voi avete il gioco installato non potete eseguire il programma
- Se avete il lettore cd rotto oppure non avete un lettore cd (il gioco potreste averlo installato copiando l’installer sulla chiave usb con un’altro pc, non credo che su tutti i giochi ci sia segnato il lettore cd come requisito minimo)
- Per via dei sistemi di protezione che abbiamo aggirato per fare il nostro cd di backup, e che quindi non sono presenti sul cd masterizzato da noi, il gioco potrebbe non partire comunque, in tal caso l’utilizzo di una crack diventa indispensabile se volete giocare e il cd originale si è rotto (per questo avevate fatto una copia di backup)
In questi casi l’uso di una crack sembra la cosa migliore, eppure molti forum vietano di postare link diretti alle crack per evitare problemi legali.
Non conosco esattamente la questione, questo è quello che ho capito:
L’uso di una crack non è illegale, le scusanti sono i motivi che vi ho elencato sopra, sopratutto l’usura del cd (è inutile ricordarvi che il gioco originale dovete averlo comprato). Creare le crack è illegale, quando installate un programma a codice sorgente chiuso, nel contratto che accetterete ci sarà sicuramente scritto che non potete tentare di disassemblare il programma o di fare del reverse engineering. Usare(!) una crack però non equivale a questo.
Perché sui forum viene vietato il postare i link diretti potrebbe (il motivo scritto potrebbe variare) dipendere dal fatto del’internazionalizzazione. Infatti esso è visibile in tutto il mondo, e non in tutti i paesi l’uso delle crack è consentito (come si può leggere anche su Wikipedia). Se il forum è in italiano non vuol dire che è visibile solo dal’Italia, anzi. Altri motivi potrebbero essere che spesso andare a cercare delle crack porta a scontrarsi con malware di varia natura e sarebbe poco simpatico avere sul proprio sito/forum link a del malware. Altri motivi non ne conosco, attualmente questi sono gli unici che mi vengono in mente.

Scaricare/copiare giochi per console e usare gli emulatori e wine
Per gli emulatori e per i giochi vale lo stesso discorso della musica e per i programmi a pagamento, dipende dalla licenza. Se si tratta di un gioco commerciale allora potete scaricarlo solo se avete acquistato l’originale. Per poter scaricare un emulatore dovete aver la consolle in questione, se ad esempio scaricate un emulatore per il game-boy dovete possedere un game boy. Alcuni emulatori (come quelli per la Playstation) richiedono addirittura il BIOS della consolle originale per funzionare, che si può prelevare seguendo varie guide in internet oppure semplicemente scaricandolo dalla rete, ma per poterlo fare legalmente dovete possederlo!

Anche usare wine non è illegale (perché secondo alcuni dovrebbe esserlo proprio non lo so…), sul sito della Microsoft (in questa pagina) viene semplicemente spiegato che gli strumenti di convalida (Windows Genuine Advantage) non funzioneranno correttamente e che si necessità di aggiornamenti per alcuni prodotti potrebbe essere necessario scaricarli manualmente, esattamente le stesse cose si possono leggere su Wikipedia, altre notizie riguardanti wine da parte della Microsoft non sembrano esistere. Se per far funzionare un determinato programma, servono alcune determinate librerie del sistema operativo Microsoft e che si possono prendere soltanto se si possiede il sistema operativo…allora dovreste possedere un cd originale di Windows (o almeno la sua legale copia di backup).

Rimuovere il DRM e altri tipo di protezione software
Alcuni vedono di buon occhio il DRM, in quanto aiuta a far rispettare i diritti di autore. io personalmente ho visto una sola esperienza, ed è stata negativa, come per molti altri che non hanno voluto fare niente di sbagliato.
Non molto tempo fa, con iTunes, qualsiasi brano acquistavate era protetto dal DRM. Una mia amica ha acquistato incautamente dei brani, poco dopo (un mese se non sbaglio) ha cambiato computer, vi ha installato iTunes e … la sua musica non andava poiché protetta dal DRM.
Non so come sia finita la questione, probabilmente le è bastato reinserire i propri dati per l’account di iTunes per poter ascoltare la sua musica. Ma questo vuol dire che è obbligata a continuare ad usare quel servizio se vuole ascoltare la musica che ha acquistato?
A mio parere questo va contro i diritti del’utente finale, non è stato fatto niente di male e non posso ascoltare la musica che ho acquistato se cambio computer (o se rimuovo semplicemente il programma con cui la ho acquistata)?
A molti magari non darà fastidio (qualche Apple-fan sarà anche in grado di dire che in realtà è un sistema di sicurezza così nessun vi può rubare la musica) o non si porranno mai il problema… per me invece lo é, il non potersi disiscrivere senza perdere qualcosa non mi piace come idea, forse la questione DRM veniva anche spiegata nel contratto di licenza, ma è come dire che non si ha diritto ad un anno di garanzia mentre prima in negozio ti dicono che la hai (durante l’installazione di Itunes potete leggere chiaramente “la tua musica sempre con te”). “Verba volant, scripta manent”, è vero, però ci sono diritti, come quello della garanzia, che vanno rispettati in ogni caso, anche perché se in negozio ci è stato solo detto, sta scritto che è un diritto del consumatore.
In ogni caso, è illegale rimuovere il DRM e altri sistemi di protezione, salvo casi molto particolari, ma possiamo aggirarli se è necessario per fare la copia di backup.

Nota sulla SIAE e la tassa sui supporti di memorizzazione
Adesso spendiamo un paio di parole sulla SIAE, personalmente non ho capito perché esiste, perché fa quello che fa, chi è felice della sua esistenza, e questo per quello che è accaduto poco tempo fa.
Se comprate, qui in Italia, una memoria esterna, un disco rigido interno, un computer, un lettore mp3, un cellulare, un dispositivo qualsiasi sul quale potete salvare dei file, allora state pagando un leggero sovrapprezzo, che viene detenuto dalla SIAE, perché essa con questo è intenzionata a rifondere gli artisti dal momento che avete la possibilità di mettere su tali dispositivi materiale ottenuto in modo illegale.
Ovviamente la cosa è surreale. Se ad esempio adesso compro un chiave usb, sulla quale voglio salvare un album di foto fatte da me, devo pagare qualcosa in più perché io potrei metterci su dei programmi/film/foto/musica coperti da diritto d’autore (inteso un altro autore, non io ;) ). È come dire che quando comprate un’automobile dovete pagare una multa perché potreste commettere una infrazione.
Quindi sinceramente non capisco perché se mi impegno a rispettare la legge devo rimetterci.
Supponiamo che invece io compri una memoria esterna, potrei argomentare di aver pagato già i diritti di autore (e in effetti sembra proprio essere così), a questo punto giungerei alla conclusione che posso scaricare quello che mi pare e piace, giusto? Quindi provoco un danno di milioni di euro e la SIAE come indennizzo consegna un decina di euro da parte mia.
Sembra abbastanza ridicolo, vero? E invece lo è, leggete ad esempio qua cosa successe tempo fa…
In ogni caso, anche se avete pagato questo sovrapprezzo non avete il diritto di scaricare musica o cos’altro. I diritti di autore li dovete pagare acquistando il brano/film, oppure deve averli pagati un terzo per poterli ritrasmettere e voi registrare (ad esempio attraverso la radio o la TV). La SIAE non fa niente di tutto questo. Lei prende dei soldi, che poi (non so con quale criterio) redistribuisce ai vari autori (e in parte si tiene…)

Fare il Jailbreak su dispositivi di propria proprietà
Qui non c’è molto da dire, è legale sbloccare dispositivi come la PSP, Wii, Nintendo, cellulari…
Purtroppo spesso si perde la garanzia, dal momento che se vi sono guasti, questi potrebbero essere causati dallo sblocco del dispositivo e in tal caso il produttore si rifiuta di aiutarvi. Spesso le case produttrici non vedono di buon occhio questa pratica, ma è del tutto legale, come è stato deciso anche poco fa nei confronti della Apple in America.

 

Windows e altri Sistemi Operativi sui PC
“È illegale rimuovere Windows”
Vi giuro, ho sentito questa affermazione.
Ovviamente non lo è, anzi, potete anche ottenere il rimborso della licenza se vi impegnate a far rispettare i vostri diritti, impresa molto ardua in Italia. Come dagli altri dispositivi si può rischiare di perdere la garanzia, in quanto il produttore di computer vi dirà sicuramente che Windows è l’unico sistema che può girare sul loro computer o qualcosa di simile, in ogni caso se non sbaglio dovrebbero esserci sempre scritto in quali casi decade la garanzia, se la rimozione di Windows non è riportata allora non dovreste avere nulla da temere. Inoltre se avete intenzione di rimuovere windows preinstallato non necessariamente volete mettere “un altro tipo” di sistema operativo. Magari volete soltanto mettere la versione “Professional” che avete comprato a parte ed effetivamente non da molto senso dover pagare anche la versione “Home”.
Un altro punto di diatriba è come procurarsi i cd di installazione. Nessuna casa produttrice li da in dotazione (anche se pagati per i cd d’installazione vi daranno soltanto una copia di backup su cd, niente di più, e secondo me è un P**C**A bella e buona…) e quindi l’utente non sa bene come comportarsi.
Fino al sistema operativo vista si può ricorrere a software come vlite e nlite per creare anche dal proprio sistema operativo installato un cd di installazione della propria versione. Purtroppo però per windows 7 non esiste ancora un programma che ci permette di creare il cd di installazione, quindi al momento l’unica è farselo prestare oppure scaricarlo, avendo l’accortezza di prendere la versione giusta. In tal caso utilizzando il seriale del proprio computer non si avrà nessun tipo di problema.

Mantenere l’anonimato in rete
Esiste gente che si chiede se strumenti come proxy oppure TOR siano legali o giusti da usare, ovviamente non si può dare una risposta decisiva a questa domanda.
Ci sono “luoghi virtuali” in cui non si può usare una falsa identità, come ad esempio facendo operazioni bancarie, ma se decidete di scrivere un blog non vi sarà nessun genere di problema.
In italia, prima con il decreto pisanu, poi vedremo, si ha un poco la mania di voler controllare tutto, il wifi non verrà liberalizzato completamente e quindi mantenere l’anonimato sarà da un certo punto di vista difficile, ma ovviamente usare strumenti come TOR aiutano.

Guardare la TV sul computer
Esiste il sito della rai, quindi è inutile stare a spiegare con quali oggetti tecnologici possiamo vedere la rai.
Il problema sta tutto in silverlight, una programma di Microsoft che si vuol proporre come alternativa a Flash. Dove sta il problema? Che non tutti i dispositivi sono in grado di riprodurre i filmati in questo formato, in pratica su qualsiasi sistema non-Windows vi possono essere delle difficoltà.
Ma questo alla rai non interessa, voi le tasse le dovete pagare comunque. Se ad esempio avete un computer (ma non una tele) siete obbligati a pagare comunque la tassa rai perché in linea teorica con il computer potete vedere i filmati sul loro sito; non interessa che possiate davvero o meno (se usate un sistema non-windows o semplicemente non vi interessa visitare il loro sito.)
Per questo per i sistemi Gnu si possono trovare tanti programmi come TV-Player per vedere i programmi Rai senza passare dal loro sito (sebbene questa pratica non piaccia e venga spesso ostacolata!)

Una ultima nota sui film e la musica
Sebbene in teoria ne abbia gia scritto prima, volevo spendere altre due parole sulla musica e i film.
Si possono ad esempio registrare filmati e audio dalla tv e dalla radio perchè essi hanno pagato i diritti di autore e possiamo riprodurli liberamente, nel caso la qualità della registrazione fosse un poco scarsa, non possiamo scaricare da internet un file di qualità migliore, possiamo tentare di migliorare via software quello che abbiamo registrato, ma niente di più.
Inoltre ultimamente noto che sempre più gente scarica i filmati da youtube per estrapolarne la musica, pensando così di non commettere niente di illegale.
Questo però non accade. Infatti chi mette i video su Youtube non ha pagato i diritti di autore per la redistribuzione, ma sebbene non sia illegale mettere comunque in streaming i file grazie ad accordi con le case discografiche (nonostante ci fossero stati molti problemi lo è scaricarli, infatti semplicemente usando la piattaforma in questione aderite a questo contratto, sul quale c’è scritto esplicitamente “Tali contenuti non potranno essere scaricati, copiati, riprodotti, distribuiti, trasmessi, diffusi, visualizzati, venduti, concessi in licenza o in altro modo sfruttati per qualsiasi altra finalità senza il previo consenso scritto di YouTube…” al paragrafo 9.

Come prepararsi da brutte sorprese:
In teoria un buon metodo è leggere i contratti di licenza (che sono lunghi e noiosi), e non sto parlando solo di quelli che dovete accettare quando effettuate una installazione, ma anche quelli “nascosti”. Ad esempio installando Firefox accettate automaticamente un contratto senza neppure saperlo; esistono infatti contratti con su scritto “che verrà automaticamente accettato durante l’installazione” o “che verrà accettato una volta aperta la confezione” senza che abbiate cliccato su “accetta” o spuntato una voce “ho letto le condizioni” o qualcosa di analogo. Ovviamente una veloce ricerca in internet è la soluzione migliore, spesso si trovano i contratti originali e si può imparare dalle brutte esperienze di altri utenti.

Finisco qui l’articolo, sebbene in teoria se ne possa parlare ancora a lungo, se qualcuno, ha esperienze in merito, opinioni (in fondo io, ripeto, non sono un avvocato, ho solo raccolto informazioni varie) in merito, si senta libero di esprimerle ;)

Edit:
Grazie a kabir94 ho scoperto che in italia è illegale comprare un r4, apparentemente questo va contro quello che ho appena scritto sul jailbreak (sembra anche a me per essere sinceri; appunto, non sono un avvocato e non conosco al 100% la questione), ma la sentenza che è stata emessaargomentando  che “questi dispositivi non sono utilizzati per espandere le funzionalità della console, ma nascono con il preciso obiettivo di consentire l’utilizzo di copie illegali”. E in effetti purtroppo hanno ragione. Se la gente usa degli strumenti per scopi puramente illegali c’è il rischio che pur di far smettere questi atti di pirateria si ricorra a soluzione drastiche, perché di per se con l’r4 io potrei salvare su di esso i miei giochi regolarmente comprati in modo da non potermi portare dietro tutti i dischetti. C’è qualcosa di sbagliato in questo? Caso analogo è quelli del client torrent. Le case produttrici protestano perché molti usano questi strumenti per scopi illegali, sebbene i programmi per usare i torrent sono molto utili per la condivisione di grossi file non per forza protetti da diritti di autore o licenze!!!
Il fatto che mi preoccupa di più é invece che “Il tribunale ha stabilito che mod chip e game copier sono per se vietati dalla legge perché permettono di aggirare le misure tecnologiche di protezione integrate nei sistemi delle console Nintendo, tutelate dalla legge italiana e della Comunità Europea sia sotto il profilo civile, sia sotto quello penale.”, mentre da quello che si evince è che è illegale crearli (fare il Reverse engineering in sostanza), ma non il loro utilizzo, per i motivi gia argomentati in questo articolo. Come volevasi infatti dimostrare la questione è molto poco chiara… mi è sembrato di capire che questo sia un caso abbastanza isolato, ma costituisce in ogni caso un pericoloso precedente, sono dall’altra parte convinto che se se ne fosse fatto un utilizzo più saggio dell’r4 non sarebbe stato vietato.








Follow

Get every new post delivered to your Inbox.