Info

This question is closed. Reopen it to edit or answer.

Getting error: Error using .* Matrix dimensions must agree. Please help. The code the given below.

2 views (last 30 days)
Nx = 100;Ny = 20;Nt = 4000;
x = 0:10/Nx:10; y = -1:2/Ny:1; t = 0:100/Nt:100;
Dx = 10/Nx;Dy = 2/Ny;Dt = 10/Nt;
a = 0.001; Xd = a*Dt/(Dx^2); Yd = a*Dt/(Dy^2); c = Dt/(2*Dx);
T = zeros(Ny+1,Nx+1,Nt+1);
T(1,1:end,:) = 0;
for m = 1:Ny+1
T(m,1,:) = (1 - (y(m).*y(m))).^2;
end
maxiter = 500;
for k = 1:maxiter
Tlast = T; % saving the last guess
T(:,:,1) = Tlast(:,:,end); % initialize the scalar field at t = 0 to the last guess
for i = 2:Nt+1
T(2:end-1,2:end-1,i) = (1-(2*Xd)-(2*Yd))*T(2:end-1,2:end-1,i-1) + Xd*(T(2:end-1,3:end,i-1) + T(2:end-1,1:end-2,i-1)) - (c*1.5*(1 - (y(2:end).^2)).*(T(2:end-1,3:end,i-1) - T(2:end-1,1:end-2,i-1)) + Yd*T(3:end,2:end-1,i-1) + Yd*T(1:end-2,2:end-1,i-1);
T(end,1:end,i) = (4*T(end-1,1:end,i) - T(end-2,1:end,i))/3; % Top Wall (dT/dy = 0)
T(1:end,end,i) = (4*T(1:end,end-1,i) - T(1:end,end-2,i))/3; % Outlet (dT/dx = 0)
end
err(k) = max(abs(T(:)-Tlast(:))); % finding the residual value between two successive iterations
if err(k) < 1E-04
break; % stopping the solution is the residual value is small
end
end
The problem, I guess, lies in the formula for T(2:end-1,2:end-1,i).
  6 Comments
Shashank
Shashank on 3 Dec 2012
I tried creating a matrix like this but it did not work either.
U(2:end-1,2:end-1,:) = 1 - ((y(2:end-1)).^2);
That's the error I am getting: Assignment has fewer non-singleton rhs dimensions than non-singleton subscripts
Any thoughts how it can be resolved?
Shashank
Shashank on 3 Dec 2012
Thanks a lot peeps, for your valuable comments. I was able to solve it by defining a matrix as:
U = zeros(Ny+1,Nx+1);
for m = 1:Ny+1
U(m,:,:) = 1 - ((y(m)).^2);
end

Answers (0)

Community Treasure Hunt

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

Start Hunting!