Come calcolare la funzione Sin più veloce e più precisa?

8

Voglio calcolare y(n)=32677Sin(45/1024•n) , dove y è un numero intero e n varia da 0 a 2048. Come posso rendere questo processo più rapido e più preciso?    Ora voglio mostrarti una risposta di riferimento:    Poiché Sin(a+b)=Sin(a)Cos(b)+Cos(a)Sin(b)    E Cos(a+b)=Cos(a)Cos(b)-Sin(a)Cos(b) .    Quindi posso memorizzare solo Sin(45/1024•1) e Cos(45/1024•1) . Quindi usa questa formula:

Sin(45/1024•2)=Sin(45/1024•1+45/1024•1) ,     %codice%,   %codice%,     %codice% , In questo modo, forse più veloce senza memorizzare un grande array.

    
posta LaiJong 08.10.2012 - 15:06
fonte

3 risposte

18

Se n varia da 0 a 2048, puoi pre-calcolare i valori, quindi archiviarli in una matrice. y(n) diventerebbe values[n] .

    
risposta data 08.10.2012 - 15:17
fonte
1

Calcola la tabella in fase di compilazione anziché in fase di esecuzione.

Stai facendo una tabella di 2048 elementi con valori in scala interi a 16 bit.

Scrivi uno script Matlab economico, con una stampa che dia una linea dati adatta al tuo linguaggio di programmazione finale. Taglia e incolla il risultato nel codice sorgente, come una tabella di dati costante, ed esegui una ricerca tabella in fase di esecuzione. Ciò spinge il tempo di calcolo iniziale nel ciclo di build, invece del tempo di avvio del programma.

    
risposta data 08.10.2012 - 18:52
fonte
1

Data la forma della funzione, la risposta naturale è l'algoritmo CORDIC . È un approccio molto più pulito rispetto alla rottura della domanda. D'altra parte, la tabella di cui ha bisogno è molto, molto più piccola della tabella che altri hanno suggerito.

    
risposta data 10.10.2012 - 18:46
fonte

Leggi altre domande sui tag