Non so se cè una sezione nel forum dedicato questo cmq dato che si tratta pur sempre di programmazione e di matlab come linguaggio oltre a sapere un po' la matematica delle matrici e dei vettori magari qualcuno può aiutarmi. grazie

Sto studiando un algoritmo che fa uso di alcuni metodi matematici e ho il codice di sviluppo in un file m di matlab. Lo sto guardando ma non riesco a capire bene cosa viene fatto in queste righe di codice:

n = length(d(:,1)); % Now use N hosts (no. rows), including the lighthouse nodes.
for i=1:n
% Computes the coordinates of host "ni"
dnl = [];
for k=1:length(l)
dnl(k) = d(i,l(k)); % Distance vector "dnl" denotes the delay measured between host ni and the jth lighthouse 'l'
end;
ni = Qtau_1(:,1:dim)'*dnl'; % Computes the coordinates of 'ni' in a dim-dimensional vector space

tau_2 = fminbnd(@myerror2,0,2,[],Qtau_1,dl,dim,ni,dnl);

ni = tau_2*ni;

Per semplicità di seguito ho scritto i numeri per indicare le domande (e numero+ lettera quando sono più domande relative alla stessa domanda)spero che mi rispondiate
ma se non le sapete tutte va bene anche se mi rispondete ad una sola tipo 4 o 5.perpiacere aiutatemi.Grazie

1)n è il numero di righe di d? giusto? (è una matrice NxN con dei valori numerici che indicano le distanze in ms tra gli N host)

2) il secondo for va da 1 al numero di elementi del vettore l che sono degli indici di NxN; dnl conterrà il valore distanza tra l'host i e l'host l(k):


Q_tau che cosa è? una matrice? di che dimensione? Q_tau è ottenuto nel seguente modo:

[Q R] = qr(dl); -> dl è una matrice con tutte le distanze da ogni host ad ogni altro host contenuto in l quindi una matrice kxk (quadrata)
Se applico qr che è una fattorizzazione meglio detta come decomposizione QR (Qr decomposition che è Gram Schmidt) come da help di matlab e come da conoscenze di algebra dovrebbe scomporre dl in Q*R dove Q è la matrice ortogonale o unitaria (è = ) che contiene delle basi vettoriali sia in riga che in colonna (matrice quadrata)perchè
si sa che Q * Qtrasposta = Qtrasposta * Q = matrice_identica:

vedi: http://it.wikipedia.org/wiki/Decomposizione_QR
vedi : http://it.wikipedia.org/wiki/Matrice_ortogonale (paragrafo Basi ortonormali)
vedi : http://it.wikipedia.org/wiki/Matrice_unitaria

1/ Calculating the coordinates of local basis (lighthouses)
% 1.1/ Using the Gram-Schmidt method (QR factorization) derives an
% orthonormal basis based on distances between lighthouses,
% Applies QR to the "dl" matrix. Vector Q is an orthonormal basis, therefore, it spans a m-dimensional space.
[Q R] = qr(dl);

Qtau_1 = tau_1 * Q;
dove tau_1 è una costante: tau_1 = fminbnd(@myerror,0,10,[],Q,dl,dim);
(%1.2/ Computes a scaling factor 'tau1' to minimize discrepancies between measured and
% estimated of lighthouse nodes. This will result in Qtau_1.)

..ma Q, nel codice cè scritto che è un vettore invece non dovrebbe essere una matrice quadrata kxk come dl dato che è qr(dl)????


3)

Qtau_1(:,1:dim) cosa vuol dire? che faccio variare la colonna e fermo le righe? se è così vuol dire che è come un for dentro il primo for su i (vedi codice), cioè come scrivere

for (i = 0 ...n){
for (j = 0 ..dim){ //<--- questo ciclo è come scrivere Qtau_1(:,1:dim)???
Qtau_1 (i, j) i = 0 e j varia da 1 a dim, poi i diventa 1 e k varia ancora finchè non arriva a dim
j++;
}
i++;
}


4) ni = Qtau_1(:,1:dim)'*dnl'; è il prodotto delle trasposte ma ni non è quindi un vettore colonna? ni nel codice non è dichiarato è direttamente assegnato solo qua

2.1/ The coordinates of hosts will be a linear combination of the
% local basis created in step 1: <-- con qr(dl) dove si prende solo Q e si trasforma in Qtau_1 come segnato nel mio punto 2
% ni = c1.l1 + c2.l2 + ... + ck.lk, where 'k' is the targetted
% dimensionality. Solving the linear system (6) presented in the
% paper, is equivalent to ni = Qtau_1(:,1:dim)'*la';

cioè se Qtau è una matrice e dnl un vettore (matrice kx1 con gli elementi in colonna) quello sarebbe un prodotto righe per colonne giusto? quindi alla fine
mi torna un vettore allora ? matrice kxk * matrice kx1 ottengo una matrice kx1 (k righe e 1 colonna come il vettore)

5) fminbnd(@myerror2,0,2,[],Qtau_1,dl,dim,ni,dnl) è una funzione di approssimazione e utilizza myerror che è una funzione definita nel codice, il 2 e terzo parametro
sono come nell'help ma gli altri parametri sono diversi da quelli specificati nell'help cosa sono?


Grazie
Roberto