%% LABORATORIO 1 - METODI STATISTICI PER LA BIOINGEGNERIA %% Canale B - A.A. 2024/2025 %% Docente: Enrico Longato %% Esercizio 1 %% Direttive per la gestione del workspace e delle figure % Per evitare errori dovuti a un workspace inquinato (= sono ancora in % memoria le variabili della sessione precedente) o qui pro quo con le % figure (= sono ancora aperte quelle dello script precedente), è bene % iniziare tutti gli script con le seguenti tre istruzioni. clc % - Clear Command Window - cancella la command window clear all % - Pulisce il work space close all % - chiude tutte le figure aperte in precedenza %% Creare una matrice "mat2D" 3x4 con elementi dati % Attenzione all'uso del punto e virgola: casi A) e B) mat2D = [1 1 1 1; % A) Questo ";" indica la fine della riga della matrice 1 1 2 1; % A) Questo ";" indica la fine della riga della matrice 1 1 1 1]; % B) Questo ";" sopprime l'echo nella command window % Alcune formulazioni equivalenti % a) Tutto in una riga con virgole mat2D_1_line = [1, 1, 1, 1; 1, 1, 2, 1; 1, 1, 1, 1]; % b) Tutto in una riga senza virgole (erano facoltative) mat2D_1_line_no_commas = [1 1 1 1; 1 1 2 1; 1 1 1 1]; % c) A matrice senza i punti e virgola "interni", che erano facoltativi mat2D_no_semicolons = [1 1 1 1 1 1 2 1 1 1 1 1]; %% Trovo l'indice lineare dell'elemento uguale a 2 usando l'istruzione find mask_2_logical = mat2D == 2; % Maschera che identifica la posizione del 2 i_2 = find(mask_2_logical); % Indice lineare %% Traduco l'indice in formato riga/colonna [n_row, n_col] = size(mat2D); % Istruzione size() [r_2, c_2] = ind2sub(size(mat2D), i_2); % [r_2, c_2] = ind2sub([n_row, n_col], i_2); % Equivalente % Attenzione: spesso l'output dei metodi dipende dal numero di argomenti! i_2_unchanged = ind2sub(size(mat2D), i_2); % Solo un argomento di uscita! % Potevo anche fare direttamente così per trovare gli indici riga/colonna [r_2_direct, c_2_direct] = find(mask_2_logical); %% Traduco l'indice da riga/colonna a formato lineare i_2_translated = sub2ind(size(mat2D), r_2, c_2); %% Vettorizzazione di una matrice % A volte è utile vettorizzare una matrice 2D per effettuare operazioni di % ricerca o di mascheramento. % Le matrici vengono "srotolate" per colonne, come nell'ordine degli indici array1D = mat2D(:); % Equivalente al "flatten" o "ravel" di altri linguaggi %% Ricostruzione della matrice originale mat2D_restored = zeros(size(mat2D)); % Inizializzo una matrice di zeri mat2D_restored(:) = array1D; % Ovviamente, funziona anche "da zero" values_to_be_inserted = 1:4; % Valori (qui dati come sequenza) shape_of_new_matrix = [2, 2]; % Dimensioni new_matrix = zeros(shape_of_new_matrix); % Inizializzo a zero new_matrix(:) = values_to_be_inserted; % Inserisco (notare l'ordine) % Traduzione dell'istruzione qui sopra: "Gli elementi di new_matrix, % se fossero srotolati (:), sarebbero values_to_be_inserted; % dunque, inserisci e ri-arrotola.