Untitled

 avatar
unknown
plain_text
a month ago
1.5 kB
1
Indexable
function D = calcola_distanze(punti)
    % Input: punti è una matrice PxN dove:
    % - P è il numero di punti
    % - N è la dimensione dello spazio
    % Output: D è una matrice PxP delle distanze euclidee

    P = size(punti, 1);

    D = zeros(P, P);

    for i= 1:P
        for j= i:P
            diff = punti(i, :) - punti(j, :); %[1 2] - [3 4]
            dist = sqrt(sum(diff.^2)));

            D(i,j) = dist;
            D(j,i) = dist;
            end
        end
end

N = input('Inserisci la dimensione dello spazio (N): ');
P = input('Inserisci il numero di punti (P): ');

punti = 10 * rand(P,N);

D = calcola_distanze(punti);

%D(:)
[maxDistanza, indice] = max(D(:));
[i, j] = ind2sub(size(D), indice); %ind2sub(size(D), indice);
                                   %ind2sub([3 3], 3)

Indici lineari:     Matrice originale:
1  4  7             (1,1) (1,2) (1,3)
2  5  8             (2,1) (2,2) (2,3)
3  6  9             (3,1) (3,2) (3,3)

Se D = [0    2    4
       2    0    3
       4    3    0]

D(:) = [0    % indice 1
        2    % indice 2
        4    % indice 3
        2    % indice 4
        0    % indice 5
        3    % indice 6
        4    % indice 7
        3    % indice 8
        0]   % indice 9

numCoppie = sum(D(:) > pi)/2;

Se D = [0    4    5
       4    0    2
       5    2    0]

D(:) > pi diventa:
[0    % 0 < π
 1    % 4 > π
 1    % 5 > π
 1    % 4 > π
 0    % 0 < π
 0    % 2 < π
 1    % 5 > π
 0    % 2 < π
 0]   % 0 < π


Leave a Comment