Why always NaNs in my script?

조회 수: 1 (최근 30일)
Qiang Liu
Qiang Liu 2019년 1월 16일
댓글: Qiang Liu 2019년 1월 16일
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;
end
A

채택된 답변

Matt J
Matt J 2019년 1월 16일
편집: Matt J 2019년 1월 16일
Because you are interpolating at locations outside the boundaries defined by x_grid,y_grid. The locations where you interpolate, defined by x_i_grid, y_i_grid, vary from iteration to iteration and will not necessarily lie inside x_grid,y_grid for any apparent reason.
  댓글 수: 1
Qiang Liu
Qiang Liu 2019년 1월 16일
Many thanks, that was indeed the problem is, thanks a lot for a quick answer, that was rly rly rly helpful

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

제품


릴리스

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by