I will look into that, thanks. I don't *really* care if I have three or two methods (or just include the one I need and have one), but I would much prefer to use a library (Interpolations.jl). I just wasn't able to dig out the non-uniform-method, and, frankly, the abstraction level of that library is scary to a junior technical programmer as myself :)
Best, Patrick On Monday, March 23, 2015 at 12:31:11 PM UTC+1, Tim Holy wrote: > > - Interpolations.jl currently only handles uniform grids, which is why it > gets > a Range input. Grid.jl has an undocumented non-uniform interpolation in > 1d. > > - You'd probably be interested in `searchsorted`. > > - Yes, you can simplify your interface down to 2 methods. Look at more > generic > functions like `similar,` `ind2sub`, etc. > > --Tim > > On Monday, March 23, 2015 02:46:37 AM Patrick Kofod Mogensen wrote: > > As a part of teaching a course in economics, I had to supply Matlab code > > for solving a particular kind of problem. Many times, we have to > evaluate a > > function outside of the grid where we know the value, and we use linear > > interpolation to approximate these values. > > > > I wanted to use Interpolations.jl, but it seems that everything has to > be > > done based on x (grid where we know the function values) being a range. > It > > may seem weird, but I do not know from the beginning what the x's are > going > > to be, as the are calculated and changed throughout the algorithm. > > > > At some point in the algorithm, I have a matrix filled with x_i's > (points > > where I want to interpolate), and (x,y) which is the tuple of grids > where I > > know the function values and the function values themselves. My question > > is, is there any way of simplifying the handling of the differences > between > > scalars, vector, and matrices? *(<- this is where my question is hidden > in > > the wall of text)* Maybe it would be easier if there was a function such > as > > histc to calculate loc (location aka what bin are we in). > > > > I probably also have to add, that it is on purpose that I treat < first > > grid point and between the first and second grid point (and likewise in > the > > upper end) the same. If we are outside of the grid, I want to use the > > nearest gradient to extrapolate. > > > > > > function interp1 (x::Vector, y::Vector, xi::Float64) > > N = length(x) > > loc = zeros(m,n) > > place = 1 > > for i = 2:(N-1) > > place+= xi[j,k] >= x[i] > > end > > loc=place > > return y[loc]+(xi-x[loc]).*(y[loc+1]-y[loc])./(x[loc+1]-x[loc]) > > end > > > > function interp1 (x::Vector, y::Vector, xi::Matrix) > > m,n = size(xi) > > N = length(x) > > loc = zeros(m,n) > > for k = 1:n > > for j = 1:m > > place = 1 > > for i = 2:(N-1) > > place+= xi[j,k] >= x[i] > > end > > loc[j,k]=place > > end > > end > > return y[loc]+(xi-x[loc]).*(y[loc+1]-y[loc])./(x[loc+1]-x[loc]) > > end > > > > function interp1 (x::Vector, y::Vector, xi::Vector) > > n = length(xi) > > N = length(x) > > loc = zeros(n) > > for k = 1:n > > place = 1 > > for i = 2:(N-1) > > place+= xi[k] >= x[i] > > end > > loc[k]=place > > end > > return y[loc]+(xi-x[loc]).*(y[loc+1]-y[loc])./(x[loc+1]-x[loc]) > > end > >
