Archimedes.SamplerAdaptative sampling of functions.
A strategy is a function f t1 t2 that returns an internal point tm between t1 and t2 which will be used to decide if we need to increment precision or not. The given t1 and t2 will always be finite.
type cost =
Matrix.rectangle ->
float ->
float ->
float ->
float ->
float ->
float ->
floatA cost f bb x0 y0 xm ym x1 y1 which returns the cost measuring how much the three points (x0, y0), (xm, ym), and (x1, y1) differ from a straight line. bb is a rough bounding box of the set of points that can be used to determine whether two points are close (in relative measure). A cost <= 0. means one is satisfied with drawing straight lines connecting the three points.
val xy :
?tlog:bool ->
?fn0:float ->
?n:int ->
?strategy:strategy ->
?cost:cost ->
(float -> float * float) ->
float ->
float ->
float array * float arrayxy f t1 t2 samples the parametric function f on the interval going from t1 to t2. Returns a list of the points in the sample.
val x :
?tlog:bool ->
?fn0:float ->
?n:int ->
?strategy:strategy ->
?cost:cost ->
(float -> float) ->
float ->
float ->
float array * float arrayx f x1 x2 same as Sampler.xy but for the scalar function f on the interval going from x1 to x2.
val strategy_midpoint : strategyThe default strategy: choose the middle point
val strategy_random : strategyA strategy that avoids aliasing sampling, but not efficient: chooses randomly a point between t1 and t2
val strategy_center_random : strategyA more efficient strategy that avoids aliasing sampling: chooses randomly a points between t1 and t2 in its 10% center interval
val cost_angle : costMeasures the angle at the middle point (xm, ym), the flatter the angle, the lower the cost.
val cost_angle_dist : costMeasures the angle at the middle point (xm, ym), the flatter the angle, the better and combines it with the distance of the points (x0, y0) and (x1, y1) to the middle point, the smaller the distance, the better.
val cost_angle_log : bool -> bool -> costSame criterion as cost_angle suitable for logarithmic cordinates.