What is the modification needed in the below code

1 次查看(过去 30 天)
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

采纳的回答

Walter Roberson
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)

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 MATLAB 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by