This function uses a non-linear interpolation (Lagrange) to estimate y given x, based on a set of observed x-y points. Coordinates will be sorted based on the x-value of the pair. The x-value provided by the user to calculate y will be estimated using two points left and two points right of the provided x-value.
While this function will allow the user to prescribe any number of observed points to be used for the interpolation, caution should be used when more than four points are used in the equation. This function will induce oscillations such that accuracy of interpolation may diverge intermittently on linear types of data.
Again, similar to the Mann-Kendall trend test (i.e. ktaub.m), this function is written to maximize the capabilities of Matlab both in terms of intrinsic speed of the logic written here and utilizing native Matlab functions as much as possible without overtly complicating the process.
Essentially, there are 10 lines of code to perform the calculation. All the rest are more administrative in nature.
Also previously stated, the trade-off for not using any recursive logic does require more memory to be used given how arrays are manipulated in Matlab. However, unlike the trend test, this function is highly unlikely to use any excessive amounts of memory beyond what the user consumes with the data prior to being processed here. Unless, of course, the user specifies some ridiculous amount of points to be considered as part of
If an error is trapped and returned, it's most likely caused by the user specifing an x value such that the provided x-y data does not have enough x-values to bracket the intended estimate, causing an EXTRAPOLATION.
estY = lagrange(datainXY, x, N);
datainXY = (N x 2) double, Col1 = X, Col2 = Y
x = x-value used for locating estimate of Y
N = number of points in datainXY to use for interpolation
Jeff Burkey (2020). A Parabolic Lagrangian Interpolating Polynomial Function (https://www.mathworks.com/matlabcentral/fileexchange/14398-a-parabolic-lagrangian-interpolating-polynomial-function), MATLAB Central File Exchange. Retrieved .
Well...when I submitted this I didn't know there were so many variants of this function. I used 'lagrangian' instead of 'langrange' for my search. Hence, the mistaken thought of a need. Nevertheless, maybe my version is a fresh perspective out there on how it's done in vectors and arrays only. If my code reflects a previously submitted version, my appologies. I assure everyone, I reviewed no one else's in developing mine, but great minds think alike.
- Jeff (author).
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!