Interpolating n-dimensional functions

조회 수: 3 (최근 30일)
J Callahan
J Callahan 2020년 7월 4일
댓글: J Callahan 2020년 7월 12일
I have a function which takes six variables and gives a single numerical value, newfn(a,b,c,d,e,f,), although most will only take a small range of values, and want to create a grid where I vary these variables and then be able to interpolate values between the grid. As I understand it I need to make the grid for reference data first, for the sake of quick computation say it is something like:
[alist,blist,clist,dlist,elist,flist]=ndgrid([1:2:10],[0.1:0.1:0.5],[0,2],[1.1,1.2,1.3],[10,20,30],3);
then find the reference values:
refdata=newfn(alist,blist,clist,dlist,elist,flist)
then suppose our grid of values to interpolate to is given by
[nag,nbg,ncg,ndg,neg,nfg]=ndgrid([1:10],[0.1:0.1:0.5],[0:2],[1.1,1.2,1.3],[10,15,20,25,30],3);
Then I thought I'd be able to use griddatan like this:
intrpldata=griddatan([ag,bg,cg,dg,eg,fg],refdata,[nag,nbg,ncg,ndg,neg,nfg])
but this isn't working, so I'm going badly wrong somewhere?

채택된 답변

John D'Errico
John D'Errico 2020년 7월 4일
First, IF you have a complete gridded lattice, then you don't want to use griddatan. That is DEFINITELY a BAD idea. Why? Because griddatan will try to tessellate that domain. It thinks you have a scattered set of data, and has no idea how things are related. The result would be very slow at best, and for no good reason. Actually, tit would be a good reason - you want to use the wrong tool in griddatan.
The actual failure of griddatan there is because you are calling it incorrectly. But since this is the wrong tool to use in the first place, just use the correct tool.
Instead, you need to use a tool like griddedInterpolant, or interpn. Either will work, although if you wish to use interpn, then you need to create the grid using meshgrid, not ndgrid. Since you have used ndgrid there, then use griddedInterpolant.
  댓글 수: 3
John D'Errico
John D'Errico 2020년 7월 12일
No. meshgrid works in as many dimensions as you want. It has the somewhat odd behavior that it interchanges the first and second dimensions still, as consistent with how meshgrid works in 2-d. You really don't need to worry about that though.
But interpn presumes the use of meshgrid generated arrays, even in a higher number of dimensions.
griddedInterpolant requires the ndgrid variation. Just use the one needed for the tool you will be using, and all will be good.
J Callahan
J Callahan 2020년 7월 12일
Thanks very much!

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

추가 답변 (0개)

카테고리

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

Community Treasure Hunt

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

Start Hunting!

Translated by