Bonjour tous,
Voila j'aimerai optimiser le code ci dessous, pour donner une id�e une multiplication en moins dans la 3eme boucle for c'est 1s de temps de calculmon r�ve serait de pouvoir supprimer la racine carre ^^ sachant que je connais a^2 je voudrais a^3
Notes:
- les vecteurs sont des classes de Eigen3
- TmpParamForBS c'est des constantes pr�-calcul�es
- Cette fonction r�alise une int�gration en type double.
Je suis preneur de toute id�e
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 void Truc::get_precalc_B_optimized(const Vector3d & m, Vector3d & b,const TmpParamForBS & tmp) { Vector3d OM=Mrot.transpose()*(m-pos); b=Vector3d(0,0,0); double omx=OM[0]; double omy=OM[1]; double omz=OM[2]; double omx_dl2_L2=omx-tmp.dl2_L2; std::vector<double> rx_list(tmp.rk); for(int k=0;k<tmp.rk;k++) rx_list[k]=(-k*tmp.dl+omx_dl2_L2); std::vector<double> rx2_list(tmp.rk); for(int k=0;k<tmp.rk;k++) rx2_list[k]=rx_list[k]*rx_list[k]; for(int i=0;i<tmp.ri;i++) { double alpha=i*tmp.dtheta+tmp.dtheta2; double co=cos(alpha); double si=sin(alpha); for(int j=0;j<tmp.rj;j++) { Vector3d Btemp(0,0,0); double ray = j*tmp.de+tmp.R_de2; double omy_ray_c = omy-ray*co; double omz_ray_s = omz-ray*si; double si_r2_co_r1 = si*omz_ray_s+co*omy_ray_c; double omy_ray_c2_omz_ray_s2 = omy_ray_c*omy_ray_c+omz_ray_s*omz_ray_s; for(int k=0;k<tmp.rk;k++) { double rx=rx_list[k]; double nr2=rx2_list[k]+omy_ray_c2_omz_ray_s2; double nr= sqrt(nr2); //if(nr>quantom_zero) { Btemp+= Vector3d(si_r2_co_r1, -co*rx, -si*rx)/(nr2*nr); } } b+= (tmp.tmp1*j + tmp.tmp2)*Btemp; } } b*=Mu0_Pi4*tmp.J ; b=Mrot*b; }
merci d'avance pour vos suggestions.
Partager