Просто чтобы убедиться, что все затронуто, когда вы используете Matlab, вы должны всегда векторизовать, а это не было сделано в исходном коде.Поэтому я бы порекомендовал:
zeta = zeros(1,5)
alpha=[1e5,1e3,1e5,1e7,1e3];
dz = 0.001;
for i=1:length(zeta)
zeta(i) = alpha(i)/(dz*dz);
end
На самом деле записать как:
alpha = [1e5,1e3,1e5,1e7,1e3];
dz = 0.001;
zeta = alpha/dz^2;
Тогда код, который вы пишете в numpy, гораздо более естественным образом следует из того, что вы написали в Matlabи аналогично использует векторизацию.
import numpy
alpha = numpy.array([1e5,1e3,1e5,1e7,1e3])
dz = 0.001
zeta = alpha/(dz*dz)
В обоих случаях нет необходимости предварительно выделять.
ДОБАВЛЕНИЕ ПОСЛЕ РЕДАКТИРОВАНИЯ: Так что я думаю, что в первом блоке все еще есть некоторые ошибки.У вас было:
nl= 7;
l=[0.3,0.1,0.2,0.1,0.1,0.1,0.3)
wz=zeros(1,nl); %layer width
temp=0; %auxiliary temp variable
for i=1:nl
wz(i)=l(1,i)*(nz-1)+temp;
temp=wz(1,i);
end
Вы никогда не определили nz, поэтому я предполагаю, что вы имели в виду скаляр nl, который (я думаю) должен быть длиной l (или это было просто совпадение?).Просто для первой части, я предполагаю, что это то, что вы хотели бы сделать:
l=[0.3,0.1,0.2,0.1,0.1,0.1,0.3];
nl = length(l);
wz = cumsum(l*(nl-1));
Это, конечно, версия Matlab, и естественная версия также следует естественным образом, где:
l = numpy.array([0.3,0.1,0.2,0.1,0.1,0.1,0.3])
n1 = len(l)
wz = numpy.cumsum(l*(n1-1))
Я хотел бы уточнить, что это было то, что вы хотели в первой части, прежде чем я сделаю удар во второй.