Blender
V3.3
|
#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... | |
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.
m3 | the 3D symmetric matrix. |
Definition at line 19 of file math_solvers.c.
References BLI_assert, and EIG_self_adjoint_eigen_solve().
Referenced by mesh_calc_eigen_matrix().
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.
func_delta | Callback computing the value of f(x). |
func_jacobian | Callback computing the Jacobian matrix of the function at x. |
func_correction | Callback for forcing the search into an arbitrary custom domain. May be NULL. |
userdata | Data for the callbacks. |
epsilon | Desired precision. |
max_iterations | Limit on the iterations. |
trace | Enables logging to console. |
x_init | Initial solution vector. |
result | Final result. |
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().
Compute the SVD (Singular Values Decomposition) of given 3D matrix (m3 = USV*).
m3 | the matrix to decompose. |
Definition at line 34 of file math_solvers.c.
References EIG_svd_square_matrix().
Referenced by mat3_polar_decompose().
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.
r_x | output vector, may be shared with any of the input ones |
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().
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.
r_x | output vector, may be shared with any of the input ones |
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().