如何在下一个计算中使用上一个数据?

时间:2019-06-01 02:27:40

标签: matlab loops for-loop

在这段代码中,我使用了 Thomas算法 来计算V(k,i)ni(k,i)

Thomas算法基于两个步骤:

  • 第一个是正向淘汰(请参阅第一个循环(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

0 个答案:

没有答案