Blender V4.3
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
11#include "BLI_compiler_attrs.h"
12#include "BLI_math_inline.h"
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18#ifdef BLI_MATH_GCC_WARN_PRAGMA
19# pragma GCC diagnostic push
20# pragma GCC diagnostic ignored "-Wredundant-decls"
21#endif
22
23/* -------------------------------------------------------------------- */
34bool BLI_eigen_solve_selfadjoint_m3(const float m3[3][3],
35 float r_eigen_values[3],
36 float r_eigen_vectors[3][3]);
37
46void BLI_svd_m3(const float m3[3][3], float r_U[3][3], float r_S[3], float r_V[3][3]);
47
50/* -------------------------------------------------------------------- */
65 const float *a, const float *b, const float *c, const float *d, float *r_x, int count);
73 const float *a, const float *b, const float *c, const float *d, float *r_x, int count);
74
78typedef void (*Newton3D_DeltaFunc)(void *userdata, const float x[3], float r_delta[3]);
79typedef void (*Newton3D_JacobianFunc)(void *userdata, const float x[3], float r_jacobian[3][3]);
80typedef bool (*Newton3D_CorrectionFunc)(void *userdata,
81 const float x[3],
82 float step[3],
83 float x_next[3]);
84
101 Newton3D_JacobianFunc func_jacobian,
102 Newton3D_CorrectionFunc func_correction,
103 void *userdata,
104 float epsilon,
105 int max_iterations,
106 bool trace,
107 const float x_init[3],
108 float result[3]);
109
110#ifdef BLI_MATH_GCC_WARN_PRAGMA
111# pragma GCC diagnostic pop
112#endif
113
116#ifdef __cplusplus
117}
118#endif
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:
local_group_size(16, 16) .push_constant(Type b
int count