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

4 次查看(过去 30 天)
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 个评论
mcan06
mcan06 2021-10-18
编辑:mcan06 2021-10-18
Could you share with me if you had any reference which you derived the newH part of this code?

请先登录,再进行评论。

采纳的回答

Star Strider
Star Strider 2014-5-7
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 个评论
Huy
Huy 2014-5-8
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 2014-5-8
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.)

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Scripts 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by