LinearInterp

Revision as of 19:49, 30 July 2015 by Karenlee (talk | contribs)


LinearInterp(d,r,x,i)

Uses linear interpolation to determine the value of a piecewise linear function at «x». The piecewise curve is determined from a set of points, («d»,«r») indexed by «i», which represent the vertices of the curve. (Think of «d» as the domain, or horizontal axis, and «r» as the range, or vertical axis, when thinking about these points). The array «d» must be strictly increasing.

LinearInterp finds the two points in «d» that «x» lands between -- i.e.,

d[@I=j] <= x <= d[@I=j+1]

and then interpolates between the two points (d[@I=j],r[@I=j]) and (d[@I=j+1],r[@I=j+1]) for that value of «x». You can pass an array of values in for «x» to find many points on the curve at once.

«d» and «r» may contain Null values, in which case these points are ignored, with the interpolating occurring only between non-null points. Also, when «x» is Null or when there are no non-null data points, the result is Null.

LinearInterp-graph.png

Extrapolation

When «x» lands to the left or right of all points in «d», LinearInterp must extrapolate. By default it does this by assuming the function is a constant value, equal to the leftmost or rightmost value in «r».

(new in Analytica 4.6) You can select an alternate extrapolation method by specifying a value for the optional «extrapolationMethod» parameter. The following values are possible.

  • 1 = Use the «r» value for the nearest point (default).
  • 2 = Disallow extrapolation, return Null.
  • 3 = Use the «r» value for the nearest point during evaluation, but disallow extrapolation while solving an LP or QP optimization.
  • 4 = Extrapolate by extending the slope of the first or last segment.
  • 5 = Extrapolate by extending the slope of the first or last segment, but disallow extrapolation while solving an LP or QP optimization.

Example usage:

LinearInterp(d,r,x,i, extrapolationMethod:4 )
LinearInterp ExtrapolationMethod4.png

Piecewise-linear relationships in Optimizations

(Applies to Analytica Optimizer edition)

LinearInterp can be used inside a linear and quadratic optimization problem, known as a Linear Program (LP), Quadratic Program (QP) or Quadratically Constrained Program (QCP). When the «d» and «r» parameters do not depend on any decision variables, but «x» is a function of decision variables, the structured optimization facility (i.e., DefineOptimization) will automatically incorporate the piecewise-linear relationship into your LP, keeping the problem linear (or quadratic if already quadratic).

Since a continuous non-linear scalar function y=f(x) can be approximated by a piecewise-linear function, this makes it possible to approximate non-linear relationships inside an LP. Structured optimization accomplishes this by introducing auxiliary (decision) variables and constraints into the optimization formulation. This happens transparently, so you don't have to figure out how to do it yourself, but since some of the variables are boolean-valued, it creates a combinatoric search space for the LP engine. This often increases search times dramatically. Hence, it may not be a panacea for solving your non-linear problem. Nonetheless, there can still be advantages to keeping your problem an LP (rather than having to resort to an NLP). LPs are always array-abstractable, and when an optimal solution is returned, you can be assured it really is the global optimum.

The example model "Vacation plan with PWL tax.ana", found in the Optimizer Example folder in Analytica 4.6 and later, illustrates an example of LinearInterp in an optimization problem. In the example, a graduated income tax rate is modeled in a piecewise-linear fashion using LinearInterp in the context of a linear program.

(new to Analytica 4.6) When solving an optimization problem, extrapolation adds complexity to the formulation, so if you know that «x» (at the optimum) will always be within the range of «d»'s values, it is probably advantageous to disable extrapolation. This is done by specifying the «extrapolationMethod» parameter to be either 2, 3 or 5. When you use any of these options, the resulting formulation implicitly constraints «x» to be within the range of «d». If you are wrong about «x» being in that range, your problem might become infeasible (because of the extra constraint).

Library

Array functions

See Also

User Guide

Returns linearly interpolated values of x, given d and r representing an arbitrary piecewise linear function. d and r must both be indexed by i, and d must be increasing along i. r is an array of the corresponding output values for the function (not necessarily increasing and might be more than one dimension). x might be probabilistic and/or an array.

For each value of x, Linearinterp() finds the nearest two values from d and interpolates linearly between the corresponding values from r. By default, if x is less than the minimum value in d, it returns the first value in r. If x is greater than the maximum value in d, it returns the last value in r.

Library

Array

Example

Linearinterp(Index_b, Array_a, 1.5, Index_b) →
Index_a >
a b c
2 -2.5 2.5

Extrapolation

You can set the optional extrapolationMethod parameter to alter how extrapolation is handled when x is outside the range of d values. The possible values for extrapolationMethod are

  • 1 = (default) Return r value of nearest point.
  • 2 = Disable extrapolation. Return null if outside d’s range.
  • 3 = Return r value of nearest point, but disable extrapolation when solving an LP or QP optimization problem. See the Analytica Optimization manual.
  • 4 = Extrapolate using the slope of the first or last segment.
  • 5 = Extrapolate using the slope of the first or last segment, but disable extrapolation when solving an LP or QP optimization problem. See the Analytica Optimization manual
Comments


You are not allowed to post comments.