View Full Version : problema codice
paola_freer
21-01-2012, 13:29
Salve a tutti :-) sono nuova nel forum e da poco sto programmando utilizzando Matlab.
Ho un problema su un codice che mi da errore
rowsum=sum(dol)
colSum = sum(dol')
for i = 1 :length(dol);
for j=1:length(dol)
dolu=dol(i,j)*log(dol(i,j)/(rowsum.*colSum))
end
end
Matrix dimensions must agree.
Error in ==> de at 19
dolu=dol(i,j)*log(dol(i,j)/(rowsum.*colSum))
il mio scopo avendo una matrice di partenza di questo tipo:
0.25 0.7 0.2
0.5 0.2 0.9
0.3 0.4 0.1
fare il seguente calcolo:
(0.25*log(0.25)/1.15*1.05) + (0.7*log(0.7)/1.15*1.3) + 0.2*log(0.2)/(1.15*1.2) + (0.5*log(0.5)/(1.05*1.6)................etc fino a fine matrice.
grazie. suggerimenti? :-)
vendettaaaaa
21-01-2012, 14:10
Salve a tutti :-) sono nuova nel forum e da poco sto programmando utilizzando Matlab.
Ho un problema su un codice che mi da errore
rowsum=sum(dol)
colSum = sum(dol')
for i = 1 :length(dol);
for j=1:length(dol)
dolu=dol(i,j)*log(dol(i,j)/(rowsum.*colSum))
end
end
Matrix dimensions must agree.
Error in ==> de at 19
dolu=dol(i,j)*log(dol(i,j)/(rowsum.*colSum))
il mio scopo avendo una matrice di partenza di questo tipo:
0.25 0.7 0.2
0.5 0.2 0.9
0.3 0.4 0.1
fare il seguente calcolo:
(0.25*log(0.25)/1.15*1.05) + (0.7*log(0.7)/1.15*1.3) + 0.2*log(0.2)/(1.15*1.2) + (0.5*log(0.5)/(1.05*1.6)................etc fino a fine matrice.
grazie. suggerimenti? :-)
Innanzitutto sum(dol) restituisce un vettore (riga) che contiene la somma delle colonne, non delle righe, e viceversa per sum(dol').
Poi stai dividendo degli scalari per un vettore: infatti al denominatore hai un prodotto elemento per elemento, che ti genera un vettore della stessa dimensione di quelli di partenza (che a loro volta devono avere la stessa dimensione). Questo genera l'errore "matrix dimensions must agree".
Il codice corretto è questo:
dol = [1 2 3,
4 5 6,
7 8 9]
rowsum = sum(dol')
colSum = sum(dol)
for i = 1 : length(dol)
for j = 1 : length(dol)
dolu = dol(i,j)*log(dol(i,j)/(rowsum(i)*colSum(j)))
end
end
paola_freer
21-01-2012, 20:05
è vero che stupida. ti ringrazio :-)))
vendettaaaaa
21-01-2012, 20:09
Riguardando il codice, direi di modificare così i cicli:
for i = 1:length(rowsum)
for j = 1:length(colsum)
visto che far scorrere un iteratore da 1 alla dimensione di una matrice è concettualmente scorretto.
paola_freer
22-01-2012, 15:16
Grazie ancora per ieri. :-)
Ora avrei un altro piccolo dubbio.
io ho una riga di questi elementi
gt=[3 8 9 8 4]
voglio trovare tutte le possibili coppie, eliminando però le coppie formate dallo stesso elemento e le coppie ripetute.
cioè ottenere:
3,8
3,9
3,8
3,4
8,9
8,8
8,4
9,8
9,4
8,4
eliminando (3,3) (8,8)...etc,... e (8,3) (9,3) (8,3)
Ho fatto questo codice.
for i = 1 :length(gt);
for j=1:length(gt);
gpo=[gt(i) gt(j)]
end
end
però questo codice mi ridà tutte le 25 possibili combinazioni.
vendettaaaaa
22-01-2012, 15:23
Grazie ancora per ieri. :-)
Ora avrei un altro piccolo dubbio.
io ho una riga di questi elementi
gt=[3 8 9 8 4]
voglio trovare tutte le possibili coppie, eliminando però le coppie formate dallo stesso elemento e le coppie ripetute.
cioè ottenere:
3,8
3,9
3,8
3,4
8,9
8,8
8,4
9,8
9,4
8,4
eliminando (3,3) (8,8)...etc,... e (8,3) (9,3) (8,3)
Ho fatto questo codice.
for i = 1 :length(gt);
for j=1:length(gt);
gpo=[gt(i) gt(j)]
end
end
però questo codice mi ridà tutte le 25 possibili combinazioni.
Per forza...non escludi niente! Fai così:
for i = 1:(length(gt) - 1);
for j = (i + 1):length(gt);
gpo = [gt(i) gt(j)]
end
end
Questo però era proprio basilare, la prossima volta spremi un po' più le meningi :D
paola_freer
22-01-2012, 15:25
Grazie ancora per ieri. :-)
Ora avrei un altro piccolo dubbio.
io ho una riga di questi elementi
gt=[3 8 9 8 4]
voglio trovare tutte le possibili coppie, eliminando però le coppie formate dallo stesso elemento e le coppie ripetute.
cioè ottenere:
3,8
3,9
3,8
3,4
8,9
8,8
8,4
9,8
9,4
8,4
eliminando (3,3) (8,8)...etc,... e (8,3) (9,3) (8,3)
Ho fatto questo codice.
for i = 1 :length(gt);
for j=1:length(gt);
gpo=[gt(i) gt(j)]
end
end
però questo codice mi ridà tutte le 25 possibili combinazioni.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.