Задача в решении двумерного уравнения теплопроводности с использованием FDM в Matlab - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь решить двумерное уравнение теплопроводности, зависящее от времени, используя метод конечных разностей в 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, чтобы сделать умножение действительным. Надеюсь, что кто-нибудь может помочь.

Спасибо.

1 Ответ

0 голосов
/ 28 января 2020

Спасибо, что посмотрели на мою проблему, но я обнаружил ошибку в коде. Поскольку A является одномерной матрицей, то ее размер должен быть либо (Nx,Nx), либо (Ny,Ny), а затем при получении тензорного произведения для получения B для 2D-матрицы ее размер будет (N,N). Однако в коде A имеет размер (N,N) и в результате B взрывается, что делает умножение впоследствии невозможным.

Спасибо.

...