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; %number 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')