Path: news.mathworks.com!not-for-mail
From: "John D'Errico" <woodchips@rochester.rr.com>
Newsgroups: comp.soft-sys.matlab
Subject: Re: Interpolation of matrix
Date: Fri, 9 Nov 2007 11:28:08 +0000 (UTC)
Organization: John D'Errico (1-3LEW5R)
Lines: 88
Message-ID: <fh1g88$hi8$1@fred.mathworks.com>
References: <24FYi.13280$%j2.9607@newsfe2-win.ntli.net> <mRKYi.49$R_4.102@newsb.telia.net> <mTWYi.10525$ib1.5678@newsfe3-win.ntli.net>
Reply-To: "John D'Errico" <woodchips@rochester.rr.com>
NNTP-Posting-Host: webapp-02-blr.mathworks.com
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: 8bit
X-Trace: fred.mathworks.com 1194607688 17992 172.30.248.37 (9 Nov 2007 11:28:08 GMT)
X-Complaints-To: news@mathworks.com
NNTP-Posting-Date: Fri, 9 Nov 2007 11:28:08 +0000 (UTC)
X-Newsreader: MATLAB Central Newsreader 869215
Xref: news.mathworks.com comp.soft-sys.matlab:436749



Ben <bw.games_n0spam@gmail.nospam.com> wrote in message <mTWYi.
10525$ib1.5678@newsfe3-win.ntli.net>...
> PB wrote:
> > Den Thu, 08 Nov 2007 14:30:22 +0000 skrev Ben:
> > 
> >> Hi there,
> >>
> >> I'm trying to perform some operations on a matrix - I have a 20x20
> >> matrix that I've got to remove some rows from the top, and re-
generate
> >> lines at the bottom to leave the matrix the same size as it was.
> >>
> >> So, say I have a 10x10 matrix, I remove the top row. What I now want 
to
> >> do is generate a row between the row at the bottom, and the one above
> >> it, that I can put in to keep it 10x10.
> >>
> >> I've looked at interp2, and it sort of seems to do what I want, e.g
> >> running interp2(Matrix) gives me a 19x19 matrix with an interpolated 
row
> >> between each. Is there any way to point interp2 at a matrix, with row
> >> vector 9, and get it to return a 1x10 matrix containing the interpolated
> >> row between row vectors 9 and 10, that I can just add to the first
> >> matrix?
> >>
> >> I believe interp2 can sort-of do this, using Xi and Yi, but that appears
> >> to be more related to generating an interpolated value from two data
> >> points, not two rows?
> >>
> >> Anyone have any advice?
> >>
> >> Thanks,
> >>
> >> Ben
> > 
> > Does this help?
> > 
> > a=magic(3);
> > a(:,3)=[]   % remove last row
> > ix=1:0.5:2;
> > [xi,yi]=meshgrid(ix)
> > y=interp2(a,xi,yi)
> > 
> > 
> > /PB
> 
> Thanks, but your a= line actually removes the last column and not the 
> last row...
> 
> I changed it to remove the last column, but the final result bears no 
> resemblance to the original square I'm not sure how the meshgrid of ix 
> interacts with the interpolation, which is what I think is causing the 
> wrong results as I changed it from column to row...?
> 

When you remove information by deleting a row
from a magic square, an interpolant will not know
that the square was a magic one. Also, PB made
a mistake in his example.

a=magic(3);
a(3,:)=[]; % remove last row
ix=1:0.5:2;
iy = 1:3;
[xi,yi]=meshgrid(ix,iy);
y=interp2(a,yi,xi)';


a =
     8     1     6
     3     5     7

y =
            8            1            6
          5.5            3          6.5
            3            5            7

Note the transpose at the end!

HOWEVER. dropping the last row of an array,
then inserting a new one internally to make
up for it by interpolation will not generally
make sense to me. But its your data.

HTH,
John