Bonjour,
Je suis nouveau en c/c++ et j'essaye en ce moment d'écrire un programme en c++ qui me calcul les éléments d'une matrice à 2 dimensions, stocker les resultats d'un fichier text pour l'utiliser dans un autre programme global (pas encore réalisé !
Les élèments de la matrice calculés par ce programme sont :
matrice(k,l) = exp(j*2*pi*(k-1)*(sin(xk)-sin(x0)))*exp(j*2*pi*(l-1)*(sin(yk)-sin(y0)))
avec k = 1, 2 ,..., N
l = 1,2,....,M
xk = 0,...,90 (avec un pas donné)
yk = 0,...,360 (avec un pas donné)
x0 choisi entre 0 et 90
y0 choisi entre 0 et 360
J'ai 3 questions à vos poser svp:
1) que pensez vous ce code ?
2) j'ai problème d'allocation dynamique je crois mais je ne vois pas comment le résoudre ! car qd je compile avec le paramèttre STEP=1 tout marche bien par contre qd je le lance avec STEP=0.1 il m'affiche le message suivant "16223 [main] output 5388 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack) Segmentation fault (core dumped)"
3) Normalement les deux paramettres N et M sont relativement grands (de l'ordre de 100), le temps de calcul est important dans ce cas. Comment optimiser mon code pour qu'il soit rapide ?
ci-joint ce que j'ai pu faire pour le moment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
48
49
50
51
52
53
54
55
56
57
58
59
60 #include <iostream> #include <iomanip> #include <fstream> #include <math.h> #include <complex> using namespace std; #define STEP 0.1 #define nthetaMAX 901 #define nphiMAX 3601 int main() { float theta0,phi0,d2r,dn,dm,A0,B0,Ak,Bk; int N,M; int n1,n2,n3,n4; complex <float> matrice[nthetaMAX][nphiMAX]; // *************************** // declaration de paramettres // *************************** theta0 = 30; phi0 = 136; dn = 3.2; dm = 2.7; N = 5; M = 8; d2r = M_PI/180; // ********************************** // Calcul des éléments de la matrice // ********************************** A0 = -2*M_PI*dn*sin(theta0*d2r); B0 = -2*M_PI*dm*cos(phi0*d2r); for (n1 = 0; n1 < nthetaMAX-1; n1++){ for (n2 = 0; n2 < nphiMAX-1; n2++){ Ak = 2*M_PI*dn*sin(n1*STEP*d2r); Bk = 2*M_PI*dm*cos(n2*STEP*d2r); for (n3 = 0; n3 <= N-1; n3++){ for (n4 = 0; n4 <=M-1; n4++){ matrice [n1][n2]+= exp(complex<float>(0,n3*A0))*exp(complex<float>(0,n4*B0))*exp(complex<float>(0,n3*Ak))*exp(complex<float>(0,n4*Bk)); } } } } //cout << "printfile"; ofstream myfile; myfile.open ("test.txt"); for (n1=0; n1 <= nthetaMAX-1; n1++){ for (n2=0; n2 <= nphiMAX-1; n2++){ myfile << (abs(matrice[n1][n2])) << " "; } myfile << endl; } myfile.close(); }
Partager