PDA

View Full Version : [Algoritmo] Scrivere formula matematica


salvodel
07-11-2007, 12:36
Salve a tutti, vorrei chiedervi come scrivere questa funzione utilizzando un array monodimensionale invece della matrice w[i][j]

http://img248.imageshack.us/img248/8287/formulalv7.th.gif (http://img248.imageshack.us/my.php?image=formulalv7.gif)

In teoria la dovrei scrivere in C ma quello che piu mi interessa è l'algoritmo. Grazie a tutti.
Ciao

andbin
07-11-2007, 13:03
Salve a tutti, vorrei chiedervi come scrivere questa funzione utilizzando un array monodimensionale invece della matrice w[i][j]Beh no aspetta, se dici monodimensionale allora ha 1 solo indice. Ma nella formula hai 2 indici. Quindi? Cosa sono per te wij e uj??

In teoria la dovrei scrivere in C ma quello che piu mi interessa è l'algoritmo.Nella formula hai 2 sommatorie. Per ogni 'i' che va da 0 a N hai una 'j' che va da 0 a M. In sostanza, a livello di codice, avrai un ciclo for annidato dentro un ciclo for.

yorkeiser
07-11-2007, 13:40
La formula per passare da una matrice bidimensionale m*n ad un vettore monodimensionale è la seguente:
- se u(i) è monodimensionale
- v(j,k) è bidimensionale

l'elemento di indici j,k corrisponde all'elemento di indice i con

i = j + k*n

dove n è la dimensione orizzontale della matrice rettangolare

salvodel
07-11-2007, 15:09
Beh no aspetta, se dici monodimensionale allora ha 1 solo indice. Ma nella formula hai 2 indici. Quindi? Cosa sono per te wij e uj??

Nella formula hai 2 sommatorie. Per ogni 'i' che va da 0 a N hai una 'j' che va da 0 a M. In sostanza, a livello di codice, avrai un ciclo for annidato dentro un ciclo for.

Un vettore per me è mono-dimensionale, nel senso che ha una sola dimensione (1xn). Mentre w è una matrice bi-dimensionale (nxm).

La formula per passare da una matrice bidimensionale m*n ad un vettore monodimensionale è la seguente:
- se u(i) è monodimensionale
- v(j,k) è bidimensionale

l'elemento di indici j,k corrisponde all'elemento di indice i con

i = j + k*n

dove n è la dimensione orizzontale della matrice rettangolare

int x;
int dim; //numerodo di colonne della matrice
for(int i=0;i<N; i++)
for(int j=0;j<M; j++)
x+=sin(w[i+j*dim]*u[i]);

questa è sbagliata! Poiche mi darebbe una somma di seni :sbav: :asd:...mentre io vorrei che facesse il seno della somma.
C'è una soluzione diversa da questa:

int x;
int dim; //numerodo di colonne della matrice
for(int i=0;i<N; i++)
for(int j=0;j<M; j++)
somma+=sin(w[i+j*dim]*u[i]);
x=sin(somma);

andbin
07-11-2007, 16:15
Un vettore per me è mono-dimensionale, nel senso che ha una sola dimensione (1xn). Mentre w è una matrice bi-dimensionale (nxm).Ok, ma allora devi spiegare come sono organizzati i dati nel tuo vettore. Se è come penso, cioè se il vettore è nient'altro che una "visione" sequenziale di un array bidimensionale, allora appunto vale la regola del "C":

m[j] può essere visto come un v[i*n+j] dove [I]n è il numero di elementi in una riga.

questa è sbagliata! Poiche mi darebbe una somma di seni :sbav: :asd:...mentre io vorrei che facesse il seno della somma.Datemi pure dell'incompetente in matematica (il che non sarebbe poi tanto sbagliato!) ma la formula che hai postato sotto forma di immagine io la leggo: x uguale alla sommatoria della sommatoria dei seni.
Se non è così, please, rinfrescatemi la memoria perché in matematica sono certamente arruginito!

salvodel
07-11-2007, 22:35
Datemi pure dell'incompetente in matematica (il che non sarebbe poi tanto sbagliato!) ma la formula che hai postato sotto forma di immagine io la leggo: x uguale alla sommatoria della sommatoria dei seni.
Se non è così, please, rinfrescatemi la memoria perché in matematica sono certamente arruginito!

No, hai perfettamente ragione:doh: . Il fatto è che la formula è molto piu lunga è complessa. Poiche l'ho tagliata ho eliminato anche la parte che mi creava problemi. Fuori dalla sommatoria c'è una funzione. Infatti nel mio esempio creavo una variabile sommatoria a cui applicavo la funzione. Quindi se il seno fosse fuorei dalla sommatoria come sarebbero i cicli for?
Grazie