It does not stop!

1 vue (au cours des 30 derniers jours)
Rebecca D'Onofrio
Rebecca D'Onofrio le 9 Sep 2021
This code does not stop if I don't put the condition "while n<nmax".
where is the problem???
D=D39+D40+DO+DNa+DFe; %coefficienti di diffusione
F=F39+F40; %prodotti di fissione
CAPTURE=[Pu39capture+Pu40capture+Nacapture+Fecapture+Ocapture]; %sigma di cattura
FISSION=[Pu39fission+Pu40fission]; %sigma di fissione
ELREM=[Pu39elrem+Pu40elrem+Naelrem+Feelrem+Oelrem]; %sigma di scattering elastico(direclty coupled)
%si passa poi alla creazione delle matrici che serviranno per i sucessivi
%calcoli dei flussi, assegnando anche dei valori iniziali al buckling, a K,
%e definendo il vettore dei flussi
B0=6E-4;
K=0;
FLUX=zeros(26,1);
MATFIS=zeros(26,1); % vettore dei termini di fissione
for ii=1:26
MATFIS(ii)=X(ii)*F(ii);
end
%calcolo un flusso iniziale:
for ii=1:26
FLUX0(ii)=1/F(ii);
end
nmax=10000
n=0;
while abs(K-1)>(10^-5) & n<nmax
%definisco la matrice dei coefficienti andando prima a riempire la diagonale di una matrice vuota
A=zeros(26,26);
for ii=1:26
for jj=1:26
for ii=jj
A(ii,jj)=D(ii).*B0+REMOVAL(ii);
end
end
end
% e successivamente aggiungendo i termini di scattering
% ottenendo una matrice triangolare inferiore
for jj=1:26
if ii~=jj
M(ii,jj)=A(ii,jj)-ELREM(ii)-INELASTIC(ii,jj);
end
end
for ii=1:26
for jj=1:26
COEFFICIENTI(ii,jj)=M(ii,jj)+A(ii,jj);
end
end
% il vettore soluzione dei flussi è:
FLUX= COEFFICIENTI^-1*MATFIS;
%inizialmente la sorgente viene considerata nulla, nelle varie
%iterazioni viene di volta in volta ricalcolata, e di conseguenza anche
%il valore di K viene aggiornato
SOURCE=0;
for ii=1:26
SOURCE=F.*FLUX;
end
K=SOURCE;
%avendo dato a B un valore di partenza molto basso, bisogna
%incrementarlo nelle iterazioni successive
deltaB=10^-6;
format long
B0=B0+deltaB
n = n+1;
end
Raggio=pi/sqrt(B0)

Réponse acceptée

Image Analyst
Image Analyst le 9 Sep 2021
Your code doesn't run for us because these variables are not defined:
D=D39+D40+DO+DNa+DFe; %coefficienti di diffusione
F=F39+F40; %prodotti di fissione
CAPTURE=[Pu39capture+Pu40capture+Nacapture+Fecapture+Ocapture]; %sigma di cattura
FISSION=[Pu39fission+Pu40fission]; %sigma di fissione
ELREM=[Pu39elrem+Pu40elrem+Naelrem+Feelrem+Oelrem]; %sigma di scattering elastico(direclty coupled)
but in general you should ALWAYS have a failsafe like "&& n < nMax" to prevent infinite loops.
If it doesn't exit until n hits nMax then there is some other problem with your exit condition abs(K-1)>(10^-5). It must always be true so evidently your K never gets in the range 0.99999 to 1.00001.

Plus de réponses (0)

Catégories

En savoir plus sur Programming dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by