GoalSeek: code cleanup.
[gnumeric.git] / src / tools / goal-seek.h
blob0417b873b66d56672fa4ff1500371719088acfb4
1 #ifndef GNUMERIC_GOAL_SEEK_H
2 #define GNUMERIC_GOAL_SEEK_H
4 #include <numbers.h>
5 #include <glib.h>
7 typedef struct {
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.
22 } GnmGoalSeekData;
24 typedef struct {
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,
38 void *user_data,
39 gnm_float x0);
41 GnmGoalSeekStatus goal_seek_newton (GnmGoalSeekFunction f,
42 GnmGoalSeekFunction df,
43 GnmGoalSeekData *data,
44 void *user_data,
45 gnm_float x0);
47 GnmGoalSeekStatus goal_seek_bisection (GnmGoalSeekFunction f,
48 GnmGoalSeekData *data,
49 void *user_data);
51 GnmGoalSeekStatus goal_seek_trawl_uniformly (GnmGoalSeekFunction f,
52 GnmGoalSeekData *data,
53 void *user_data,
54 gnm_float xmin, gnm_float xmax,
55 int points);
57 GnmGoalSeekStatus goal_seek_trawl_normally (GnmGoalSeekFunction f,
58 GnmGoalSeekData *data,
59 void *user_data,
60 gnm_float mu, gnm_float sigma,
61 int points);
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);
70 #endif