В этом коде я использовал алгоритм Томаса для вычисления V(k,i)
и ni(k,i)
.
Алгоритм Томаса основан на двух шагах:
- первым является исключение вперед (см. Первый цикл (
for i=1:nx
).
- вторая обратная ликвидация
i=nx-1:-1:1
).
На первом шаге я вычисляю матричные коэффициенты, а во втором цикле я вычисляю неизвестные V(k,i)
.
Моя проблема:
- как рассчитать коэффициент
dp(k,i)
, который зависит от ni(k,i)
, но
ni(k,i)
в последнем цикле?
- возможно вопрос в том, как использовать данные предыдущего расчета в
следующий расчет?
K
- итерация времени.
i
- итерация пространства.
python
for k=1:nt
for i= 1:nx
ap(k,i)= 1;
bp(k,i)= -2;
cp(k,i)= 1;
dp(k,i)= -(dx.^2).*(ni(k,i));
alphap(k,i)=-cp(k,i)./(bp(k,i) + ap(k,i).*alphap(k,i-1));
betap(k,i)=(dp(k,i)-ap(k,i).*betap(k,i-1))./(bp(k,i)+ ap(k,i).*alphap(k,i-1));
end
V(k,nx) = betap(k,nx);
for i=nx-1:-1:1
V(k,i)=alphap(k,i).*V(k,i+1) + betap(k,i);
Ti1= (V(k,i+1)-V(k,i));
Ti2= (V(k,i)-V(k,i-1));
end
for i=1:nx
ai(k,i)= (Di.*exp(Ti2).*Ti2)./((dx.^2).*(1-exp(Ti2)));
bi(k,i)= 1/dt-(Di.*(exp(Ti1).*Ti1))./(dx^2);
ci(k,i)= (Di.*Ti1)./((dx^.2)*(1-exp(Ti1)));
di(k,i)= (1/dt).*ni(k,i)+Ki.*nn.*ne(k,i);
alphai(k,i)=-ci(k,i)./(bi(k,i) + ai(k,i).*alphai(k,i-1));
betai(k,i)=(di(k,i)-ai(k,i).*betai(k,i-1))./(bi(k,i)+ ai(k,i).*alphai(k,i-1));
end
ni(k,nx) = betai(k,nx);
for i=nx-1:-1:1
ni(k,i)=alphai(k,i).*ni(k,i+1) + betai(k,i);
end
end