LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
matrix_decomposition.hpp
浏览该文件的文档.
1/**
2 * @file matrix_decomposition.hpp
3 * @brief 矩阵高级分解算法:LU、QR、Cholesky、SVD、特征分解及矩阵指数。
4 */
5#pragma once
7#include "result.hpp"
8#include "symbolic.hpp"
9#include <memory>
10#include <vector>
11#include <string>
12
13namespace LMCAS {
14
16 std::shared_ptr<SymbolicExpr> P;
17 std::shared_ptr<SymbolicExpr> L;
18 std::shared_ptr<SymbolicExpr> U;
19};
20
22 std::shared_ptr<SymbolicExpr> Q;
23 std::shared_ptr<SymbolicExpr> R;
24};
25
27 std::shared_ptr<SymbolicExpr> L;
28};
29
31 std::shared_ptr<SymbolicExpr> U;
32 std::shared_ptr<SymbolicExpr> S;
33 std::shared_ptr<SymbolicExpr> V;
34};
35
37 std::shared_ptr<SymbolicExpr> J;
38 std::shared_ptr<SymbolicExpr> P;
39};
40
46
47/**
48 * @brief 计算符号矩阵的 LU 分解 (A = L * U)
49 * @param A 输入方阵
50 * @param L 输出的下三角矩阵
51 * @param U 输出的上三角矩阵
52 * @return 成功返回 true
53 */
55 const std::shared_ptr<SymbolicExpr>& A,
57);
58
60 const std::shared_ptr<SymbolicExpr>& A
61);
62
63
64/**
65 * @brief 计算符号矩阵的 QR 分解 (A = Q * R)
66 * @param A 输入矩阵
67 * @param Q 输出的正交矩阵
68 * @param R 输出的上三角矩阵
69 * @return 成功返回 true
70 */
72 const std::shared_ptr<SymbolicExpr>& A,
74);
75
77 const std::shared_ptr<SymbolicExpr>& A
78);
79
80
81/**
82 * @brief 计算对称正定矩阵的 Cholesky 分解 (A = L * L^T)
83 * @param A 输入矩阵
84 * @param L 输出的下三角矩阵
85 * @return 成功返回 true
86 */
88 const std::shared_ptr<SymbolicExpr>& A,
90);
91
93 const std::shared_ptr<SymbolicExpr>& A
94);
95
96
97/**
98 * @brief 计算符号矩阵的奇异值分解 (A = U * S * V^T)
99 * @param A 输入矩阵
100 * @param U 输出的左奇异矩阵
101 * @param S 输出的奇异值对角矩阵
102 * @param V 输出的右奇异矩阵
103 * @return 成功返回 true
104 */
106 const std::shared_ptr<SymbolicExpr>& A,
108);
109
111 const std::shared_ptr<SymbolicExpr>& A
112);
113
114
115/**
116 * @brief 计算矩阵指数 e^A。
117 * @param A 输入矩阵
118 * @return 已认证可对角化时返回指数矩阵;否则保留未求值 exp(A)。
119 */
120LMCAS_API std::shared_ptr<SymbolicExpr> matrix_exp(
121 const std::shared_ptr<SymbolicExpr>& A
122);
123
124/**
125 * @brief 计算方阵的迹(对角元之和)。
126 * @param A 输入方阵
127 * @return 迹的符号表达式;非方阵返回 nullptr
128 */
129LMCAS_API std::shared_ptr<SymbolicExpr> matrix_trace(
130 const std::shared_ptr<SymbolicExpr>& A
131);
132
133
134/**
135 * @brief 对一组向量执行 Gram-Schmidt 正交化。
136 * @param vectors 输入向量列表(每个向量为分量列表)
137 * @param normalize 为 true 时返回标准正交基,否则仅正交
138 * @return 正交(或标准正交)向量列表;线性相关的向量被跳过
139 */
140LMCAS_API std::vector<std::vector<std::shared_ptr<SymbolicExpr>>> gram_schmidt(
141 const std::vector<std::vector<std::shared_ptr<SymbolicExpr>>>& vectors,
142 bool normalize = false
143);
144
145/**
146 * @brief 计算矩阵自然对数 log(A)(通过特征分解)。
147 * @param A 输入方阵
148 * @return log(A) 的符号表达式;未证明完整对角化或严格正实谱时返回 nullptr。
149 */
150LMCAS_API std::shared_ptr<SymbolicExpr> matrix_log(
151 const std::shared_ptr<SymbolicExpr>& A
152);
153
154/**
155 * @brief 计算两个矩阵的 Kronecker 积 A⊗B。
156 * @param A m×n 矩阵
157 * @param B p×q 矩阵
158 * @return (mp)×(nq) 矩阵
159 */
160LMCAS_API std::shared_ptr<SymbolicExpr> kronecker(
161 const std::shared_ptr<SymbolicExpr>& A,
162 const std::shared_ptr<SymbolicExpr>& B
163);
164
165/**
166 * @brief 计算矩阵范数。
167 * @param A 输入矩阵
168 * @param type 范数类型:"frobenius"、"1"(最大列和)、"inf"(最大行和)
169 * @return 范数的符号表达式;1/inf 范数以精确 max 表达式保留全部符号行列和候选。
170 * 类型无效时返回 nullptr。
171 */
172LMCAS_API std::shared_ptr<SymbolicExpr> matrix_norm(
173 const std::shared_ptr<SymbolicExpr>& A,
174 const std::string& type = "frobenius"
175);
176
177
178/**
179 * @brief 对二次型对称矩阵进行定性分类。
180 * @param A 对称矩阵
181 * @return 分类字符串:"positive_definite"、"negative_definite"、
182 * "positive_semidefinite"、"negative_semidefinite"、"indefinite"、"unknown"
183 * 零型同时半正定与半负定,此接口固定选择 positive_semidefinite。
184 * 以精确谱符号分类;符号未证明时返回 unknown。
185 */
187 const std::shared_ptr<SymbolicExpr>& A
188);
189
190/**
191 * @brief 计算方阵的 Jordan 标准型 J 及变换矩阵 P(A = P·J·P⁻¹)。
192 * @param A 输入方阵
193 * @return Result 成功包含 J/P,已证明 P 满秩及 AP=PJ;非平凡块超对角为 1。
194 * 支持可对角化矩阵及有理 2x2 上三角缺陷块。未构造完整广义链时
195 * 返回 Inconclusive;资源与取消错误原样传播。
196 */
198 const std::shared_ptr<SymbolicExpr>& A,
200);
201
203 const std::shared_ptr<SymbolicExpr>& A
204);
205
206
207} // namespace LMCAS
#define LMCAS_API
JordanDecompositionResult jordan_form_checked(const ExprPtr &A, ComputationContext &context)
Result< LUDecomposition > LUDecompositionResult
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
std::shared_ptr< SymbolicExpr > Q
std::shared_ptr< SymbolicExpr > matrix_norm(const std::shared_ptr< SymbolicExpr > &A, const std::string &type)
std::shared_ptr< SymbolicExpr > S
std::shared_ptr< SymbolicExpr > R
Result< JordanDecomposition > JordanDecompositionResult
SVDDecompositionResult svd_decomposition_checked(const std::shared_ptr< SymbolicExpr > &A, ComputationContext &context)
std::shared_ptr< SymbolicExpr > P
std::vector< std::vector< std::shared_ptr< SymbolicExpr > > > gram_schmidt(const std::vector< std::vector< std::shared_ptr< SymbolicExpr > > > &vectors, bool normalize)
std::shared_ptr< SymbolicExpr > matrix_trace(const std::shared_ptr< SymbolicExpr > &A)
std::shared_ptr< SymbolicExpr > kronecker(const std::shared_ptr< SymbolicExpr > &A, const std::shared_ptr< SymbolicExpr > &B)
std::shared_ptr< SymbolicExpr > L
std::shared_ptr< SymbolicExpr > J
CholeskyDecompositionResult cholesky_decomposition_checked(const std::shared_ptr< SymbolicExpr > &A, ComputationContext &context)
std::shared_ptr< SymbolicExpr > P
Result< QRDecomposition > QRDecompositionResult
std::string classify_quadratic_form(const ExprPtr &A)
std::shared_ptr< SymbolicExpr > V
LUDecompositionResult lu_decomposition_checked(const std::shared_ptr< SymbolicExpr > &A, ComputationContext &context)
Result< CholeskyDecomposition > CholeskyDecompositionResult
QRDecompositionResult qr_decomposition_checked(const std::shared_ptr< SymbolicExpr > &A, ComputationContext &context)
std::shared_ptr< SymbolicExpr > L
std::shared_ptr< SymbolicExpr > U
std::shared_ptr< SymbolicExpr > U
ExprPtr matrix_exp(const ExprPtr &A)
Result< SVDDecomposition > SVDDecompositionResult
ExprPtr matrix_log(const ExprPtr &A)
符号表达式主类 SymbolicExpr 及其工厂方法,运算接口.