help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: interp2 meshgrid problem


From: Juan Pablo Carbajal
Subject: Re: interp2 meshgrid problem
Date: Sun, 29 Apr 2012 15:10:16 +0200

On Sat, Apr 28, 2012 at 6:51 PM, Grant Stephens <address@hidden> wrote:
> Hi
>
> Running version 3.2.4 on Ubuntu 12.04 and have come across something that
> doesn't make sense to me.
> The following program gives the error that the data is not in meshgrid
> format but all the xx, yy and xxx, yyy data is generated from the meshgrid
> command. I suspect it is becuase it is a non-linear meshgrid? It there a
> workaround or it a limitation?
>
> Thank You
> Grant
>
> % Set up grids and tensor product Laplacian and solve for u:
>   N = 24; [D,x] = cheb(N); y = x;
>   [xx,yy] = meshgrid(x(2:N),y(2:N));
>   xx = xx(:); yy = yy(:);       % stretch 2D grids to 1D vectors
>   f = 10*sin(8*xx.*(yy-1));
>   D2 = D^2; D2 = D2(2:N,2:N); I = eye(N-1);
>   L = kron(I,D2) + kron(D2,I);                       % Laplacian
>   figure(1), clf, spy(L), drawnow
>   tic, u = L\f; toc          % solve problem and watch the clock
>
> % Reshape long 1D results onto 2D grid:
>   uu = zeros(N+1,N+1); uu(2:N,2:N) = reshape(u,N-1,N-1);
>   [xx,yy] = meshgrid(x,y);
>   value = uu(N/4+1,N/4+1);
>
> % Interpolate to finer grid and plot:
>   [xxx,yyy] = meshgrid(-1:.04:1,-1:.04:1);
>   uuu = interp2(xx,yy,uu,xxx,yyy,'cubic');
>   figure(2), mesh(xxx,yyy,uuu), colormap(1e-6*[1 1 1]);
>   xlabel x, ylabel y, zlabel u
>   text(.4,-.3,-.3,sprintf('u(2^{-1/2},2^{-1/2}) = %14.11f',value))
>
>  function [D,x] = cheb(N)
>   if N==0, D=0; x=1; return, end
>   x = cos(pi*(0:N)/N)';
>   c = [2; ones(N-1,1); 2].*(-1).^(0:N)';
>   X = repmat(x,1,N+1);
>   dX = X-X';
>   D  = (c*(1./c)')./(dX+(eye(N+1)));      % off-diagonal entries
>   D  = D - diag(sum(D'));
>
> _______________________________________________
> Help-octave mailing list
> address@hidden
> https://mailman.cae.wisc.edu/listinfo/help-octave
>

Hi,
I tried the code you sent and in Octave 3.6.1 I do not get the same
error but the interpolation fails. However interp2 works perfectly
x=linspace(-1,1,10); [
xx yy] = meshgrid(x,x);
x2=linspace(-1,1,100);
[xx2 yy2] = meshgrid(x,x);

zz = sin(xx*2*pi) + cos(yy*2*pi);
uu = interp2 (xx,yy,zz,xx2,yy2);
mesh(xx2,yy2,uu)

uu = interp2 (xx,yy,zz,xx2,yy2,'cubic');
mesh(xx2,yy2,uu)

uu = interp2 (xx,yy,zz,xx2,yy2,'pchip');
mesh(xx2,yy2,uu)

uu = interp2 (xx,yy,zz,xx2,yy2,'spline');
mesh(xx2,yy2,uu)

I think the problem is with your "uu" data and the cubic method (and
pchip) since this works fine (uu is your vector)

[xx2 yy2]=meshgrid(linspace(-1,1,100));
uu2 = interp2 (xx,yy,uu,xx2,yy2,'spline');
mesh(xx2,yy2,uu2)

It might be a bug in interp2 but I would first double check that uu is OK.

-- 
M. Sc. Juan Pablo Carbajal
-----
PhD Student
University of Zürich
http://ailab.ifi.uzh.ch/carbajal/


reply via email to

[Prev in Thread] Current Thread [Next in Thread]