Solve 2D PDE problem by Finite Difference Method

11 views (last 30 days)
I need to solve a 2D PDE problem:
a* dT/dt + b* dT/dx = c * d2T/dz2
To generate the temperature at each position at different time by finite difference method (I know the equations of solving dT/dt, dT/dx, dT/dz, and d2T/dz2)
But I don't know how to program and plot this..
Thank you~

Answers (1)

SAI SRUJAN
SAI SRUJAN on 13 Aug 2024
Hi Howard,
I understand that you are facing an issue in solving the 2D PDE problem by finite difference method.
Refer to the following code sample to proceed further,
% Parameters Update parameters as required
a = 1;
b = 1;
c = 1;
dx = 0.1; % Spatial step in x
dz = 0.1; % Spatial step in z
dt = 0.01; % Time step
x = 0:dx:1;
z = 0:dz:1;
t = 0:dt:1;
Nx = length(x);
Nz = length(z);
Nt = length(t);
% Initial condition
T = zeros(Nx, Nz);
T(:, :) = 100; % Example initial temperature
% Boundary conditions - Update boundary conditions as required
T(:, 1) = 0; % Boundary at z=0
T(:, end) = 0; % Boundary at z=end
% Finite Difference Coefficients
alpha = c * dt / dz^2;
beta = b * dt / dx;
for n = 1:Nt-1
T_new = T;
for i = 2:Nx-1
for j = 2:Nz-1
% Update temperature using finite difference method
T_new(i, j) = T(i, j) + ...
alpha * (T(i, j+1) - 2*T(i, j) + T(i, j-1)) - ...
beta * (T(i+1, j) - T(i, j));
end
end
T = T_new;
% Plotting the temperature distribution
surf(x, z, T');
title(['Temperature distribution at time t = ', num2str(t(n))]);
xlabel('x');
ylabel('z');
zlabel('Temperature');
drawnow;
end
I hope this helps!

Community Treasure Hunt

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

Start Hunting!