surf() to bar3() "Matrix dimensions must agree, not rendering mesh"

1 vue (au cours des 30 derniers jours)
Huy
Huy le 7 Mai 2014
Modifié(e) : mcan06 le 18 Oct 2021
This is my attempt to simulate the water surface. It works fine when I use the surf() function. But when I change it to bar3(), this error occurs: "Matrix dimensions must agree, not rendering mesh". Can some one please tell me how to fix this? Thank you. Here's my code:
n=60;
i = 2:n-1;
j = 2:n-1;
H = ones(n,n);
Dropx=30; %x and y coordinate of the droplet
Dropy=30;
width=20;
r=width/2;
dt=0.1;
dx=0.3;
%%%add droplet to the surface %%%
[x,y] = ndgrid(-1.5:(2/(width/1.5-1)):1);
D = 8*exp(-5*(x.^2+y.^2));
w = size(D,1);
i2 = (Dropx-r):w+(Dropx-r)-1;
j2 = (Dropy-r):w+(Dropy-r)-1;
H(i2,j2) = H(i2,j2) + D;
oldH=H;
newH=H;
h=surf(newH); % cannot change this to bar3
axis([1 n 1 n -2 8]);
k=0.2; %damping constant
c=2; %wave speed
while 1==1
newH(i,j)=H(i,j)+(1-k*dt)*(H(i,j)-oldH(i,j))-...
dt^2*c^2/dx^2*((4*H(i,j)-H(i+1,j)-H(i-1,j)-H(i,j+1)-H(i,j-1))...
+0.4*(4*H(i,j)-H(i+1,j+1)-H(i+1,j-1)-H(i-1,j+1)-H(i-1,j-1)));
set(h,'Zdata', newH(i,j));
oldH=H;
H=newH;
pause(0.05);
end
  1 commentaire
mcan06
mcan06 le 18 Oct 2021
Modifié(e) : mcan06 le 18 Oct 2021
Could you share with me if you had any reference which you derived the newH part of this code?

Connectez-vous pour commenter.

Réponse acceptée

Star Strider
Star Strider le 7 Mai 2014
That has to be the coolest simulation I’ve seen posted on MATLAB Answers!
I figured out how to make bar3 work.
1. Comment-out (or delete) this line ( 5 lines above the while loop ) and the axis line just below it:
% h=surf(newH); % cannot change this to bar3
2. Comment out (or delete) this line in the while loop:
% set(h,'Zdata', newH(i,j));
3. Insert these lines just below the commented-out ‘set(h, 'ZData' ...’ line:
h = bar3(newH);
% h=surf(newH);
axis([1 n 1 n -2 8]);
Then choose either bar3 or surf to see the result.
  2 commentaires
Huy
Huy le 8 Mai 2014
Thank you for your answer. So basically we have to replott the data at every timestep. This will be slow but it solves the problem. Thank you.
Star Strider
Star Strider le 8 Mai 2014
My pleasure!
You only have to replot it if you use bar3. Your original code works fine with surf. I didn’t time it, but I didn’t notice a difference between the original and the code revised to use bar3. (Actually, I was so awed just watching it that I didn’t notice any difference in performance.)

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Scripts dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by