I was recently writing code to solve the 1D advection equation in Matlab by Finite Differences when I was given a frustrating error in my for loop. It was pertaining to the expression: u_mat(idx,tdx+1)=u_mat(idx,tdx)-vdt^2(u_mat(idx+dx,tdx)-2*u_mat(idx,tdx)+u_mat(idx-dx,tdx)). The error was that the index exceeded the matrix dimensions, how can I fix this? Below you’ll find my full code. Thanks in advance.
L = 10; %pipe length
N = 10; %no. of nodes
v = 2; %velocity
x_vec = linspace(0,L,N)
dx = x_vec(2)-x_vec(1);
dt = 0.1;
t_vec = 0:dt:10;
u_mat = zeros(length(x_vec),length(t_vec));
u_mat(1,:) = 200; %dirichlet condition for left end
u_mat(end,:) =100; %dirichlet condition for right end
for tdx = 1:length(t_vec)-1 %integrator integrates to tdx+1
for idx = 2:length(x_vec)-1
u_mat(idx,tdx+1) = u_mat(idx,tdx) - v*dt^2*(u_mat(idx+dx,tdx)-2*u_mat(idx,tdx)+u_mat(idx-dx,tdx));
end
end
[tt,xx] = meshgrid(t_vec,x_vec);
mesh(xx,tt,u_mat)
xlabel('Position')
ylabel('Time')
zlabel('Temperature')