matlab - 如何在下一次计算中使用之前的数据?
问题描述
在这段代码中,我使用Thomas 算法来计算V(k,i)
和ni(k,i)
。
Thomas 算法基于两个步骤:
- 第一个是前向消除(参见第一个循环(
for i=1:nx
)。 - 第二个是向后消除(参见第二个循环(for
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
解决方案
推荐阅读
- javascript - JavaScript 中的闭包值存储在哪里?
- authentication - nginx-rtmp-module,身份验证,如何?
- iis - IIS URL 重写 - URL 在重写过程中被部分解码
- python - 使用 Pandas Dataframe 对可变时间段的天气数据进行重采样
- crystal-reports - 如何在水晶报表中显示每年动态列的结果
- node.js - MongoDB - 做一个内部联接
- php - 如何使用 PHP 对特定值进行排序并从现有的数组对象中创建新的数组对象?
- bash - shell case 模式 [...] 不允许的字符
- javascript - 在特定时间更改 HTML 元素
- reactjs - 是否可以不使用 nextjs 中的 next-redux-wrapper for Redux?Context+useReducer 是否足以用于 NextJS 应用程序中的状态管理器?