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();
 
}