LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
symbolic_matrix.hpp
浏览该文件的文档.
1/**
2 * @file symbolic_matrix.hpp
3 * @brief 符号矩阵运算:乘法、行列式、逆、旋转/反射/缩放矩阵、特征值。
4 */
5#pragma once
7#include "result.hpp"
8#include "symbolic.hpp"
9#include <memory>
10#include <vector>
11#include <string>
12#include <variant>
13
14namespace LMCAS {
15
19
20/**
21 * @brief 计算两个符号矩阵的乘积
22 *
23 * 归一化后的近似元素保留浮点计算值,精确元素保持精确算术。
24 * 误差容限用于显式数值比较,不参与矩阵元素的归一化。
25 * 矩阵因子按输入顺序相乘,结果形状为左矩阵行数乘以右矩阵列数。
26 * 成功返回已归一化的显式矩阵;稀疏存储及全零乘积不会丢失结果维度。
27 *
28 * @param A 左矩阵
29 * @param B 右矩阵
30 * @return 乘积矩阵的符号表达式
31 */
33 const std::shared_ptr<SymbolicExpr>& A,
34 const std::shared_ptr<SymbolicExpr>& B,
36);
37
39 const std::shared_ptr<SymbolicExpr>& A,
40 const std::shared_ptr<SymbolicExpr>& B
41);
42
43
44/**
45 * @brief 计算符号矩阵的行列式
46 * @param A 输入矩阵
47 * @return 行列式的符号表达式
48 */
50 const std::shared_ptr<SymbolicExpr>& A,
52);
53
55 const std::shared_ptr<SymbolicExpr>& A
56);
57
58
59/**
60 * @brief 计算符号矩阵的逆矩阵
61 * @param A 输入矩阵
62 * @return 逆矩阵的符号表达式
63 */
65 const std::shared_ptr<SymbolicExpr>& A,
67);
68
70 const std::shared_ptr<SymbolicExpr>& A
71);
72
73
77
79 std::vector<std::shared_ptr<SymbolicExpr>> values;
80};
81
83 std::vector<std::shared_ptr<SymbolicExpr>> particular;
84 std::vector<std::vector<std::shared_ptr<SymbolicExpr>>> nullspace_basis;
85 std::vector<std::size_t> free_columns;
86};
87
89
90using MatrixLinearSolution = std::variant<
95
97 const std::shared_ptr<SymbolicExpr>& A,
100 const std::shared_ptr<SymbolicExpr>& A);
101
103 const std::shared_ptr<SymbolicExpr>& A,
106 const std::shared_ptr<SymbolicExpr>& A);
107
109 const std::shared_ptr<SymbolicExpr>& A,
112 const std::shared_ptr<SymbolicExpr>& A);
113
115 const std::shared_ptr<SymbolicExpr>& coefficients,
116 const std::shared_ptr<SymbolicExpr>& right_hand_side,
119 const std::shared_ptr<SymbolicExpr>& coefficients,
120 const std::shared_ptr<SymbolicExpr>& right_hand_side);
121
122/**
123 * @brief 生成旋转矩阵
124 * @param theta 有限的旋转角度(弧度)
125 * @param dim 矩阵维度,默认为 2
126 * @return 二维旋转矩阵;上下文错误优先,其次维度错误,非有限角度返回 InvalidArgument。
127 */
129 double theta,
130 int dim,
132);
133
135 double theta,
136 int dim = 2
137);
138
139
140/**
141 * @brief 生成反射矩阵
142 * @param angle 反射轴角度(弧度)
143 * @param dim 矩阵维度,默认为 2
144 * @return 反射矩阵的符号表达式
145 */
147 double angle,
148 int dim,
150);
151
153 double angle,
154 int dim = 2
155);
156
157
158/**
159 * @brief 生成缩放矩阵
160 * @param sx 有限的 x 方向缩放因子
161 * @param sy 有限的 y 方向缩放因子
162 * @param dim 矩阵维度,默认为 2
163 * @return 二维缩放矩阵;上下文错误优先,其次维度错误,非有限因子返回 InvalidArgument。
164 */
166 double sx,
167 double sy,
168 int dim,
170);
171
173 double sx,
174 double sy,
175 int dim = 2
176);
177
178
180 const std::shared_ptr<SymbolicExpr>& A,
181 const std::string& variable,
183
185 const std::shared_ptr<SymbolicExpr>& A,
186 const std::string& variable = "lambda");
187/**
188 * @brief 计算符号矩阵的特征值
189 * @param A 输入矩阵
190 * @return 特征值列表
191 */
193 const std::shared_ptr<SymbolicExpr>& A,
195);
196
198 const std::shared_ptr<SymbolicExpr>& A
199);
200
201
202/**
203 * @brief 计算符号矩阵的普通特征向量。
204 * @param A 输入矩阵。
205 * @return 各不同特征值的完整普通特征空间基,按组展平;向量数为各空间维数之和,可能少于 n,
206 * 与特征值列表不作逐项配对。任一空间未证完整时返回 Inconclusive,
207 * 资源与取消错误原样传播;结果限于普通特征向量,不含广义 Jordan 链。
208 */
210 const std::shared_ptr<SymbolicExpr>& A,
212);
213
215 const std::shared_ptr<SymbolicExpr>& A
216);
217
218
219}
#define LMCAS_API
MatrixEigenvalueResult matrix_eigenvalues_checked(const std::shared_ptr< SymbolicExpr > &A, ComputationContext &context)
const std::string & variable
std::vector< std::shared_ptr< SymbolicExpr > > values
Result< MatrixLinearSolution > MatrixLinearSolveResult
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
ExpressionResult matrix_rref_checked(const std::shared_ptr< SymbolicExpr > &A, ComputationContext &context)
ExpressionResult matrix_characteristic_polynomial_checked(const std::shared_ptr< SymbolicExpr > &A, const std::string &variable, ComputationContext &context)
ExpressionResult matrix_scaling_checked(double sx, double sy, int dim, ComputationContext &context)
MatrixLinearSolveResult matrix_solve_linear_checked(const std::shared_ptr< SymbolicExpr > &coefficients, const std::shared_ptr< SymbolicExpr > &right_hand_side, ComputationContext &context)
ExpressionResult matrix_determinant_checked(const std::shared_ptr< SymbolicExpr > &A, ComputationContext &context)
ExpressionResult matrix_inverse_checked(const std::shared_ptr< SymbolicExpr > &A, ComputationContext &context)
Result< std::size_t > MatrixRankResult
计算两个符号矩阵的乘积
Result< std::vector< std::shared_ptr< SymbolicExpr > > > MatrixEigenvalueResult
Result< std::shared_ptr< SymbolicExpr > > ExpressionResult
Result of an operation that produces a symbolic expression.
Result< std::vector< std::vector< std::shared_ptr< SymbolicExpr > > > > MatrixEigenvectorResult
ExpressionResult matrix_multiply_checked(const std::shared_ptr< SymbolicExpr > &A, const std::shared_ptr< SymbolicExpr > &B, ComputationContext &context)
__attribute__((visibility("default"))) MatrixRankResult matrix_rank_checked(const std __attribute__((visibility("default"))) MatrixRankResult matrix_rank_checked(const std __attribute__((visibility("default"))) ExpressionResult matrix_rref_checked(const std __attribute__((visibility("default"))) ExpressionResult matrix_rref_checked(const std __attribute__((visibility("default"))) MatrixNullspaceResult matrix_nullspace_checked(const std __attribute__((visibility("default"))) MatrixNullspaceResult matrix_nullspace_checked(const std __attribute__((visibility("default"))) MatrixLinearSolveResult matrix_solve_linear_checked(const std __attribute__((visibility("default"))) MatrixLinearSolveResult matrix_solve_linear_checked(const std int dim
ExpressionResult matrix_rotation_checked(double theta, int dim, ComputationContext &context)
MatrixEigenvectorResult matrix_eigenvectors_checked(const std::shared_ptr< SymbolicExpr > &A, ComputationContext &context)
Result< std::vector< std::vector< std::shared_ptr< SymbolicExpr > > > > MatrixNullspaceResult
MatrixNullspaceResult matrix_nullspace_checked(const std::shared_ptr< SymbolicExpr > &A, ComputationContext &context)
MatrixRankResult matrix_rank_checked(const std::shared_ptr< SymbolicExpr > &A, ComputationContext &context)
ExpressionResult matrix_reflection_checked(double angle, int dim, ComputationContext &context)
std::variant< MatrixUniqueLinearSolution, MatrixParametricLinearSolution, MatrixInconsistentLinearSolution > MatrixLinearSolution
std::vector< std::shared_ptr< SymbolicExpr > > particular
std::vector< std::vector< std::shared_ptr< SymbolicExpr > > > nullspace_basis
符号表达式主类 SymbolicExpr 及其工厂方法,运算接口.