16 if (!lmmc_vec_descriptor_is_valid(a) ||
17 !lmmc_vec_descriptor_is_valid(b) ||
18 !lmmc_vec_descriptor_is_valid(c)) {
27 for (i = 0; i < a->
size; ++i) {
41 if (!lmmc_vec_descriptor_is_valid(a) ||
42 !lmmc_vec_descriptor_is_valid(b) ||
43 !lmmc_vec_descriptor_is_valid(c)) {
53 for (i = 0; i < b->
size; ++i) {
63 for (i = 0; i < a->
size; ++i) {
75 if (!lmmc_vec_descriptor_is_valid(a) ||
76 !lmmc_vec_descriptor_is_valid(b) ||
77 !lmmc_vec_descriptor_is_valid(c)) {
84 for (i = 0; i < a->
size; ++i) {
95 if (!lmmc_mat_descriptor_is_valid(a) ||
96 !lmmc_mat_descriptor_is_valid(b) ||
97 !lmmc_mat_descriptor_is_valid(c)) {
107 for (i = 0; i < a->
rows; ++i) {
108 for (j = 0; j < a->
cols; ++j) {
125 if (!lmmc_mat_descriptor_is_valid(a) ||
126 !lmmc_mat_descriptor_is_valid(b) ||
127 !lmmc_mat_descriptor_is_valid(c)) {
138 for (i = 0; i < b->
rows; ++i) {
139 for (j = 0; j < b->
cols; ++j) {
150 for (i = 0; i < a->
rows; ++i) {
151 for (j = 0; j < a->
cols; ++j) {
166 if (!lmmc_mat_descriptor_is_valid(a) ||
167 !lmmc_mat_descriptor_is_valid(b) ||
168 !lmmc_mat_descriptor_is_valid(c)) {
176 for (i = 0; i < a->
rows; ++i) {
177 for (j = 0; j < a->
cols; ++j) {
190 if (!lmmc_vec_descriptor_is_valid(a) ||
191 !lmmc_vec_descriptor_is_valid(b) || out == NULL) {
198 for (i = 0; i < a->
size; ++i) {
208 if (!lmmc_vec_descriptor_is_valid(a) ||
209 !lmmc_vec_descriptor_is_valid(b) || out == NULL) {
216 for (i = 0; i < a->
size; ++i) {
226 if (!lmmc_vec_descriptor_is_valid(a) ||
227 !lmmc_vec_descriptor_is_valid(b) || out == NULL) {
234 for (i = 0; i < a->
size; ++i) {
244 if (!lmmc_vec_descriptor_is_valid(a) ||
245 !lmmc_vec_descriptor_is_valid(b) || out == NULL) {
252 for (i = 0; i < a->
size; ++i) {
264 if (!lmmc_vec_descriptor_is_valid(a) ||
265 !lmmc_vec_descriptor_is_valid(b) || out == NULL) {
275 for (i = 0; i < a->
size; ++i) {
291 if (!lmmc_vec_descriptor_is_valid(a) ||
292 !lmmc_vec_descriptor_is_valid(b) ||
293 !lmmc_vec_descriptor_is_valid(c)) {
338 if (!lmmc_vec_descriptor_is_valid(in) ||
339 !lmmc_vec_descriptor_is_valid(out) || func == NULL) {
346 for (i = 0; i < in->
size; ++i) {
358 if (!lmmc_mat_descriptor_is_valid(in) ||
359 !lmmc_mat_descriptor_is_valid(out) || func == NULL) {
366 for (i = 0; i < in->
rows; ++i) {
367 for (j = 0; j < in->
cols; ++j) {
LMMC binary real type and arithmetic spelling.
#define LMMC_REAL_CLEAR(x)
释放一个 lmmc_real_t 变量(POD 类型为空操作)。
#define LMMC_REAL_INIT(x)
初始化一个 lmmc_real_t 变量(POD 类型为空操作)。
#define LMMC_REAL_DIV(res, a, b)
计算 *res = *a / *b 。
#define LMMC_REAL_SUB(res, a, b)
计算 *res = *a - *b 。
double lmmc_real_t
Public and internal LMMC real type.
#define LMMC_REAL_SET(dst, src)
将一个 lmmc_real_t 赋值到另一个:*dst = *src 。
#define LMMC_REAL_MUL(res, a, b)
计算 *res = *a * *b 。
#define LMMC_REAL_ABS(res, a)
计算绝对值,*res = |*a| 。
#define LMMC_REAL_CMP(a, b)
比较 *a 与 *b ,返回 -1/0/1 。
#define LMMC_REAL_SET_D(dst, dbl)
将一个 double 字面量赋值到 lmmc_real_t 。
lmmc_status_t lmmc_vec_cross(const lmmc_vec_t *a, const lmmc_vec_t *b, lmmc_vec_t *c)
计算三维向量叉积: 。
lmmc_status_t lmmc_vec_apply_sqrt(const lmmc_vec_t *in, lmmc_vec_t *out)
对向量逐元素求平方根: 。
lmmc_status_t lmmc_vec_elementwise_div(const lmmc_vec_t *a, const lmmc_vec_t *b, lmmc_vec_t *c)
逐元素向量除法: 。
lmmc_status_t lmmc_vec_cmp_le(const lmmc_vec_t *a, const lmmc_vec_t *b, int *out)
逐元素向量小于等于比较: 。
lmmc_status_t lmmc_mat_apply(const lmmc_mat_t *in, lmmc_real_t(*func)(lmmc_real_t), lmmc_mat_t *out)
对矩阵逐元素应用标量函数: 。
lmmc_status_t lmmc_mat_apply_log(const lmmc_mat_t *in, lmmc_mat_t *out)
对矩阵逐元素求自然对数: 。
lmmc_status_t lmmc_mat_hadamard(const lmmc_mat_t *a, const lmmc_mat_t *b, lmmc_mat_t *c)
逐元素矩阵 Hadamard 乘积: 。
lmmc_status_t lmmc_vec_cmp_eq(const lmmc_vec_t *a, const lmmc_vec_t *b, lmmc_real_t tol, int *out)
逐元素向量近似相等比较: 。
lmmc_status_t lmmc_vec_cmp_ge(const lmmc_vec_t *a, const lmmc_vec_t *b, int *out)
逐元素向量大于等于比较: 。
lmmc_status_t lmmc_vec_hadamard(const lmmc_vec_t *a, const lmmc_vec_t *b, lmmc_vec_t *c)
逐元素向量 Hadamard 乘积: 。
lmmc_status_t lmmc_vec_cmp_gt(const lmmc_vec_t *a, const lmmc_vec_t *b, int *out)
逐元素向量大于比较: 。
lmmc_status_t lmmc_mat_elementwise_pow(const lmmc_mat_t *a, const lmmc_mat_t *b, lmmc_mat_t *c)
逐元素矩阵幂运算: 。
lmmc_status_t lmmc_vec_apply(const lmmc_vec_t *in, lmmc_real_t(*func)(lmmc_real_t), lmmc_vec_t *out)
对向量逐元素应用标量函数: 。
lmmc_status_t lmmc_mat_apply_sin(const lmmc_mat_t *in, lmmc_mat_t *out)
对矩阵逐元素求正弦: 。
lmmc_status_t lmmc_mat_apply_sqrt(const lmmc_mat_t *in, lmmc_mat_t *out)
对矩阵逐元素求平方根: 。
lmmc_status_t lmmc_vec_apply_cos(const lmmc_vec_t *in, lmmc_vec_t *out)
对向量逐元素求余弦: 。
lmmc_status_t lmmc_vec_elementwise_pow(const lmmc_vec_t *a, const lmmc_vec_t *b, lmmc_vec_t *c)
逐元素向量幂运算: 。
lmmc_status_t lmmc_vec_apply_exp(const lmmc_vec_t *in, lmmc_vec_t *out)
对向量逐元素求自然指数: 。
lmmc_status_t lmmc_mat_apply_exp(const lmmc_mat_t *in, lmmc_mat_t *out)
对矩阵逐元素求自然指数: 。
lmmc_status_t lmmc_mat_apply_cos(const lmmc_mat_t *in, lmmc_mat_t *out)
对矩阵逐元素求余弦: 。
lmmc_status_t lmmc_mat_apply_abs(const lmmc_mat_t *in, lmmc_mat_t *out)
对矩阵逐元素求绝对值: 。
lmmc_status_t lmmc_vec_cmp_lt(const lmmc_vec_t *a, const lmmc_vec_t *b, int *out)
逐元素向量小于比较: 。
lmmc_status_t lmmc_vec_apply_abs(const lmmc_vec_t *in, lmmc_vec_t *out)
对向量逐元素求绝对值: 。
lmmc_status_t lmmc_mat_elementwise_div(const lmmc_mat_t *a, const lmmc_mat_t *b, lmmc_mat_t *c)
逐元素矩阵除法: 。
lmmc_status_t lmmc_vec_apply_sin(const lmmc_vec_t *in, lmmc_vec_t *out)
对向量逐元素求正弦: 。
lmmc_status_t lmmc_vec_apply_log(const lmmc_vec_t *in, lmmc_vec_t *out)
对向量逐元素求自然对数: 。
稠密矩阵直接分解接口(LU、Cholesky、QR)。
lmmc_status_t
LMMC 库统一返回的状态码.
@ LMMC_STATUS_NUMERICAL_FAILURE
@ LMMC_STATUS_DIMENSION_MISMATCH
@ LMMC_STATUS_INVALID_ARGUMENT