Hi, in my code, in the third loop, somehow the variable:
z_i_meshgrid
always have half of it fill with NaNs, can anyone explain this plz? why doesnt this happen in the first few loops.
Many thanks,
x_0=1;y_0=6;gamma=0.2;tau=0.0002;x_grid=-9:0.2:9;y_grid=-8:0.2:8;[X, Y] = meshgrid(x_grid,y_grid);z_meshgrid=cos(X/2).*cos(Y) + Y/10 - X/5;%%
interpolation_accuracy=5;[x_meshgrid,y_meshgrid]=meshgrid(x_grid,y_grid);x_i_location=find(x_grid==x_0);y_i_location=find(y_grid==y_0);z_0=z_meshgrid(y_i_location,x_i_location);clear x_grid y_grid;[gradient_x_grid,gradient_y_grid] = gradient(z_meshgrid);gradient_zx_0 = gradient_x_grid(y_i_location,x_i_location)gradient_zy_0 = gradient_y_grid(y_i_location,x_i_location)cnt=1;A=[x_0,y_0,z_0];threshold = tau+1;while threshold > tau % calculation of (x_i,y_i)
x_i = x_0 - gamma*gradient_zx_0; y_i = y_0 - gamma*gradient_zy_0; % Interpolation around the point of (x_i,y_i)
x_i_grid=linspace(x_0,(2*x_i-x_0),interpolation_accuracy); y_i_grid=linspace(y_0,(2*y_i-y_0),interpolation_accuracy); [x_i_meshgrid, y_i_meshgrid] = meshgrid(x_i_grid,y_i_grid); z_i_meshgrid = interp2(x_meshgrid,y_meshgrid,z_meshgrid,... x_i_meshgrid,y_i_meshgrid,'cubic'); if cnt==1 x_i_location = sum(size(x_i_grid)/2); y_i_location = sum(size(y_i_grid)/2); end z_i=z_i_meshgrid( y_i_location , x_i_location ); %output
cnt=cnt+1 A(cnt,:)=[x_i,y_i,z_i]; %new gradient
gradient_x_grid = interp2(x_meshgrid,y_meshgrid,gradient_x_grid, ... x_i_meshgrid,y_i_meshgrid); gradient_x_i=gradient_x_grid( y_i_location , x_i_location ) gradient_y_grid = interp2(x_meshgrid,y_meshgrid,gradient_y_grid, ... x_i_meshgrid,y_i_meshgrid); gradient_y_i=gradient_y_grid( y_i_location , x_i_location ) threshold = sqrt( (x_i-x_0)^2+(y_i-y_0)^2 ); if cnt== 3 break end x_0=x_i; y_0=y_i; x_meshgrid=x_i_meshgrid; y_meshgrid=y_i_meshgrid; z_meshgrid=z_i_meshgrid; endA
Best Answer