Error message when trying to plot 3D surface plot with colour bar

3 views (last 30 days)
We are trying to create a surface plot to analyse the concentration of a advection diffusive equation. I'm experiencing two problems one is for my solver and the second is that my surf plot is coming up with an error. I think we've corrected the solver error but as we can't see the plot can't be sure if it's working. I've included the code that defines the mesh grid and matrix that is supposed to create the surface plot, the error message and all the values from the workspace in a picture. I'm n
%mesh grid/ line 18
x = 0:dx:Lx; %x nodes/ line 19
y = 0:dy:Ly; %y nodes/ line 20
t = 0:dt:T; %time intervals/ line 21
[X,Y] = meshgrid(x,y); % Create a meshgrid for X and Y/ line 23
% Initialize conditions and variables/line 25
Nx = length(x); %x nodes/line 26
Ny = length(y); %y nodes/line 27
Nt = length(t); %length of time intervals/ line 28
Cc = zeros(Nx, Ny, Nt); %line 29
Cc(:,:,1)=0; %line 30
for ik=1:length(C) %creating 3D matrix/ line 159
ix=floor(ik/Ny)+1;
iy=ik-(ix-1)*Ny;
if iy==0
iy=Ny;
ix=ix-1;
end
Cc(ix,iy,m+1)=C(ik);
end % line 167
Ccp = permute(Cc, [2, 1, 3]); % line 169
figure % Create a new figure
surf(X,Y,Ccp) % Create a surface plot (this is line 172)
% Enhance the plot with labels and colorbar
title('Concentration at Final Time Step');
xlabel('X');
ylabel('Y');
zlabel('Concentration');
colorbar; % Adds a colorbar to indicate the scale of concentration
view(2); %view from top
Error message:
Error using surf
Data dimensions must agree.
Error in Computing2024 (line 172)
surf(X,Y,Ccp) % Create a surface plot

Accepted Answer

Voss
Voss on 18 Apr 2024
"'Concentration at Final Time Step'" would seem to indicate that you want to plot a surface from the last page of the 3D array Ccp, so:
surf(X,Y,Ccp(:,:,end))
  8 Comments
Dominique Eseinune
Dominique Eseinune on 19 Apr 2024
When I look through the code it only produces non-zero values at T=100 why are any values for the iterations between 0-100. Part of my next step is to show the concentration at T=1, 5, 10 ... 100 but im only producing T= 100. Are the values not being stored in the iterations before the last?
Voss
Voss on 19 Apr 2024
In your for loops where A and B are calculated, B depends on m (the time loop index) but A does not. So you're calculating the same A for each m. Actually, you're calculating the same B for each m too, because, although B is calculated from Cc(i,j,m), Cc is all zeros, so you're getting the same B for each m. If that's what's supposed to be happening, then you might as well just calculate A and B once instead of Nt times and do away with the for m = 1:Nt.
Then, after A and B are calculated, C is calculated from A and B in the while loop.
Then, Cc is calculated, but only the m+1th page of Cc (i.e., the Nt+1th page, because m has value Nt after the for m loop):
Cc(ix,iy,m+1)=C(ik)
% ^^^ no other page of Cc besides m+1 is updated
This makes size(Cc,3) equal to Nt+1, and the transpose of that last page of Cc is what's shown in the surface plot. No other page of Cc has anything but zeros because rest of Cc was initialized to zeros and remains zeros.

Sign in to comment.

More Answers (0)

Products


Release

R2023a

Community Treasure Hunt

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

Start Hunting!