Blender V5.0
BLI_math_solvers.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2015 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
10
11#include "BLI_math_inline.h"
12
13#ifdef BLI_MATH_GCC_WARN_PRAGMA
14# pragma GCC diagnostic push
15# pragma GCC diagnostic ignored "-Wredundant-decls"
16#endif
17
18/* -------------------------------------------------------------------- */
21
29bool BLI_eigen_solve_selfadjoint_m3(const float m3[3][3],
30 float r_eigen_values[3],
31 float r_eigen_vectors[3][3]);
32
41void BLI_svd_m3(const float m3[3][3], float r_U[3][3], float r_S[3], float r_V[3][3]);
42
44
45/* -------------------------------------------------------------------- */
48
60 const float *a, const float *b, const float *c, const float *d, float *r_x, int count);
68 const float *a, const float *b, const float *c, const float *d, float *r_x, int count);
69
73typedef void (*Newton3D_DeltaFunc)(void *userdata, const float x[3], float r_delta[3]);
74typedef void (*Newton3D_JacobianFunc)(void *userdata, const float x[3], float r_jacobian[3][3]);
75typedef bool (*Newton3D_CorrectionFunc)(void *userdata,
76 const float x[3],
77 float step[3],
78 float x_next[3]);
79
96 Newton3D_JacobianFunc func_jacobian,
97 Newton3D_CorrectionFunc func_correction,
98 void *userdata,
99 float epsilon,
100 int max_iterations,
101 bool trace,
102 const float x_init[3],
103 float result[3]);
104
105#ifdef BLI_MATH_GCC_WARN_PRAGMA
106# pragma GCC diagnostic pop
107#endif
108
bool(* Newton3D_CorrectionFunc)(void *userdata, const float x[3], float step[3], float x_next[3])
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.
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.
void(* Newton3D_JacobianFunc)(void *userdata, const float x[3], float r_jacobian[3][3])
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*).
void(* Newton3D_DeltaFunc)(void *userdata, const float x[3], float r_delta[3])
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.
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:
VecBase< float, D > step(VecOp< float, D >, VecOp< float, D >) RET
int count