Error with the animation of the surface plot

2 Ansichten (letzte 30 Tage)
Yuriy Yerin
Yuriy Yerin am 8 Mai 2024
Kommentiert: Yuriy Yerin am 8 Mai 2024
Hello
I want to perform a surface animation, but I constantly run into an error
Error using surf
Data dimensions must agree.
Error in surfc (line 54)
hs = surf(cax, args{:});
Error in dcSQUID_diode_efficiency_animation (line 26)
surfc(phi,theta,eff)
I would be grateful if someone could tell me where exactly I made a mistake in the code
function z1=dcSQUID_diode_efficiency_animation
tic
phi0=linspace(0.000,2*pi,100);
theta0=linspace(0.000,2*pi,100);
flux1=linspace(0,1,10);
h = figure;
axis tight manual
filename = 'dc_squid_eff.gif';
for ii = 1:10
for i=1:100
for j=1:100
y=self11(phi0(i),theta0(j),flux1(ii));
eff(i,j,ii)=y;
end
end
[phi,theta]=meshgrid(phi0,theta0);
surfc(phi,theta,eff)
zlim([-0.5 0.5])
clim([-0.5 0.5])
colormap jet
colorbar('FontSize',34,'FontName','Times New Roman')
set(gca,'FontName','Times New Roman','FontSize',34)
xlabel('\phi','FontName','Times New Roman','fontsize',34,'fontweight','b');
ylabel('\theta','FontName','Times New Roman','fontsize',34,'fontweight','b');
set(gca,'XTick',0:pi/2:2*pi)
set(gca,'XTickLabel',{'0','\pi/2','\pi','3\pi/2','2\pi'})
set(gca,'YTick',0:pi/2:2*pi)
set(gca,'YTickLabel',{'0','\pi/2','\pi','3\pi/2','2\pi'})
drawnow
frame = getframe(h);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if ii == 1
imwrite(imind,cm,filename,'gif', 'Loopcount',inf);
else
imwrite(imind,cm,filename,'gif','WriteMode','append');
end
end
function z2=self11(phi0,theta0,flux1)
rL1=1;
rL2=1;
rR0=1;
rR1=1;
rR2=1;
x = -2*pi:0.001:2*pi;
I_dc = cos(x./2).*atanh(sin(x./2))+rL1*cos((x+2*phi0)./2).*atanh(sin((x+2*phi0)./2))+rL2*cos((x+2*theta0)./2).*atanh(sin((x+2*theta0)./2))+...
rR0*cos((x-2*pi*flux1)./2).*atanh(sin((x-2*pi*flux1)./2))+rR1*cos(((x-2*pi*flux1)+2*phi0)./2).*atanh(sin(((x-2*pi*flux1)+2*phi0)./2))+...
rR2*cos(((x-2*pi*flux1)+2*theta0)./2).*atanh(sin(((x-2*pi*flux1)+2*theta0)./2));
I_min=min(I_dc);
I_max=max(I_dc);
z2=(I_max-abs(I_min))/(I_max+abs(I_min));
end
toc
end

Akzeptierte Antwort

Venkat Siddarth Reddy
Venkat Siddarth Reddy am 8 Mai 2024
Bearbeitet: Venkat Siddarth Reddy am 8 Mai 2024
Hi,
The problem you're encountering originates from the 26th line of your code, specifically:
surfc(phi,theta,eff);
This error arises because the variable "eff" you are passing to the surfc function is three-dimensional, whereas the other parameters, "phi" and "theta," are two-dimensional. The discrepancy in dimensions between the parameters is what triggers the error.
Interestingly, the first plot might have successfully generated because, during the initial iteration, the dimensions of eff were (100,100,1). With only one element in the third dimension, eff default to a 2D array. However, as iterations progress and the size of eff increases, it no longer defaults to a 2D array, hence the error in subsequent iterations.
To resolve this issue, you should explicitly specify which slice of the "eff" matrix you intend to plot by using indexing:
surfc(phi,theta, eff(:,:,ii)) %assuming you want to use iith array in iith iteration
To learn more about the surfc function,refer to the following documentation:
Hope it helps!
  1 Kommentar
Yuriy Yerin
Yuriy Yerin am 8 Mai 2024
A lot of thanks for the prompt reply. Now it works perfect

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Tony
Tony am 8 Mai 2024
eff is three-dimensional, but the argument in surf must be two-dimensional. If you fix eff for a specific flux, that should work
surfc(phi,theta,eff(:,:,1))

Kategorien

Mehr zu Animation finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by