It does not stop!

1 回表示 (過去 30 日間)
Rebecca D'Onofrio
Rebecca D'Onofrio 2021 年 9 月 9 日
回答済み: Image Analyst 2021 年 9 月 9 日
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)

採用された回答

Image Analyst
Image Analyst 2021 年 9 月 9 日
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.

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeProgramming についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by