What is the modification needed in the below code
์กฐํ ์: 1 (์ต๊ทผ 30์ผ)
์ด์ ๋๊ธ ํ์
Amy Topaz
2022๋
3์ 17์ผ
๋๊ธ: Rena Berman
2022๋
4์ 8์ผ
Are the below code same? I am getting different results.
%First
scale0 = 1500;
Nai = linspace(1e13,1e19,scale0); %๐๐:1ร1013โ1ร1019๐mโ3
Ndi = linspace(1e13,1e19,scale0); %๐๐:1ร1013โ1ร1019๐mโ3
Na = ones(scale0,1)*Nai;
Nd = Ndi.'*ones(1,scale0);
y = 0;
z = 0;
%Computing Fermi Energy Level
Ef = ones(scale0,1)*0;
while y < 1500
y = y + 1;
while z < 1500
z = z + 1;
eq1 = @(Ef) ((Nc)*exp(-(Ec-Ef)/(kbT))) + ((Na(y,z))/(1 + 4*exp(-(Ef-Ea)/(kbT)))) - ((Nv)*exp(-(Ef-Ev)/(kbT)) + ((Nd(y,z))/(1 + 2*exp(-(Ed-Ef)/(kbT)))));
x1 = [0 10];
Ef(y,z) = fzero(eq1,x1);
end
end
%Second
scale0 = 1500;
Nai = linspace(1e13,1e19,scale0); %๐๐:1ร1013โ1ร1019๐mโ3
Ndi = linspace(1e13,1e19,scale0); %๐๐:1ร1013โ1ร1019๐mโ3
Na = ones(scale0,1)*Nai;
Nd = Ndi.'*ones(1,scale0);
%Computing Fermi Energy Level
Ef = ones(scale0,1)*0;
for y=1:prod(size(Nai))
for z=1:prod(size(Ndi))
eq1 = @(Ef) ((Nc)*exp(-(Ec-Ef)/(kbT))) + ((Na(y,z))/(1 + 4*exp(-(Ef-Ea)/(kbT)))) - ((Nv)*exp(-(Ef-Ev)/(kbT)) + ((Nd(y,z))/(1 + 2*exp(-(Ed-Ef)/(kbT)))));
x1 = [0 10];
Ef(y,z) = fzero(eq1,x1);
end
end
๋๊ธ ์: 1
์ฑํ๋ ๋ต๋ณ
Walter Roberson
2022๋
3์ 17์ผ
Look at the first set of code. You initialize z = 0 outside both loops. In the inner loop you add 1 to each z, ending when z >= 1500. Now consider the second iteration of the while y loop, when y increments from 1 to 2. z is still 1500 from the previous while z<1500 loop, because you never reset z to 0. So for the rest of the y iterations, you do no z work.
Side note:
prod(size(Nai))
can be written more efficiently as
numel(Nai)
๋๊ธ ์: 3
์ถ๊ฐ ๋ต๋ณ (0๊ฐ)
์ฐธ๊ณ ํญ๋ชฉ
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!