MATLAB: How to vectorize a nested for loop with different sized steps

vectorization

Down below is an iterative formula. I have previously defined dx and dy as the resolution.
for iy=2:ny-1
for ix=2:nx-1
T_new(iy,ix)=(((dy^2)*(T_old(iy,ix+1)+T_old(iy,ix-1)))+((dx^2)*(T_old(iy+1,ix)+T_old(iy-1,ix))))/(2*((dx^2)+(dy^2)));
end
end
I wrote this code to replace my loops but I believe it doesnt't work as dx is not equal to dy i.e. my iteration sizes are different. Any suggestions?
ix=2:nx-1;
iy=2:ny-1;
T_new(iy,ix)=(((dy^2)*(T_old(iy,ix+1)+T_old(iy,ix-1)))+((dx^2)*(T_old(iy+1,ix)+T_old(iy-1,ix))))/(2*((dx^2)+(dy^2)));

Best Answer

What makes you think that it doesn't work?
Edit for clarity: I just copy-pasted your two code snippets, and generated random dimensions and step sizes to try them out.
>> dx = rand() % random step size

dy = rand() % random step size
nx = randi([100 1000], [1 1]) % random 1st dimension size
ny = randi([100 1000], [1 1]) % random 2nd dimension size
T_old = rand([ny nx]); % random starting matrix
% compute T_new the loopy way as T_new1
for iy=2:ny-1
for ix=2:nx-1
T_new1(iy,ix)=(((dy^2)*(T_old(iy,ix+1)+T_old(iy,ix-1)))+((dx^2)*(T_old(iy+1,ix)+T_old(iy-1,ix))))/(2*((dx^2)+(dy^2)));
end
end
T_new2(iy,ix)=(((dy^2)*(T_old(iy,ix+1)+T_old(iy,ix-1)))+((dx^2)*(T_old(iy+1,ix)+T_old(iy-1,ix))))/(2*((dx^2)+(dy^2)));
% compute T_new the MATLAB way
ix=2:nx-1;
iy=2:ny-1;
T_new2(iy,ix)=(((dy^2)*(T_old(iy,ix+1)+T_old(iy,ix-1)))+((dx^2)*(T_old(iy+1,ix)+T_old(iy-1,ix))))/(2*((dx^2)+(dy^2)));
% check agreement - a value of zero indicates they are identical
max(reshape(abs(T_new2 - T_new1), 1, []))
dx =
0.9722
dy =
0.4396
nx =
938
ny =
748
ans =
0
>> % ans = 0 -> identical