Blender  V3.3
Functions
math_solvers.c File Reference
#include "MEM_guardedalloc.h"
#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "BLI_strict_flags.h"
#include "eigen_capi.h"

Go to the source code of this file.

Functions

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. More...
 
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*). More...
 
bool BLI_tridiagonal_solve (const float *a, const float *b, const float *c, const float *d, float *r_x, const int count)
 Solve a tridiagonal system of equations: More...
 
bool BLI_tridiagonal_solve_cyclic (const float *a, const float *b, const float *c, const float *d, float *r_x, const int count)
 Solve a possibly cyclic tridiagonal system using the Sherman-Morrison formula. More...
 
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. More...
 

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 19 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 150 of file math_solvers.c.

References CLAMP_MIN, copy_v3_v3(), blender::robust_pred::epsilon, invert_m3(), l, len_squared_v3(), len_v3(), mul_v3_fl(), mul_v3_m3v3(), result, sqrtf, sub_v3_v3v3(), and x.

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 34 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 41 of file math_solvers.c.

References Freestyle::a, usdtokens::b(), Freestyle::c, count, double(), float(), CCL_NAMESPACE_BEGIN::isfinite(), MEM_freeN, and MEM_mallocN.

Referenced by BLI_tridiagonal_solve_cyclic(), 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 86 of file math_solvers.c.

References Freestyle::a, usdtokens::b(), BLI_tridiagonal_solve(), Freestyle::c, count, float(), CCL_NAMESPACE_BEGIN::isfinite(), MEM_freeN, and MEM_mallocN.

Referenced by TEST(), and tridiagonal_solve_with_limits().