sommatoria in Matlab

Messaggioda MattiaAnimeRex » 06/01/2011, 12:07

Ciao a tutti, il mio problema e' abbastanza semplice: solo che uso
Matlab da poco e non riesco a uscirne!

Sia dato il vettore A = [9 1;3 2; 5 8;4 9]' e il vettore M=[ 1 1]' (gli apici indicano che i vettori sono trasposti in modo che ogni coppia risulti un vettore colonna e non riga)

Devo implementare in Matlab un'espressione del tipo:

E=Σ ( (x(i)-M) * (x(i)-M)' )

dove la sommatoria va da 1 al numero di componenti di A (ossia sommatoria per i da 1 a 4),
per cui x(1)=(9 1), x(2)=(3 2) ecc

Come posso fare?
Spero che qualcuno di voi mi possa aiutare!!
MattiaAnimeRex
Junior Member
Junior Member
 
Messaggio: 1 di 190
Iscritto il: 06/01/2011, 12:04

Messaggioda MattiaAnimeRex » 06/01/2011, 14:48

Per intenderci: la sommatoria va fatta per ogni i, per cui al passo 1 avrei:

((9 1)-(1 1)) * ((9 1) - (1 1))' = [ 64 0; 0 0]

questo genera una matrice 2x2;
al passo successivo avro' invece

((3 2)-(1 1)) * ((3 2) - (1 1))' = [4 2; 2 1]

che andra' sommato al risultato precedente e dara': [68 2; 2 1]
e cosi' via fino all'ultima iterazione.
MattiaAnimeRex
Junior Member
Junior Member
 
Messaggio: 2 di 190
Iscritto il: 06/01/2011, 12:04

Messaggioda Raptorista » 06/01/2011, 15:16

Prima di implementare qualcosa in MATLAB dovresti implementare le formule nei tuoi post, poi dovresti implementare un tentativo di risoluzione e poi, forse, penseremo a come risolvere il tuo problema.
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 1127 di 9616
Iscritto il: 28/09/2008, 19:58

Messaggioda MattiaAnimeRex » 06/01/2011, 20:25

Ah ok scusami, allora reillustro il problema:

date le matrici A=$((9,3,5,4),(1,2,8,9))$ e M=$((1),(1))$

si vuole realizzare in matlab la seguente espressione:

S=$\sum_{i=1}^N ((A(i)-M)*(A(i)-M)')$

dove per (A(i)-M)' l'apice indica il fatto che la matrice risulta trasposta(ma questo non e' un problema)
e dove A(i) indica l'i-esimo vettore colonna della matrice A (es.A(1)=$((9),(1))$


Io ho scritto una cosa del genere con N=4:

for i = 1:4

S=(A(:,i)-M)*(A(:,i)-M)'

end

il problema e' che facendo cosi' quando ad esempio i=2 la S si aggiorna come se quello calcolato con i=1 non fosse mai esistito!
Ossia invece di avere una cosa del tipo S=S(1)+S(2)+S(3)+S(4) si ha un risultato del tipo S=S(4) e basta.
Come posso risolverlo? esiste una funzione predefinita in matlab che calcoli la sommatoria di un'espressione come la mia?
Grazie :D
MattiaAnimeRex
Junior Member
Junior Member
 
Messaggio: 3 di 190
Iscritto il: 06/01/2011, 12:04

Messaggioda Raptorista » 06/01/2011, 21:51

È normale che succeda quello che dici, perché tu ad ogni ciclo sovrascrivi la variabile S con un nuovo valore; quello che invece dovresti fare è prendere una variabile e, ad ogni ciclo, sommarle il valore corrente, il tuo $S(i)$
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 1131 di 9616
Iscritto il: 28/09/2008, 19:58

Messaggioda MattiaAnimeRex » 06/01/2011, 22:02

Si infatti il mio problema e' proprio quello; io ho esposto il caso di sommatoria da 1 a 3 che quindi potrebbe essere
risolto semplicemente facendo 3 volte l'espressione e salvando su variabili differenti da sommare poi alla fine.
il problema e' che in realta' quella sommatoria ' va da 1 ad un valore che non è noto a priori ma viene calcolato in
espressioni precedenti della funzione di cui questo problema fa parte; quello che mi serve e' capire come rendere
generica un'espressione come quella illustrata dal problema.

Ho provato anche a fare S = sum(1,N,((A(:,i)-M)*(A(:,i)-M)') )

ma mi rende questo errore:

??? Error using ==> sum
Trailing string input must be 'double' or 'native'.

(ho provato anche
a rendere double i valori di A e M ma il problema persiste)
MattiaAnimeRex
Junior Member
Junior Member
 
Messaggio: 4 di 190
Iscritto il: 06/01/2011, 12:04

Messaggioda Raptorista » 07/01/2011, 10:18

Eppure la soluzione è così semplice: prendi la tua variabile S e la inizializzi a zero; ad ogni ciclo calcoli, da un'altra parte, il valore $S(i)$; a fine di ciascun ciclo prendo il tuo risultato parziale e lo sommi al risultato totale. Altro ciclo altra corsa, fino alla fine.

[mod="Raptorista"]E scrivi usando le formule!![/mod]
Un matematico ha scritto:... come mia nonna che vuole da anni il sistema per vincere al lotto e crede che io, in quanto matematico, sia fallito perché non glielo trovo


Immagine
Avatar utente
Raptorista
Moderatore
Moderatore
 
Messaggio: 1132 di 9616
Iscritto il: 28/09/2008, 19:58


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite