Ceci est un programme permettant de calculer la Transformee de Fourier Discrète de la fonction f(x) = x(1-x) sur l'intervalle [0,1].
Je débute en Java donc il se peut que mon code ne soit pas trop optimisé,
n'hésiter à mettre des commentaires.
Source / Exemple :
import java.io.*;
import java.lang.*;
class DFT
{ static int NMAX = 128;
static int MMAX = 8;
static double [] fr = new double[NMAX];
static double [] fi = new double[NMAX];
static double [] gr = new double[NMAX];
static double [] gi = new double[NMAX];
static void dft(double [] fr, double [] fi,double [] gr,double [] gi, int n)
{
int i,j;
double pi,x,q;
pi = 4*Math.atan(1);
x = 2*pi/n;
for (i = 0; i < n; ++i)
{
gr[i] = 0;
gi[i] = 0;
for (j = 0; j < n; ++j)
{
q = x*j*i;
gr[i] = gr[i]+fr[j]*Math.cos(q)+fi[j]*Math.sin(q);
gi[i] = gi[i]+fi[j]*Math.cos(q)-fr[j]*Math.sin(q);
}
}
}
public static void main( String argv[] ) {
int i,n,m;
double f0,h,rn,x;
//double fr[],fi[],gr[],gi[];
double [] fr = new double[NMAX];
double [] fi = new double[NMAX];
double [] gr = new double[NMAX];
double [] gi = new double[NMAX];
n = NMAX;
m = MMAX;
h = 1.0/(n-1);
rn = n;
f0 = 1/Math.sqrt(rn);
for (i = 0; i < n; ++i)
{
x = h*i;
fr[i] = x*(1-x);
fi[i] = 0;
}
dft (fr,fi,gr,gi,n);
for (i = 0; i < n; ++i)
{
gr[i] = f0*gr[i];
gi[i] = f0*gi[i];
}
/* execution de la transformee inverse */
for (i = 0; i < n; ++i)
{
gi[i] = -gi[i];
}
dft (gr,gi,fr,fi,n);
for (i = 0; i < n; ++i)
{
fr[i] = f0*fr[i];
fi[i] = -f0*fi[i];
if (i == 0 || i%m == 0)
{
x = h*i;
System.out.println(x + " " + fr[i] );
}
}
}
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.