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.
25 GnmCell
*xcell
; // Cell to change
26 GnmCell
*ycell
; // Result cell
27 gnm_float ytarget
; // Target value
28 } GnmGoalSeekCellData
;
30 typedef enum { GOAL_SEEK_OK
, GOAL_SEEK_ERROR
} GnmGoalSeekStatus
;
32 typedef GnmGoalSeekStatus (*GnmGoalSeekFunction
) (gnm_float x
, gnm_float
*y
, void *user_data
);
34 void goal_seek_initialize (GnmGoalSeekData
*data
);
36 GnmGoalSeekStatus
goal_seek_point (GnmGoalSeekFunction f
,
37 GnmGoalSeekData
*data
,
41 GnmGoalSeekStatus
goal_seek_newton (GnmGoalSeekFunction f
,
42 GnmGoalSeekFunction df
,
43 GnmGoalSeekData
*data
,
47 GnmGoalSeekStatus
goal_seek_bisection (GnmGoalSeekFunction f
,
48 GnmGoalSeekData
*data
,
51 GnmGoalSeekStatus
goal_seek_trawl_uniformly (GnmGoalSeekFunction f
,
52 GnmGoalSeekData
*data
,
54 gnm_float xmin
, gnm_float xmax
,
57 GnmGoalSeekStatus
goal_seek_trawl_normally (GnmGoalSeekFunction f
,
58 GnmGoalSeekData
*data
,
60 gnm_float mu
, gnm_float sigma
,
63 GnmGoalSeekStatus
gnm_goal_seek_eval_cell (gnm_float x
,
64 gnm_float
*y
, gpointer data
);
66 GnmGoalSeekStatus
gnm_goal_seek_cell (GnmGoalSeekData
*data
,
67 GnmGoalSeekCellData
*celldata
);