Blender V4.3
BLI_math_solvers.h File Reference

Go to the source code of this file.

Functions

Eigen Solvers
bool BLI_eigen_solve_selfadjoint_m3 (const float m3[3][3], float r_eigen_values[3], float r_eigen_vectors[3][3])
 Compute the eigen values and/or vectors of given 3D symmetric (aka adjoint) matrix.
 
void BLI_svd_m3 (const float m3[3][3], float r_U[3][3], float r_S[3], float r_V[3][3])
 Compute the SVD (Singular Values Decomposition) of given 3D matrix (m3 = USV*).
 

Simple Solvers

typedef void(* Newton3D_DeltaFunc) (void *userdata, const float x[3], float r_delta[3])
 
typedef void(* Newton3D_JacobianFunc) (void *userdata, const float x[3], float r_jacobian[3][3])
 
typedef bool(* Newton3D_CorrectionFunc) (void *userdata, const float x[3], float step[3], float x_next[3])
 
bool BLI_tridiagonal_solve (const float *a, const float *b, const float *c, const float *d, float *r_x, int count)
 Solve a tridiagonal system of equations:
 
bool BLI_tridiagonal_solve_cyclic (const float *a, const float *b, const float *c, const float *d, float *r_x, int count)
 Solve a possibly cyclic tridiagonal system using the Sherman-Morrison formula.
 
bool BLI_newton3d_solve (Newton3D_DeltaFunc func_delta, Newton3D_JacobianFunc func_jacobian, Newton3D_CorrectionFunc func_correction, void *userdata, float epsilon, int max_iterations, bool trace, const float x_init[3], float result[3])
 Solve a generic f(x) = 0 equation using Newton's method.
 

Typedef Documentation

◆ Newton3D_CorrectionFunc

typedef bool(* Newton3D_CorrectionFunc) (void *userdata, const float x[3], float step[3], float x_next[3])

Definition at line 80 of file BLI_math_solvers.h.

◆ Newton3D_DeltaFunc

typedef void(* Newton3D_DeltaFunc) (void *userdata, const float x[3], float r_delta[3])

Generic 3 variable Newton's method solver.

Definition at line 78 of file BLI_math_solvers.h.

◆ Newton3D_JacobianFunc

typedef void(* Newton3D_JacobianFunc) (void *userdata, const float x[3], float r_jacobian[3][3])

Definition at line 79 of file BLI_math_solvers.h.

Function Documentation

◆ BLI_eigen_solve_selfadjoint_m3()

bool BLI_eigen_solve_selfadjoint_m3 ( const float m3[3][3],
float r_eigen_values[3],
float r_eigen_vectors[3][3] )

Compute the eigen values and/or vectors of given 3D symmetric (aka adjoint) matrix.

Parameters
m3the 3D symmetric matrix.
Returns
r_eigen_values the computed eigen values (NULL if not needed).
r_eigen_vectors the computed eigen vectors (NULL if not needed).

Definition at line 25 of file math_solvers.c.

References BLI_assert, and EIG_self_adjoint_eigen_solve().

Referenced by mesh_calc_eigen_matrix().

◆ BLI_newton3d_solve()

bool BLI_newton3d_solve ( Newton3D_DeltaFunc func_delta,
Newton3D_JacobianFunc func_jacobian,
Newton3D_CorrectionFunc func_correction,
void * userdata,
float epsilon,
int max_iterations,
bool trace,
const float x_init[3],
float result[3] )

Solve a generic f(x) = 0 equation using Newton's method.

Parameters
func_deltaCallback computing the value of f(x).
func_jacobianCallback computing the Jacobian matrix of the function at x.
func_correctionCallback for forcing the search into an arbitrary custom domain. May be NULL.
userdataData for the callbacks.
epsilonDesired precision.
max_iterationsLimit on the iterations.
traceEnables logging to console.
x_initInitial solution vector.
resultFinal result.
Returns
true if success

Definition at line 154 of file math_solvers.c.

References CLAMP_MIN, copy_v3_v3(), invert_m3(), l, len_squared_v3(), len_v3(), mul_v3_fl(), mul_v3_m3v3(), printf, sqrtf, and sub_v3_v3v3().

Referenced by target_project_solve_point_tri().

◆ BLI_svd_m3()

void BLI_svd_m3 ( const float m3[3][3],
float r_U[3][3],
float r_S[3],
float r_V[3][3] )

Compute the SVD (Singular Values Decomposition) of given 3D matrix (m3 = USV*).

Parameters
m3the matrix to decompose.
Returns
r_U the computed left singular vector of m3 (NULL if not needed).
r_S the computed singular values of m3 (NULL if not needed).
r_V the computed right singular vector of m3 (NULL if not needed).

Definition at line 40 of file math_solvers.c.

References EIG_svd_square_matrix().

Referenced by mat3_polar_decompose().

◆ BLI_tridiagonal_solve()

bool BLI_tridiagonal_solve ( const float * a,
const float * b,
const float * c,
const float * d,
float * r_x,
int count )

Solve a tridiagonal system of equations:

a[i] * r_x[i-1] + b[i] * r_x[i] + c[i] * r_x[i+1] = d[i]

Ignores a[0] and c[count-1]. Uses the Thomas algorithm, e.g. see wiki.

Parameters
r_xoutput vector, may be shared with any of the input ones
Returns
true if success

Definition at line 47 of file math_solvers.c.

References b, count, double(), float, MEM_freeN(), and MEM_mallocN.

Referenced by BLI_tridiagonal_solve_cyclic(), TEST(), and TEST().

◆ BLI_tridiagonal_solve_cyclic()

bool BLI_tridiagonal_solve_cyclic ( const float * a,
const float * b,
const float * c,
const float * d,
float * r_x,
int count )

Solve a possibly cyclic tridiagonal system using the Sherman-Morrison formula.

Parameters
r_xoutput vector, may be shared with any of the input ones
Returns
true if success

Definition at line 91 of file math_solvers.c.

References b, BLI_tridiagonal_solve(), count, float, MEM_freeN(), and MEM_mallocN.

Referenced by TEST(), TEST(), TEST(), and tridiagonal_solve_with_limits().