Si vous connaissez le site Numerical recipe, que pensez vous de leurs codes C++?
en terme de rigeur, rapidit�...?
merci
Version imprimable
Si vous connaissez le site Numerical recipe, que pensez vous de leurs codes C++?
en terme de rigeur, rapidit�...?
merci
La qualit� (en terme code pur, pas de performance) est � mon avis d�plorable. C'est principalement du C sur lequel ils ont jet� deux ou trois fonctionalit�s du C++. Les variables sont toutes d�clar�es en d�but de fonction, ils mettent du using namespace std partout et ne font aucune utilisation de la biblioth�que standard.
Le code est par contre conforme � l'algorithme d�crit dans le texte, que ce soit au niveau de la correction ou de la complexit�.
La base du code est l�, mais si tu veux le modifier un tant soit peu, mieux vaut commencer par le r�-�crire un peu plus proprement.
en fait, voila pourquoi je pose cette question. LE code ci dessous est tir� de NR.
Il permet de calculer la FFT d'un 2^n points .
Le probl�me est que j'arrive pas a l'utiliser. Alors si vous pouviez m'aider, ca serait bien.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 void four1(float data[],unsigned long nn,int isign) { unsigned long n,mmax,m,j,istep,i; double wtemp,wr,wpr,wpi,wi,theta; float tempr,tempi; n=nn<<1; j=1; for (i=1;i<n;i+=2){ if(j>i){ SWAP(data[j],data[i]); SWAP(data[j+1],data[i+1]); } m=nn; while (m>=2 && j>m){ j-=m; m>>=1; } j+=m; } mmax=2; while(n>mmax){ istep=mmax<<1;cout<<istep; theta=isign*(6.283185/mmax); wtemp=sin(0.5*theta); wpr=-2*wtemp*wtemp; wpi=sin(theta); wr=1; wi=0; for(m=1;m<mmax;m+=2){ for(i=m;i<=n;i+=istep){ j=i+mmax; tempr=wr*data[j]-wi*data[j+1]; tempi=wr*data[j+1]+wi*data[j]; data[j]=data[i]-tempr; data[j+1]=data[i+1]-tempi; data[i]+=tempr; data[i+1]+=tempi; } wr=(wtemp=wr)*wpr-wi*wpi+wr; wi=wi*wpr+wtemp*wpi+wi; } mmax=istep; } cout<<data[0]<<";"<<data[1]<<";"<<data[2]<<";" <<data[3]; <<";"<<data[4] ; }
Je ne sais pas comment appeller la fonction four1 et comment obtenir les outputs.
Normalement, on devrait faire comme ca:
La r�ponse serait normalement : ([14, -1., 0, -1.]) mais c'est pas ce que j'obtiens.Code:
1
2
3
4
5 int main(){ float A[4]={3,2,4,5} four1(A,4,1) }
Je sais que c'est difficile de comprendre un code aussi long sans avoir lu auparavant un pseudo-algo, mais si vous pouvez jetter un coup d'oeil ca serait bien.
Bonjour,
Il faut aussi lire ce qui est pr�cis� dans NC.
Charge ce fichier pdf:
http://www.ma.utexas.edu/documentati...cpdf/c12-2.pdf
four1 utilise des nombres complexes arrang�s dans un tableau de float.
j'ai vu merci
mais je crois que leur code ne fonctionne pas.
La r�ponse n'est pas forc�ment celle que tu donnes... Avant de dire que �a ne marche pas, relis un cours sur la FFT. - Je n'ai pas fini mon tuto sur la FFT, mais regarde la partie 1-C http://miles.developpez.com/tutoriels/algo/fft/ -
Pourquoi ne pas utiliser FFTW comme tout le monde ?
Bonjour,
Peut-�tre que leur code ne fonctionne pas, je ne l'ai pas �pluch�.Citation:
Envoy� par deubelte
MAIS, au moins, utilise des donn�es au format attendu par la fonction pour tes tests, ce qui n'est pas du tout le cas avec l'exemple que tu nous as donn�, ce qui, bien entendu, ne saurait donner un r�sultat coh�rent.
Puisque tu avais vu ce qu'il fallait, pourquoi ne pas avoir utilis� des donn�es correctes ?
[CITATION]
Pourquoi ne pas utiliser FFTW comme tout le monde ?
[/CITATION]
parce que je ne sais pas ou ca se trouve.
Ou ca se trouve?
[CITATION]
ce qui n'est pas du tout le cas avec l'exemple que tu nous as donn�, ce qui, bien entendu, ne saurait donner un r�sultat coh�rent.
[/CITATION]
ah bonn?? je croyais que j'avais donn� le bon format. Quel est le format qu'il faut donner?
float data[]
c'est bien un truc du style:
data[4]={3,2,4,5};
Non?
enfin,
quelles sont les balises pour les citations?
Tu tapes FFTW dans un moteur de recherche et magie, il te dit o� �a se trouve.
Par contre je croyais que c'�tait LGPL, pas GPL. �a peut donc �tre probl�matique.
Oui,la d�claration correspond bien � ce que tu fais,Citation:
Envoy� par deubelte
MAIS tu as �crit plus haut que tu avais vu le papier que je t'ai signal�, et le format, pour 4 valeurs, ce n'est pas ce que tu utilises, j'ai donc un s�rieux doute sur ton affirmation.
D'ailleurs, je suis m�me �tonn� que tu aies pu �crire
Car, avec l'appel comme tu dis l'avoir fait,Citation:
Envoy� par deubelte
tu devrais avoir un joli "access violation", car avec le 2�me param�tre = 4, il faut un tableau d'au moins 2*4 = 8 �l�ments.Citation:
Envoy� par deubelte
Relis le papier, et pas seulement le code.
Et j'ajoute : certes, il est presque certain qu'il y a des erreurs dans les codes de Numerical Recipes, mais avant d'accuser ce code, il est n�cessaire de l'utiliser correctement.
Salut,
Il me semble qu'il y a aussi de la FFT dans la GSL. Qui elle, est GPL ...
http://www.gnu.org/software/gsl/manu...ier-Transforms
J'ai utilis� la fft de NR il y a 7 ans, et je confirme qu'elle fonctionne parfaitement bien (comparaison effectu�e des r�sultats avec ceux fournis par matlab).