【问题标题】:Problem in 2D heat equation solution using FDM in Matlab在 Matlab 中使用 FDM 求解二维热方程的问题
【发布时间】:2020-01-27 22:14:51
【问题描述】:

我正在尝试在 Matlab 中使用有限差分法求解二维时间相关热方程。代码如下:

%Spatial variable on x direction
Lx=1;
delta=0.1;
xmin=-Lx/2;
xmax=Lx/2;
Nx=(xmax-xmin)/delta;
x=linspace(xmin,xmax,Nx);

%Spatial variable on y direction
Ly=1;
delta=0.1;
ymin=-Ly/2;
ymax=Ly/2;
Ny=(ymax-ymin)/delta;
y=linspace(ymin,ymax,Ny);

%Total matrix size
N = (Nx * Ny);

%Time variable
dt=0.002;
tmin=0;
tmax=1;
nt=(tmax-tmin)/dt;
tspan=linspace(tmin,tmax,nt);

%Create a meshgrid
[X,Y] = meshgrid(x,y);

% Defining initial state:
T0=exp(-(X.^2+Y.^2)); 

%reshape the initial condition to a vector
T_reshape = reshape(T0,N,1);

% Constructing the 1D spatial matrix
A=zeros(N,N);
I = eye(N);
%the diagonal elements
for m=1:N %the number of rows
for n=1:N  %the number of columns
if (m==n)
A(m,n)=-2/delta^2; 
end
%Boundary conditions: A(1,N)==A(N,1)
if(n==N)&&(m==1)
A(m,n)=1;
end
if(n==1)&&(m==N)
A(m,n)=1;
end
end
end
%the off-diagonal elements
for n=1:N-1 
A(n+1,n)=1/delta^2; %the value of each lower off-diagonal elements
end 
for n=2:N
A(n-1,n)=1/delta^2; %the value of each upper off-diagonal element
end

%create the 2D matrix
B = kron(A,I)+kron(I,A);

% Solve the equation
[Time,Tem]=ode45('dTDistribution',tspan,T_reshape,[],B,delta);

这里调用的函数如下:

%Define the function
function dT=dTDistribution(tspan,T_reshape,dummy,B,delta)
dT = B.*T_reshape; 
end

我的问题是我的矩阵B 的维度与初始条件T_reshape 的维度不同,因此,B.*T_reshape 的乘法将是不可能的。我想知道如何更改 T_reshape 的维度以使乘法有效。希望任何人都可以提供帮助。

谢谢。

【问题讨论】:

  • size(B) = 10000 10000size(T_reshape) = 100 1。当然,它们不会繁殖。您应该知道自己要达到的目标。
  • 我正在尝试实现这种乘法,以便求解热方程。但是,这种维度的变化阻止了这一点,我想知道如何解决这个问题。

标签: matlab pde


【解决方案1】:

感谢您查看我的问题,但我已经找出了代码中的错误。由于A 是一维矩阵,那么它的大小应该是(Nx,Nx)(Ny,Ny),然后当取张量积得到B 时,二维矩阵的大小将是(N,N)。但是在代码中,A 的大小为 (N,N),因此 B 正在爆炸,使得之后的乘法变得不可能。

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多