gwymath

gwymath — Mathematical utility functions

Synopsis




#define     ROUND                           (x)
gchar*      gwy_math_SI_prefix              (gdouble magnitude);
gdouble     gwy_math_humanize_numbers       (gdouble unit,
                                             gdouble maximum,
                                             gint *precision);
gint        gwy_math_find_nearest_line      (gdouble x,
                                             gdouble y,
                                             gdouble *d2min,
                                             gint n,
                                             gdouble *coords);
gint        gwy_math_find_nearest_point     (gdouble x,
                                             gdouble y,
                                             gdouble *d2min,
                                             gint n,
                                             gdouble *coords);
gdouble*    gwy_math_lin_solve              (gint n,
                                             const gdouble *matrix,
                                             const gdouble *rhs,
                                             gdouble *result);
gdouble*    gwy_math_lin_solve_rewrite      (gint n,
                                             gdouble *matrix,
                                             gdouble *rhs,
                                             gdouble *result);
gdouble*    gwy_math_fit_polynom            (gint ndata,
                                             gdouble *xdata,
                                             gdouble *ydata,
                                             gint n,
                                             gdouble *coeffs);

Description

Details

ROUND()

#define ROUND(x) ((gint)floor((x) + 0.5))

Rounds a number to nearest integer.

x : A double value.

gwy_math_SI_prefix ()

gchar*      gwy_math_SI_prefix              (gdouble magnitude);

Finds SI prefix corresponding to a given power of 1000.

In fact, magnitude doesn't have to be power of 1000, but then the result is mostly meaningless.

magnitude : A power of 1000.
Returns : The SI unit prefix corresponding to magnitude, "?" if magnitude is outside of the SI prefix range. The returned value must be considered constant and never modified or freed.

gwy_math_humanize_numbers ()

gdouble     gwy_math_humanize_numbers       (gdouble unit,
                                             gdouble maximum,
                                             gint *precision);

Find a human readable representation for a range of numbers.

unit : The smallest possible step.
maximum : The maximum possible value.
precision : A location to store printf() precession, if not NULL.
Returns : The magnitude i.e., a power of 1000.

gwy_math_find_nearest_line ()

gint        gwy_math_find_nearest_line      (gdouble x,
                                             gdouble y,
                                             gdouble *d2min,
                                             gint n,
                                             gdouble *coords);

Find the line from coords nearest to the point (x, y).

x : X-coordinate of the point to search.
y : Y-coordinate of the point to search.
d2min : Where to store the squared minimal distance, or NULL.
n : The number of lines (i.e. coords has 4n items).
coords : Line coordinates stored as x00, y00, x01, y01, x10, y10, etc.
Returns : The line number. It may return -1 if (x, y) doesn't lie in the orthogonal stripe of any of the lines.

gwy_math_find_nearest_point ()

gint        gwy_math_find_nearest_point     (gdouble x,
                                             gdouble y,
                                             gdouble *d2min,
                                             gint n,
                                             gdouble *coords);

Find the point from coords nearest to the point (x, y).

x : X-coordinate of the point to search.
y : Y-coordinate of the point to search.
d2min : Where to store the squared minimal distance, or NULL.
n : The number of points (i.e. coords has 2n items).
coords : Point coordinates stored as x0, y0, x1, y1, x2, y2, etc.
Returns : The point number.

gwy_math_lin_solve ()

gdouble*    gwy_math_lin_solve              (gint n,
                                             const gdouble *matrix,
                                             const gdouble *rhs,
                                             gdouble *result);

Solve a regular system of linear equations.

n : The size of the system.
matrix : The matrix of the system (n times n), ordered by row, then column.
rhs : The right hand side of the sytem.
result : Where the result should be stored. May be NULL to allocate a fresh array for the result.
Returns : The solution (result if it wasn't NULL), may be NULL if the matrix is singular.

gwy_math_lin_solve_rewrite ()

gdouble*    gwy_math_lin_solve_rewrite      (gint n,
                                             gdouble *matrix,
                                             gdouble *rhs,
                                             gdouble *result);

Solve a regular system of linear equations.

This is a memory-conservative version of gwy_math_lin_solve() overwriting matrix and rhs with intermediate results.

n : The size of the system.
matrix : The matrix of the system (n times n), ordered by row, then column.
rhs : The right hand side of the sytem.
result : Where the result should be stored. May be NULL to allocate a fresh array for the result.
Returns : The solution (result if it wasn't NULL), may be NULL if the matrix is singular.

gwy_math_fit_polynom ()

gdouble*    gwy_math_fit_polynom            (gint ndata,
                                             gdouble *xdata,
                                             gdouble *ydata,
                                             gint n,
                                             gdouble *coeffs);

Fits a polynom through a general (x, y) data set.

ndata : The number of items in xdata, ydata.
xdata : Independent variable data (of size ndata).
ydata : Dependent variable data (of size ndata).
n : The degree of polynom to fit.
coeffs : An array of size n+1 to store the coefficients to, or NULL (a fresh array is allocated then).
Returns : The coefficients of the polynom (coeffs when it was not NULL, otherwise a newly allocated array).