Blender  V3.3
BLI_math_solvers.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2015 Blender Foundation. All rights reserved. */
3 
4 #pragma once
5 
10 #include "BLI_compiler_attrs.h"
11 #include "BLI_math_inline.h"
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
17 #ifdef BLI_MATH_GCC_WARN_PRAGMA
18 # pragma GCC diagnostic push
19 # pragma GCC diagnostic ignored "-Wredundant-decls"
20 #endif
21 
22 /* -------------------------------------------------------------------- */
33 bool BLI_eigen_solve_selfadjoint_m3(const float m3[3][3],
34  float r_eigen_values[3],
35  float r_eigen_vectors[3][3]);
36 
45 void BLI_svd_m3(const float m3[3][3], float r_U[3][3], float r_S[3], float r_V[3][3]);
46 
49 /* -------------------------------------------------------------------- */
64  const float *a, const float *b, const float *c, const float *d, float *r_x, int count);
72  const float *a, const float *b, const float *c, const float *d, float *r_x, int count);
73 
77 typedef void (*Newton3D_DeltaFunc)(void *userdata, const float x[3], float r_delta[3]);
78 typedef void (*Newton3D_JacobianFunc)(void *userdata, const float x[3], float r_jacobian[3][3]);
79 typedef bool (*Newton3D_CorrectionFunc)(void *userdata,
80  const float x[3],
81  float step[3],
82  float x_next[3]);
83 
100  Newton3D_JacobianFunc func_jacobian,
101  Newton3D_CorrectionFunc func_correction,
102  void *userdata,
103  float epsilon,
104  int max_iterations,
105  bool trace,
106  const float x_init[3],
107  float result[3]);
108 
109 #ifdef BLI_MATH_GCC_WARN_PRAGMA
110 # pragma GCC diagnostic pop
111 #endif
112 
115 #ifdef __cplusplus
116 }
117 #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.
Definition: math_solvers.c:150
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.
Definition: math_solvers.c:86
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*).
Definition: math_solvers.c:34
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.
Definition: math_solvers.c:19
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:
Definition: math_solvers.c:41
SyclQueue void void size_t num_bytes void
int count
static unsigned c
Definition: RandGen.cpp:83
static unsigned a[3]
Definition: RandGen.cpp:78
static double epsilon
static const pxr::TfToken b("b", pxr::TfToken::Immortal)