| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  27-11-2007, 17:33 | #1 | 
| Senior Member Iscritto dal: Dec 2004 
					Messaggi: 783
				 | 
				
				[C] Aiutino su formula matematica
			 
		Salve a tutti, dovrei scrivere la seguente formula in una funzione scritta in C:  [img=http://img258.imageshack.us/img258/6412/formulatg2.th.gif] Io ho buttato giu alcune righe di codice ma non mi convincono del tutto...qualcuno potrebbe dirmi se c'è corrispondenza tra la formula e quello che ho scritto io sotto? Grazie Codice: for(l=0;l<cost;l++)
   for(r=0;r<cost;r++)
      for(i=0;i<M;i++)
         for(k=0;k<S;k++)
             sommatoria[l][r][i]+=x[i][k]*z[k]* ((k=l)?1:0)*u[r];
for(l=0;l<cost;l++)
   for(r=0;r<cost;r++)
      for(i=0;i<M;i++)
         for(k=0;k<S;k++)
                 derF[l][r]+=y[i]*sommatoria[l][r][i];  
				__________________ "May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." Ultima modifica di salvodel : 29-11-2007 alle 11:31. | 
|   |   | 
|  28-11-2007, 12:24 | #2 | 
| Senior Member Iscritto dal: Oct 2006 
					Messaggi: 1105
				 | 
		usando la distributività, y[i]*sommatoria_j(alfa[j])=sommatoria_j(alfa[j]*y[i]). consegue che basta: Codice: for(l=0;l<cost;l++)
   for(r=0;r<cost;r++)
      for(i=0;i<M;i++)
         for(k=0;k<S;k++)
             derF[l][r] += y[i]*x[i][k]*z[k]* ((k=l)?1:0)*u[r];Ultima modifica di mad_hhatter : 28-11-2007 alle 12:31. | 
|   |   | 
|  28-11-2007, 13:20 | #3 | |
| Senior Member Iscritto dal: Dec 2004 
					Messaggi: 783
				 | Quote: 
 Ciao 
				__________________ "May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." | |
|   |   | 
|  28-11-2007, 14:40 | #4 | 
| Senior Member Iscritto dal: Oct 2006 
					Messaggi: 1105
				 | |
|   |   | 
|  28-11-2007, 16:15 | #5 | |
| Senior Member Iscritto dal: Dec 2004 
					Messaggi: 783
				 | Quote: 
 Ciao 
				__________________ "May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." Ultima modifica di salvodel : 28-11-2007 alle 19:34. | |
|   |   | 
|  28-11-2007, 19:53 | #6 | 
| Senior Member Iscritto dal: Dec 2004 
					Messaggi: 783
				 |  Se la formula è invece cosi come mi conviene riscriverla? In un'altra formula simile ho utilizzato le seguenti righe per calcolare i gli ultimi termini tra parentesi: Codice: for(int i=0;i<s; i++)
    for(int k=0;k<N; k++)
        som[i]+=x[i][k]*z[k];
for(int i=0;i<s; i++)
    som[i]+=w[i][10];Codice: for(int i=0;i<s; i++)
    for(int k=0;k<N; k++)
        som[i]+=x[i][k]*z[k];
for(int i=0;i<s; i++)
    som[i]+=w[i][10];
//A questo punto inserisco le stesse righe di prima ma moltiplicate per SOMMMA[i]
for(l=0;l<cost;l++)
   for(r=0;r<cost;r++)
      for(i=0;i<M;i++)
         for(k=0;k<S;k++)
             derF[l][r] += y[i]*x[i][k]*z[k]* ((k=l)?1:0)*u[r]*SOMMA[i];Grazie 
				__________________ "May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." Ultima modifica di salvodel : 29-11-2007 alle 18:05. | 
|   |   | 
|  29-11-2007, 11:30 | #7 | 
| Senior Member Iscritto dal: Oct 2006 
					Messaggi: 1105
				 | Quote: | 
|   |   | 
|  29-11-2007, 12:06 | #8 | |
| Senior Member Iscritto dal: Dec 2004 
					Messaggi: 783
				 | Quote: 
  Come ti dicevo prima in un’altra parte del programma mi creavo prima la variabile SOMMA dipendente solo da k e poi la mettevo nella formula che però era leggermente diversa. In questo caso essendo la sua derivata ho il prodotto della derivata della funzione per la derivata del suo argomento…ma questo non penso che ti interessa visto che oltretutto alla formula ho tolto un po di fronzoli per renderla piu snella. Comunque dicevo, non mi conviene anche in questo caso crearmi la variabile SOMMA in questo modo: Codice:  for(int i=0;i<s; i++)
    for(int k=0;k<N; k++)
        SOMMA[i]+=x[i][k]*z[k];
for(int i=0;i<s; i++)
    SOMMA[i]+=x[i][10];Se mi trovassi con la seguente formula:  Non farei cosi? Codice: /*Creo prima la variabile SOMMA[i]*/
for(i=0;i<M;i++)
   for(k=0;k<N;k++)
      SOMMA[i]+=x[i][k]z[k];
/*A questo punto faccio il prodotto tra i termini x[i][k], z[k] e SOMMA[1]*/
for(i=0;i<M;i++)
   for(k=0;k<N;k++)
      d+=x[i][k]*z[k]SOMMA[i]  
				__________________ "May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." | |
|   |   | 
|  29-11-2007, 16:20 | #9 | 
| Senior Member Iscritto dal: Oct 2006 
					Messaggi: 1105
				 | 
		[edit]
		 | 
|   |   | 
|  29-11-2007, 16:22 | #10 | 
| Senior Member Iscritto dal: Oct 2006 
					Messaggi: 1105
				 | Quote: io farei: cella[l,r] = 0; loop(i) { somma_1 <- prima sommatoria in k (calcolata con un loop) somma_2 <- seconda sommatoria in k (calcolata con un ulteriore loop indipendente da quello di somma_1) cella[l,r+] += y[i]*somma_1*somma_2 } PS: per rendere più leggibile la formula io sposterei la prima parentesi subito prima della corrispondente sommatoria | 
|   |   | 
|  29-11-2007, 18:18 | #11 | |
| Senior Member Iscritto dal: Dec 2004 
					Messaggi: 783
				 | Quote: 
 Quindi provo a scriverlo come l'ho "fra"inteso Codice: for(l=0;l<cost;l++)
   for(r=0;r<cost;r++)
      for(i=0;i<M;i++)
         for(k=0;k<S;k++)
             SOMMA1[l][r][i]+=x[i][k]*z[k]* ((k=l)?1:0)*u[r];
for(int i=0;i<s; i++)
    for(int k=0;k<N; k++)
        SOMMA2[i]+=x[i][k]*z[k];
for(int i=0;i<s; i++)
    SOMMA2[i]+=w[i][10];
for(l=0;l<cost;l++)
   for(r=0;r<cost;r++)
      for(i=0;i<M;i++)
         for(k=0;k<S;k++)
                 derF[l][r]+=y[i]*SOMMA1[l][r][i]*SOMMA2[i];1- che cosa fa loop e perché hai fatto tutto insieme? 2- la prima sommatoria non dovrebbe mantenere espliciti gli indici l ed r ? 
				__________________ "May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." | |
|   |   | 
|  30-11-2007, 10:12 | #12 | |
| Senior Member Iscritto dal: Oct 2006 
					Messaggi: 1105
				 | Quote: 
 2. la prima sommatoria (loop(i)) è fatta assumendo fissati l,r... in pratica loop(i) va annidato rispetto al loop in l e a quello in r | |
|   |   | 
|  30-11-2007, 12:47 | #13 | |
| Senior Member Iscritto dal: Dec 2004 
					Messaggi: 783
				 | Quote: 
 Il tuo è sicuramente piu elegante ma date le mie scarse conoscenze di C credi che quello che abbia scritto io sia corretto oppure è puro vaneggiamento? Grazie 
				__________________ "May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." | |
|   |   | 
|  30-11-2007, 13:10 | #14 | |
| Senior Member Iscritto dal: Oct 2006 
					Messaggi: 1105
				 | Quote: 
  non so se è più elegante, è solo più compatto rispetto a vari loop indipendenti. il tuo non è puro vaneggiamento: non ho controllato i dettagli, ma mi pare che facessi più o meno le stesse cose, solo con loop indipendenti. | |
|   |   | 
|  30-11-2007, 15:47 | #15 | |
| Senior Member Iscritto dal: Dec 2004 
					Messaggi: 783
				 | Quote: 
 Se hai due minuti giusto per dargli un occhiata per verificare che il tutto sia corretto(intendo la corrispondenza tra la formula e i cicli for) sarebbe perfetto poiché ancora non ho avuto modo di farlo girare per errori vari tra cui questo che non ho ancora capito che vuol dire: edit Capito. Ora l'ho fatto girare ma il sistema si blocca  . Ed ora    ? 
				__________________ "May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." Ultima modifica di salvodel : 30-11-2007 alle 15:57. | |
|   |   | 
|  30-11-2007, 16:56 | #16 | |
| Senior Member Iscritto dal: Oct 2006 
					Messaggi: 1105
				 | Quote: 
 | |
|   |   | 
|  02-12-2007, 21:36 | #17 | |
| Senior Member Iscritto dal: Dec 2004 
					Messaggi: 783
				 | Quote: 
 Grazie 
				__________________ "May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." | |
|   |   | 
|  02-12-2007, 23:29 | #18 | 
| Senior Member Iscritto dal: Jun 2005 Città: Napoli 
					Messaggi: 2599
				 | 
		se lo posti qui ti possiamo dare tutti una mano...compilandolo anche noi magari...
		 
				__________________ Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread | 
|   |   | 
|  03-12-2007, 17:00 | #19 | |
| Senior Member Iscritto dal: Dec 2004 
					Messaggi: 783
				 | Quote: 
 Se c'è qualcuno che ha voglia di perdere $tempo$. gepeppe tu sei di napoli? Troppo lontano   Se non trovo nessuno e non ci riesco provo a postarlo qui. Grazie 
				__________________ "May the wind always be at your back and the sun upon your face. And may the wings of destiny carry you aloft to dance with the stars...." | |
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 16:38.









 
		 
		 
		 
		









 
  
 



 
                        
                        










