How to make input size the same as output in interp2

1 Ansicht (letzte 30 Tage)
hanciong
hanciong am 25 Jan. 2013
Hello all, I have a problem. I have the following scipt to make 2D interpolation of some function fu(x,y) = x^2y-y^2x. There is no problem if both x and y are scalars. However, if I call fuint with x scalar and y row vector for example, the output is column vector. also, if I call fuint with x column vector and y scalar, the output is row vector. see the two lines in which I write comment %-->problem here. The problem is that, quadgk can't integrate @(y) fuint(3,y), because input size is not the same as output. how should I modify this such that the size of the output is the same as input, if either x or y is scalar? Thanx ==========================================
clear all
xcoba = linspace(-5,5,50); ycoba = linspace(-5,5,50);
fu = @(x,y) x.^2.*y - y.^2.*x;
[xgrid,ygrid] = ndgrid(xcoba,ycoba);
fugrid = fu(xgrid,ygrid);
fuint = @(x,y) interp2(xgrid',ygrid',fugrid',x,y,'cubic',NaN);
fuint(1,[2,3,4]) %--> problem here
fuint([2;3;4],1) %--> problem here
quadgk(@(y) fuint(3,y), -3,3)
=======================================

Antworten (2)

John Petersen
John Petersen am 25 Jan. 2013
you can make the scalar into an array with
X = x*ones(1,length(y));

Jan
Jan am 25 Jan. 2013
Bearbeitet: Jan am 28 Jan. 2013
Alternatively:
x = repmat(x, 1, length(y));
or
x = x(ones(1, length(y));

Kategorien

Mehr zu Numeric Types 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