MATLAB 中的 3D 拉普拉斯松弛
3D Laplace Relaxation in MATLAB
我能够编写一个 MATLAB 程序,绘制两个金属板之间的一维拉普拉斯弛豫,以使用雅可比法找到平衡电位。
老实说,我不确定我是否理解我所做的,但这是代码的相关部分:
N=100;
V = zeros(N,N);
V(1,:)=-1;
V(N,:)=1;
for n=1:400
for i=2:99
for j=2:99
V(i,j)=(V(i-1,j)+V(i+1,j)+V(i,j+1)+V(i,j-1))*0.25;
end
end
end
这是它的样子:
我想知道是否可以使用相同的方法在 3D 中做类似的事情。我想在 3D 中可视化类似的东西,一个 3D 潜力...框。
我尝试使用在 "Computational Physics. N. J. Giordano & H. Nakanishi, Eq.(5.8)" 中找到的类似方程式:
V(i,j,k) = [V(i+1,j,k) + V(i-1,j,k) + V(i,j+1,k) + V(i,j-1,k) + V(i,j,k+1) + V(i,j,k-1)] * (1/6);
这里是我一直在努力工作的新代码:
N=10; % Used smaller number to reduce processing time.
V = zeros(N,N,N);
V(:,:,1)=-1; %i am using planes instead of axis as "Insulators"
V(:,:,N)=1;
for n=1:100
for i=2:99
for j=2:99
for k=2:99
V(i,j,k)=(V(i+1,j,k)+V(i-1,j,k)+V(i,j+1,k)+V(i,j-1,k)+V(i,j,k+1)+V(i,j,k-1))*(1/6);
end
end
end
end
我在 V(i,j,k)
所在的行中得到一个 Index exceeds matrix dimensions.
。
所以,我再次尝试获取上面链接的 2D 图形的 3D 版本。 *另外,如果有人能解释一下(不是 MATLAB 部分,而是数学部分)我在这里用那个方程式到底做了什么,它可以用来做什么,我将不胜感激?
非常感谢您的帮助。
编辑:我忘了问:你如何绘制这个 3D 数组?
您已定义 N
但在此过程中未使用它。由于您有 i-1
和 j-1
等值,因此您需要从 2
开始。对于 i+1
和 j+1
等值,您需要以 N-1
结尾。因此,工作代码将如下所示:
N=10; % Used smaller number to reduce processing time.
V = zeros(N,N,N);
V(:,:,1)=-1; %i am using planes instead of axis as "Insulators"
V(:,:,N)=1;
for n=1:1
for i=2:N-1
for j=2:N-1
for k=2:N-1
V(i,j,k)=(V(i+1,j,k)+V(i-1,j,k)+V(i,j+1,k)+V(i,j-1,k)+V(i,j,k+1)+V(i,j,k-1))*(1/6);
end
end
end
end
此外,第一个 for-loop
在您提供的这段代码中似乎什么也没做。
我能够编写一个 MATLAB 程序,绘制两个金属板之间的一维拉普拉斯弛豫,以使用雅可比法找到平衡电位。
老实说,我不确定我是否理解我所做的,但这是代码的相关部分:
N=100;
V = zeros(N,N);
V(1,:)=-1;
V(N,:)=1;
for n=1:400
for i=2:99
for j=2:99
V(i,j)=(V(i-1,j)+V(i+1,j)+V(i,j+1)+V(i,j-1))*0.25;
end
end
end
这是它的样子:
我想知道是否可以使用相同的方法在 3D 中做类似的事情。我想在 3D 中可视化类似的东西,一个 3D 潜力...框。
我尝试使用在 "Computational Physics. N. J. Giordano & H. Nakanishi, Eq.(5.8)" 中找到的类似方程式:
V(i,j,k) = [V(i+1,j,k) + V(i-1,j,k) + V(i,j+1,k) + V(i,j-1,k) + V(i,j,k+1) + V(i,j,k-1)] * (1/6);
这里是我一直在努力工作的新代码:
N=10; % Used smaller number to reduce processing time.
V = zeros(N,N,N);
V(:,:,1)=-1; %i am using planes instead of axis as "Insulators"
V(:,:,N)=1;
for n=1:100
for i=2:99
for j=2:99
for k=2:99
V(i,j,k)=(V(i+1,j,k)+V(i-1,j,k)+V(i,j+1,k)+V(i,j-1,k)+V(i,j,k+1)+V(i,j,k-1))*(1/6);
end
end
end
end
我在 V(i,j,k)
所在的行中得到一个 Index exceeds matrix dimensions.
。
所以,我再次尝试获取上面链接的 2D 图形的 3D 版本。 *另外,如果有人能解释一下(不是 MATLAB 部分,而是数学部分)我在这里用那个方程式到底做了什么,它可以用来做什么,我将不胜感激?
非常感谢您的帮助。
编辑:我忘了问:你如何绘制这个 3D 数组?
您已定义 N
但在此过程中未使用它。由于您有 i-1
和 j-1
等值,因此您需要从 2
开始。对于 i+1
和 j+1
等值,您需要以 N-1
结尾。因此,工作代码将如下所示:
N=10; % Used smaller number to reduce processing time.
V = zeros(N,N,N);
V(:,:,1)=-1; %i am using planes instead of axis as "Insulators"
V(:,:,N)=1;
for n=1:1
for i=2:N-1
for j=2:N-1
for k=2:N-1
V(i,j,k)=(V(i+1,j,k)+V(i-1,j,k)+V(i,j+1,k)+V(i,j-1,k)+V(i,j,k+1)+V(i,j,k-1))*(1/6);
end
end
end
end
此外,第一个 for-loop
在您提供的这段代码中似乎什么也没做。