Basic Octave (e MATLAB)

% uso Octave, ma la stessa sintassi base vale anche per MATLAB
% la percentuale è il simbolo per i commenti


% CALCOLATRICE
5+4
5-3
2*7
8/3
2^6
log(2)
exp(3)
abs(-1)   % valore assoluto
floor(1.9)   % arrotonda per difetto (=1)
ceil(1.9)   % arrotonda all'intero più vicino (=2)


% OPERAZIONI LOGICHE
1 == 2     % restituisce 0 (false)
1 ~= 2     % ~= significa diverso: restituisce 1 (true)
1 && 0   % AND
1 || 0       % OR
xor(1,0)  % OR alternativo


% VARIABILI
a=3
b='ciao';   % con il ; non viene visualizzata l'output dopo l'operazione
a = 3, b = 'ciao'   % con la virgola metto più comandi sulla stessa riga+
a = 3; b = 'ciao';   % punto e virgola come virgola ma senza print output
c = pi;   % pi è il pi greco
a   % mostra "a = 3"
disp(a)   % mostra solo "3"
disp(sprintf('%0.2f', c))   % arrotonda al secondo decimale
disp(sprintf('2 decimali: %0.2f', c))   % output: "2 decimali: 3.14"
format long   % formato con cui vedrò le variabili
c   % output: "c = 3.1415926358979"
format short
c   % output: "c = 3.1416"


% VETTORI E MATRICI
v = [1;2;3]    % vettore colonna, matrice 3*1
w = [1 2 3]   % vettore riga, matrice 1*3 (separatore spazio o virgola)
y = 1:6   % vettore riga di 6 elementi, da 1 a 6
z = 1:0.1:2   % elementi da 1 a 2 incrementali di 0.1 [1 1.1 ... 2]
length(v)   % elementi del vettore v
A = [1 2; 3 4; 5 6]   % matrice 3*2, prima riga 1 2
ones(2,4)   % matrice 2*4 di tutti 1
2*ones(5,6)   % matrice 5*6 di tutti 2
zeros(1,6)   % vettore riga di 6 elementi tutti 0
rand(2,3)   % matrice 2*3 di numeri casuali
randn(2,3)   % elementi random presi dalla distribuzione della gaussiana
x = randn(1,100);
hist(x)    % istogramma degli elementi di x (gaussiana)
eye(5)   % matrice identity 5*5 (1 sulla diagonale, 0 nel resto)
help(eye)   % mostra cosa fa la funzione
size(A)   % vettore contenente le dimensioni della matrice A
length(A)   % dimensione maggiore della matrice A (3)
A(2,2)   % vedo elemento riga 2 colonna 2
A(3,:)   % tutti gli elementi della riga 3
A(:,2)   % tutti gli elementi della colonna 2
A([1 3],:)   % tutti gli elementi delle righe 1 e 3
A(:,2) = [8;7;6]   % assegno i valori 8 7 e 6 alla seconda colonna di A
A = [A, [8,9,10]]   % aggiungo una colonna alla matrice A
A(:)   % tutti gli elementi di A in un singolo vettore
A = [1 2; 3 4; 5 6];
B = [11 12; 13 14; 15 16];
C = [A B]   % matrice composta da A e B affiancate
C = [A; B]   % matrice composta da A sopra e B sotto
D = [7 8; 9 10]
A * D   % moltiplico le matrici
A .* B   % moltiplico ogni elemento di A con il corrispondente di B
A .^ 2   % ogni elemento di A al quadrato
1 ./ A   % inverso di ogni elemento di v
log(A)   % logaritmo di ogni elemento di A
exp(A)   % esponenziale di ogni elemento
abs(A)   % valore assoluto di ogni elemento
-A   % cambio segno a ogni elemento ( -1*A)
A+1   % incremento di 1 ogni elemento di A
A'   % matrice trasposta (scambio righe e colonne)
max(A)   % massimo di ogni colonna di A
max(A,[],2)   % massimo di ogni riga di A
max(max(A))   % elemento massimo assoluto
A < 3   % matrice di logici, confronta ogni elemento con 3
find(A<2)   % restituisce la posizione degli elementi minori di 3
[r,c] = find(A>2)   % vettore r con riga dell'elemento e c con colonna dell'elemento maggiore di 2
sum(A)   % somma tutti gli elementi di ogni colonna
sum(A,2)   % somma per riga
prod(A)   % moltiplica tutti gli elementi di ogni colonna
prod(A,2)   % moltiplica per riga
sum(sum(D .* eye(2))   % sommo gli elementi sulla diagonale di D
flipud(A)   % rovescia la matrice A (ultima riga = prima riga)
pinv(A)   % matrice inversa di A


% WORKSPACE
pwd   % current directory
cd 'C:\cartella'   % sposta la current directory nel percorso specificato
ls   % file e cartelle nella current dir (equivalente del comando dir del dos)
addpath('C:\work')   % aggiunge la cartella indicata tra quelle dove cerca i file
load doc.txt   % carica il file "doc.txt" dalla current dir
load('doc.txt')   % alternativa per il caricamento
who   % vedo tutte le variabili del mio workspace
whos   % vedo variabili e loro caratteristiche
doc   % vedo il file doc caricato prima
clear   % pulisco tutto il workspace
save doc2.txt c   % salva c nel file doc2.txt (txt leggibile con commento)
save doc2.txt c -ascii   % salva c in txt (solo variabile)
save doc2.mat c   % salva c nel file doc2.mat (formato binario compresso)
clear c   % elimino solo la variabile c
load doc2.mat   % ricaricata la variabile c
% mat è l'estensione dei file di MATLAB, letti e scritti anche da Octave
save doc2.mat c   % salva c nel file doc2.mat


% GRAFICI
x = [1,2,3]
y = [4,5,6]
plot(x,y)
hold on   % per conservare il grafico e non sovrascriverlo con il prossimo
z = [7,8,9]
plot(x,z)   % grazie a "hold on" viene messo insieme al grafico precedente (stessi assi)
xlabel('asse x')   % nomino l'asse
ylabel('asse y')
legend('y','z')   % legenda
title('Grafico 1')    % titolo
print -dpng 'prova.png'   % esporto in un file immagine
figure(1); plot(x,y)
figure(2); plot(x,z)   % per fare due grafici separati
subplot(2,2,1)   % creo una base di 4 grafici (2 righe 2 colonne) e mi posiziono in alto a sinistra
plot(x,y)   % grafico in alto a sinistra
subplot(2,2,1)   % ora mi posiziono in basso a destra
plot(x,z)   % grafico in basso a destra
axis([0 10, 0 10])   % cambio min e max degli assi
clf   % cancella il grafico
A = [1 2 3; 1 3 4; 1 4 5; 1 5 1]
imagesc(A)   % matrice su grafico: a numeri diversi colori diversi
imagesc(A), colorbar   % con barra che mi mostra la barra dei colori come legenda
imagesc(A), colorbar, colormap gray   % in scala di grigi


% CICLI IF, FOR, WHILE
v = [1,2,3,4,5]

if v(5) == 4,
    v(5) = v(5) + 1;
elseif v(5) == 5,
    v(5) = v(5) - 1;
else
    disp('wtf?');
end;

for i = 1:4,
  v(i) = 2*i;
end;

i = 1;
while i <= 3,
      v(i) = 10;
      i = i+1;
end;

i = 1;
while true,
     v(i) = 100;
     i = i+1;
     if i == 4,
          break;
     end;
end;


% FUNZIONI
function f = quadrato(x)
   f = x^2;
end;
quadrato(3)   % restituisce 9

function [g1,g2]  = quadratocubo(x)
   g1 = x^2;
   g2 = x^3;
end;
[a,b] = quadratocubo(3)   % restituisce a = 9, b = 27

% se salvo una funzione in un file con estensione .m posso utilizzarla senza doverla caricare se metto il file nella working directory






No comments:

Post a Comment