14 for (
size_t i = 0; i < a->
rows; ++i) {
15 for (
size_t j = 0; j < a->
cols; ++j) {
24 for (
size_t i = 0; i < real->
size; ++i) {
25 real->
data[i] *= scale;
26 imag->
data[i] *= scale;
27 if (!isfinite(real->
data[i]) || !isfinite(imag->
data[i])) {
40 const lmmc_real_t determinant = a00 * a11 - a01 * a10;
42 fma(trace, trace, -4.0 * determinant);
43 if (discriminant >= 0.0) {
46 0.5 * (trace + copysign(root, trace));
48 *real1 = q == 0.0 ? 0.0 : determinant / q;
52 const lmmc_real_t imaginary = sqrt(-discriminant) * 0.5;
65static void extract_eigenvalues_from_schur(
const lmmc_mat_t *H,
size_t n,
69 if (i + 1 == n ||
MAT_ELEM(H, i + 1, i) == 0.0) {
82 &re[i], &im[i], &re[i + 1], &im[i + 1]);
128 extract_eigenvalues_from_schur(&H, n,
142 if (!lmmc_mat_descriptor_is_valid(a) || !out_result) {
163 eigenvalues_small(a, matrix_scale, out_result);
166 status = eigenvalues_large(a, matrix_scale, out_result);
LMMC binary real type and arithmetic spelling.
double lmmc_real_t
Public and internal LMMC real type.
lmmc_status_t lmmc_mat_create(size_t rows, size_t cols, lmmc_mat_t *out_mat)
创建 rows x cols 的零矩阵。
lmmc_status_t lmmc_vec_create(size_t size, lmmc_vec_t *out_vec)
创建长度为 size 的零向量。
void lmmc_mat_destroy(lmmc_mat_t *mat)
销毁矩阵,释放其拥有的缓冲区并清零结构体字段。
void lmmc_vec_destroy(lmmc_vec_t *vec)
销毁向量,释放其拥有的缓冲区并清零字段。
lmmc_status_t lmmc_eigen_general(const lmmc_mat_t *a, lmmc_eigen_gen_result_t *out_result)
计算一般实矩阵的特征值(不输出特征向量).
void lmmc_eigen_gen_result_destroy(lmmc_eigen_gen_result_t *result)
释放 lmmc_eigen_general 输出结果.
一般实矩阵特征分解结果(仅特征值,使用实部 / 虚部分别存储).
void lmmc_eigen_values_2x2(lmmc_real_t a00, lmmc_real_t a01, lmmc_real_t a10, lmmc_real_t a11, lmmc_real_t *real0, lmmc_real_t *imag0, lmmc_real_t *real1, lmmc_real_t *imag1)
lmmc_status_t lmmc_eigen_restore_scale(lmmc_vec_t *real, lmmc_vec_t *imag, lmmc_real_t scale)
void lmmc_eigen_copy_scaled(const lmmc_mat_t *a, lmmc_real_t scale, lmmc_mat_t *result)
lmmc_status_t lmmc_eigen_schur_reduce(lmmc_mat_t *h, lmmc_mat_t *q)
lmmc_status_t lmmc_eigen_matrix_scale(const lmmc_mat_t *a, lmmc_real_t *scale)
特征值 / SVD 模块内部共享的缩放、Householder 与 Givens 辅助接口(仅源文件可见)。
#define MAT_ELEM(mat, i, j)
稠密矩阵直接分解接口(LU、Cholesky、QR)。
Private recoverable allocator for persistent LMMC ownership.
lmmc_status_t
LMMC 库统一返回的状态码.
@ LMMC_STATUS_NUMERICAL_FAILURE
@ LMMC_STATUS_INVALID_ARGUMENT