Bonjour, je reviens vers vous, car il y a un truc qui m'échappe dans une portion de programme que j'ai traduit. Voilà lors de ma première traduction du programme matlab ci-dessous la boucle while s'exécutait à l'infini j'ai donc mis un break pour casser la boucle et ça avait l'air de marcher, sauf qu'en fait ça modifie des variables qui se trouve dans le for. Je m'intéresse à i. J'ai printer les variables respectivement sur matlab et sur python pour que vous voyez. Sous matlab c'est ce que je doit avoir avec python. Or dans mon programme python i n'est pas le même (quand je sors du for à la fin). Qu'est-ce qui ne va pas dans ma traduction ?
Code MATLAB : 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 %%MATLAB code .... ii=1; %% Mainloop jj = 0; while ii > 0 && ii<=floor(count/Nbtot) if mod(ii,Ni/(10*Nbtot)) == 0 jj = jj + 10; disp([num2str(jj),' %']) end nu = Ei; %Energy given to nucleus during the all cascade xi = []; %positions to calculate the cascade volume yi = []; delta = [0 0]; type = 0; Nbiii = Nbi; %impact of the molecule at the surface for ll = [1:Nbtot] type = floor(3*rand+1); %chose the the ion randomly while Nbiii(type) == 0 %if the type chosen is not available type = floor(3*rand+1); %chose the the ion randomly end Nbiii(type) = Nbiii(type)-1; %I remove an atom in the number of atoms in the molecule because I will implant it i = Nbtot*(ii-1) + ll; %rank ion(i,5) = type; %ion nb i type E = Ei*Mitot(type)/Mmolecule; %energy of the ion Mi = Mitot(type); Zi = Zitot(type); %disp(Nbtot)=9.0 9.0 9.0 .... %disp(ii)=1 1 1 1 1.. 2 2 2 2 2.... 3 3 3 3... %disp(ll)=1.0 2.0 3.0 4.0 5.0 6.0 ... %disp(i)=1.0 2.0 3.0 4.0 5.0 6.0 ... %initialisation - Backscattering levelnb = [1 1 1];
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 ##PYTHON CODE .... ii = 1 jj=0 while ii > 0 and ii <= np.floor(count / Nbtot): if np.remainder(ii,Ni / (10*Nbtot)) == 0: jj=jj + 10 print(str(jj)+'%') nu=Ei xi=np.array([]) yi=np.array([]) delta=np.array(np.hstack((0,0))) type=0 Nbiii=Nbi for ll in np.array(np.hstack((np.arange(1, Nbtot+1)))): type=np.floor(3*np.random.random() + 1) while Nbiii[int(type)-1] == 0: type=np.floor(3*np.random.random() + 1) break Nbiii[int(type)-1]=Nbiii[int(type)-1] - 1 i=Nbtot*(ii - 1) + ll ion[int(i)-1,4]=type E=np.dot(Ei,Mitot[int(type)-1]) / Mmolecule Mi=Mitot[int(type)-1] Zi=Zitot[int(type)-1] #print(Nbtot)=9.0 9.0 9.0 .... #print(ii)=1 1 1 1 1.. 2 2 2 2 2.... 3 3 3 3... #print(ll)= 1.0 2.0 3.0 4.0 5.0 6.0 ... #print(i)=1.0 2.0 3.0 4.0 5.0 6.0 ... #print(Nbtot)=9.0 9.0 9.0 .... #print(ii)= 1.0 2.0 3.0 4.0 5.0 6.0 ... #print(ll)=9.0 9.0 9.0 .... #print(i)=9.0 18.0 27.0 36.0... levelnb = np.array(np.hstack((1, 1, 1)))
Partager