1 #ifndef GNUMERIC_GOAL_SEEK_H
2 #define GNUMERIC_GOAL_SEEK_H
8 gnm_float xmin
; /* Minimum allowed value for x. */
9 gnm_float xmax
; /* Maximum allowed value for x. */
10 gnm_float precision
; /* Desired relative precision. */
12 gboolean havexpos
; /* Do we have a valid xpos? */
13 gnm_float xpos
; /* Value for which f(xpos) > 0. */
14 gnm_float ypos
; /* f(xpos). */
16 gboolean havexneg
; /* Do we have a valid xneg? */
17 gnm_float xneg
; /* Value for which f(xneg) < 0. */
18 gnm_float yneg
; /* f(xneg). */
20 gboolean have_root
; /* Do we have a valid root? */
21 gnm_float root
; /* Value for which f(root) == 0. */
24 typedef enum { GOAL_SEEK_OK
, GOAL_SEEK_ERROR
} GnmGoalSeekStatus
;
26 typedef GnmGoalSeekStatus (*GnmGoalSeekFunction
) (gnm_float x
, gnm_float
*y
, void *user_data
);
28 void goal_seek_initialize (GnmGoalSeekData
*data
);
30 GnmGoalSeekStatus
goal_seek_point (GnmGoalSeekFunction f
,
31 GnmGoalSeekData
*data
,
35 GnmGoalSeekStatus
goal_seek_newton (GnmGoalSeekFunction f
,
36 GnmGoalSeekFunction df
,
37 GnmGoalSeekData
*data
,
41 GnmGoalSeekStatus
goal_seek_bisection (GnmGoalSeekFunction f
,
42 GnmGoalSeekData
*data
,
45 GnmGoalSeekStatus
goal_seek_trawl_uniformly (GnmGoalSeekFunction f
,
46 GnmGoalSeekData
*data
,
48 gnm_float xmin
, gnm_float xmax
,
51 GnmGoalSeekStatus
goal_seek_trawl_normally (GnmGoalSeekFunction f
,
52 GnmGoalSeekData
*data
,
54 gnm_float mu
, gnm_float sigma
,