It does not stop!

10 Ansichten (letzte 30 Tage)
Rebecca D'Onofrio
Rebecca D'Onofrio am 9 Sep. 2021
Beantwortet: Image Analyst am 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)

Akzeptierte Antwort

Image Analyst
Image Analyst am 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.

Weitere Antworten (0)

Kategorien

Mehr zu Workspace Variables and MAT-Files finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by