% scaletta per la lezione del 6 novembre 2008
% uno script si esegue tutto in un colpo con F5
% o nel menu Debug -> Run
% mettere dei 'blocchi' cliccando la lineetta accanto al numero
% compare bollino rosso (ricliccando sopra, si cancella)
% Oppure, si esegue 'passo-passo' con F6 o F10 a seconda delle
% versioni di Matlab (vedi menu debug)
%

% prima di avviare lo script e' buona norma ripulire 
% il workspace 
clear

% (riepilogo)
% CANCELLARE ELEMENTI

v = 1:10

v(2:5) = []


rig = 3;
col = 5;

% matrici speciali

% matrice di tutti '0'
ZEROMN = zeros(rig,col)

% matrice di tutti '1'
UNI    = ones(rig,col)

% matrice identita'
IDENT  = eye(rig)

IDENT2 = eye(col)

% matrice diagonale
DIAGO  = diag(v)

% matrice quadrato magico
QUADR  = magic(3)


% COME ESEGUIRE OPERAZIONI RIPETITIVE IN MODO COMPATTO:
% I CICLI
%
% uso del ciclo di for: applicazione all'esercizio della scorsa lezione


% SINTASSI:
%
% FOR indice = ESPRESSIONE
%
%           ISTRUZIONI
%
% END
%

clear

% i file usati sono scaricabili dalla rete:
% http://www.mcgraw-hill.it/naldi

% scompattare i file con un programma apposito:
% per esempio: ark in un sistema linux
%              winzip in un sistema windows

% Cartella filem/cap1

%
% aggiungere al path anche la cartella precedente, o copiare i file 
% nella directory corrente

% guardiamo lo script stella.m
edit stella

% proviamo a prendere informazioni sul file
help stella

% eseguiamo digitiamo nella finestra di comando:
% >> stella

% ripetiamo con n differente
% modificando il file stella.m

% ESEMPIO DI FUNCTION DI MATLAB:
%
% guardiamo la funzione puntistella.m
% come sopra per path o copiare file

edit puntistella

% notiamo che stavolta vi sono argomenti in ingresso e in uscita
% NB la sintassi della prma riga

% esercizio: utilizzando la funzione puntistella, creiamo 
% 4 grafici corrispondenti alle stelle a 5,6,7,8 punti 
% in un'unica finestra

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% soluzione

clear
clc

figure
% parametro di profondit� delle punte
a = 0.5
for n = 5:8
    subplot(2,2,n-4)
    [x,y] = puntistella(a,n);
    plot(x,y)
    % usiamo la stessa unita' di misura sugli assi
    axis square
end


% esempio 2:
% creare in una finestra 6 sottografici corrispondenti ciascuno al
% grafico di y = exp(-x.^2) .* cos(k*pi*x) con k=1:6
% sull'intervallo [-pi pi]

% creiamo una finestra per il grafico: assegnamo il numero 100
figure(100)
clf

% creiamo un vettore di 251 punti per la x
x = linspace(-pi,pi, 251);


for k=1:6
    % selezioniamo la finestrella
    subplot(2,3,k)
    % calcoliamo la y; attenzione all'uso di .^ e .* per operare 
    % 'elementwise'
    y = exp(-x.^2) .* cos(k*pi*x);
    % si noti l'uso degli "handle" per modificare
    % le caratteristiche di un grafico... (*)
    plhndl = plot(x, y);
    set( plhndl, 'Color', [ k/6 0 (6-k)/6 ]); 
    % convertiamo k in una stringa (di un carattere) per il titolo
    kappa = num2str(k)
    % con la virgola, concateniamo le stringhe
    title(['k = ', kappa]);
    % etichette sugli assi
    % (*) ... o in una sua parte
    xhndl = xlabel('x')
    % i tre punti ... istruiscono matlab a continuare il comando sulla
    % riga successiva
    set( xhndl, 'Fontname', 'Times', 'FontAngle', 'italic', ...
        'Fontsize', 12, 'Position', [3.5 -0.7 0]);
    ylabel('\it y', 'Rotation', 0, 'Position', [-3.75 0.7 0])
    % opzioni aggiuntive: assi ridotti al minimo (estesi quanto i dati)
    axis tight
    % griglia di riferimento
    grid on
    
    % tracciamo gli assi di riferimento
    hold on
    plot([-pi pi], [0 0], 'k', 'Linewidth', 1.5);
    plot( [0 0], [-1 1], 'k', 'Linewidth', 1.5);
    
end

clear

% grafici tridimensionali

% vogliamo fare il grafico di
%
% z = x(1-x)y(1-y) 
%
% sul rettangolo [0,1] X [0,1]

n = 8;
m = 8;
x = linspace(0,1,n);
y = linspace(0,1,m);

% creiamo una 'mesh'
% vediamo cosa contiene [X,Y] omettendo il ;
[X,Y] = meshgrid(x,y)

% calcoliamo la funzione
Z = X .* (1-X) .* Y .* (1-Y);

figure(1)
% ripuliamo la figura da altri grafici
clf
% grafico a superfice (approsimata con tasselli)
surf(X,Y,Z);

figure(2)
clf
% grafico a curve di livello
contour(X,Y, Z);

figure(3)
clf
% grafico a 'griglia'
mesh(X,Y,Z);

% per vedere le opzioni possibili
help graph3d


% seconda parte: per 11 novembre 2008
% uso delle funzioni


% nota: correggere il file mediav.m fornito dal sito del libro
% la parola function all'inizio del file e' incompleta
help mediav

v = [ 1 3 5 2 8 9]
A = [123
    456
    789]



m1 = mediav(v);



help mediam

m2 = mediam(A);


help mediam2

m2bis = mediam(A)

% ESERCIZIO:
% calcolare le medesime quantita' usando la funzione SUM


% un po' di successioni ricorsive

help successione

a1 = 9;
as = 1e4;

% nota: il file successione.m fornito e' incompleto. 
% Aggiungere un'ulteriore riga:
% x=a;

edit successione

% discutere il costrutto WHILE....END

seq = successione(a1, as)

% operatori relazionali

a1 < as               % minore di

a1 <= 9               % minore di o uguale a

a1 > as               % maggiore

a1 >= as              % maggiore di o uguale a

a1 == as              % uguale a

a1 ~= as              % diverso da



% operatori logici (booleani)

a2 = 4;

a1 < as & a1 ~= as 

a1 < as | a1 ~= as

~(a1 < as & a1 ~= as)

xor(a1 ~= as, a2 > as)


help successione2

seq2 = successione2(a1)

seq2 = successione2(100);

% discutere la modifica in successione2b/2c

edit successione2b
edit successione2c

% ulteriore costrutto: 
% switch (espressione)
%	case (valore 1)
%		blocco istruzioni
%	case (valore 2)
%		blocco istruzioni
%	...
%	otherwise
%		blocco istruzioni
%	end

% esempio: usare il costrutto per implementare la
% successione 2

