Info

此问题已关闭。 请重新打开它进行编辑或回答。

searching for a better approach for solving a 3-D matrix

1 次查看(过去 30 天)
Hey guys,
I need to solve the following equation.
u(i,j,k+1)=(2*dt/3).*(u(i,j,k).*(u(i+1,j,k)-u(i-1,j,k))./(2*dr)+u(i,j,k-1).*(u(i,j+1,k-1)-u(i,j-1,k-1))./(2*dz));
where dt and dr are some known constants.
The approach I can think of is given below:
for i=2:n, for j=2:n, for k=2:n
u(i,j,k+1)=(2*dt/3).*(u(i,j,k).*(u(i+1,j,k)-u(i-1,j,k))./(2*dr)+u(i,j,k-1).*(u(i,j+1,k-1)-u(i,j-1,k-1))./(2*dz));
end, end, end
Is there any better approach to solve the same equation?
Please help me with this problem and suggest me a better approach, for my approach is not good enough for very long equations including 3 subscripted independent variables i, j, k where each denote r, z and time(t) components respectively, working in cylindrical coordinate system.
Thank you.
Udit Srivastava.

回答(1 个)

KSSV
KSSV 2016-10-13
How about?
i = 2:n ;
j = 2:n ;
for k=1:n
u(i,j,k+1)=(2*dt/3).*(u(i,j,k).*(u(i+1,j,k)-u(i-1,j,k))./(2*dr)+u(i,j,k-1).*(u(i,j+1,k-1)-u(i,j-1,k-1))./(2*dz));
end
  2 个评论
Udit Srivastava
Udit Srivastava 2016-10-13
编辑:Udit Srivastava 2016-10-13
Sir, I actually want to remove the 'k' term from my equation and adjust it somewhere else so that the equation works like a 2-D matrix, making it look less cumbersome, like putting an outer loop on 'k' or something like that. Is it anyway possible?
KSSV
KSSV 2016-10-13
It is possible...you have to save only two steps of k i.e u(i,j,1) and u(i,j,2). Every time you have to save the result into a file.

此问题已关闭。

Community Treasure Hunt

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

Start Hunting!

Translated by