LMCAS
Lamina Computer Algebra System
Toggle main menu visibility
载入中...
搜索中...
未找到
solve_polynomial_normalization.cpp
浏览该文件的文档.
1
#include "
internal/expression_transform.hpp
"
2
#include "
internal/symbolic_ast.hpp
"
3
#include "
internal/expression_analysis.hpp
"
4
#include "
internal/polynomial_solver_support.hpp
"
5
6
namespace
LMCAS::polynomial_solver_detail
{
7
8
bool
is_purely_numeric
(
const
std::shared_ptr<SymbolicExpr>& expr) {
9
return
!expr ||
free_variables
(
LMCAS::detail::node
(expr)).empty();
10
}
11
12
std::shared_ptr<SymbolicExpr>
negate
(
const
std::shared_ptr<SymbolicExpr>& x) {
13
return
SymbolicExpr::multiply(SymbolicExpr::number(-1), x);
14
}
15
16
std::shared_ptr<SymbolicExpr>
sub
(
const
std::shared_ptr<SymbolicExpr>&
a
,
const
std::shared_ptr<SymbolicExpr>&
b
) {
17
return
SymbolicExpr::add(
a
,
negate
(
b
));
18
}
19
20
std::shared_ptr<SymbolicExpr>
num
(
int
n) {
return
SymbolicExpr::number(n); }
21
22
23
bool
convert_to_rational_poly
(
24
const
Polynomial<SymbolicPolyCoeff>
& sym_poly,
25
Polynomial<Rational>
& out_poly,
ComputationContext
&
context
)
26
{
27
28
detail::RewriteBudget
transform_budget(
context
, (
context
).limits().max_recursion_depth,
29
(
context
).limits().max_ast_nodes,
"transform"
);
30
out_poly =
Polynomial<Rational>
(sym_poly.
variable_name
);
31
out_poly.
coeffs
.resize(sym_poly.
coeffs
.size(), Rational(0));
32
33
for
(
size_t
i = 0; i < sym_poly.
coeffs
.size(); ++i) {
34
auto
coeff_expr = sym_poly.
coeffs
[i].val;
35
if
(!coeff_expr) {
36
out_poly.
coeffs
[i] = Rational(0);
37
continue
;
38
}
39
40
auto
simplified =
detail::make_expression_ptr
(
detail::normalize_node
(
detail::node
(coeff_expr), transform_budget));
41
auto
num_node = std::dynamic_pointer_cast<const NumberNode>(
42
LMCAS::detail::node
(simplified));
43
if
(!num_node) {
44
return
false
;
45
}
46
if
(std::holds_alternative<Rational>(num_node->value())) {
47
out_poly.
coeffs
[i] = std::get<Rational>(num_node->value());
48
}
else
{
49
out_poly.
coeffs
[i] =
50
Rational(std::get<BigInt>(num_node->value()));
51
}
52
}
53
54
out_poly.
trim
();
55
return
true
;
56
}
57
58
}
LMCAS::ComputationContext
定义
computation_context.hpp:99
LMCAS::Polynomial
一元多项式模板类
定义
polynomial.hpp:52
LMCAS::Polynomial::variable_name
std::string variable_name
变量名
定义
polynomial.hpp:56
LMCAS::Polynomial::coeffs
std::vector< CoeffType > coeffs
系数数组,coeffs[i] 为 x^i 的系数
定义
polynomial.hpp:55
LMCAS::Polynomial::trim
void trim()
去除高次零系数
定义
polynomial.hpp:85
LMCAS::detail::RewriteBudget
定义
rewrite_budget.hpp:15
expression_analysis.hpp
expression_transform.hpp
LMCAS::detail::make_expression_ptr
std::shared_ptr<::LMCAS::SymbolicExpr > make_expression_ptr(SymbolicNodePtr root)
定义
base.hpp:111
LMCAS::detail::node
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
定义
base.hpp:91
LMCAS::detail::normalize_node
SymbolicNodePtr normalize_node(const SymbolicNodePtr &node, RewriteBudget &budget, const FactsQuery &facts, Domain domain)
定义
symbolic_core.cpp:201
LMCAS::polynomial_solver_detail
定义
polynomial_solver_support.hpp:5
LMCAS::polynomial_solver_detail::num
std::shared_ptr< SymbolicExpr > num(int value)
定义
solve_polynomial_normalization.cpp:20
LMCAS::polynomial_solver_detail::convert_to_rational_poly
bool convert_to_rational_poly(const Polynomial< SymbolicPolyCoeff > &poly, Polynomial< Rational > &output, ComputationContext &context)
定义
solve_polynomial_normalization.cpp:23
LMCAS::polynomial_solver_detail::sub
std::shared_ptr< SymbolicExpr > sub(const std::shared_ptr< SymbolicExpr > &a, const std::shared_ptr< SymbolicExpr > &b)
定义
solve_polynomial_normalization.cpp:16
LMCAS::polynomial_solver_detail::negate
std::shared_ptr< SymbolicExpr > negate(const std::shared_ptr< SymbolicExpr > &expr)
定义
solve_polynomial_normalization.cpp:12
LMCAS::polynomial_solver_detail::is_purely_numeric
bool is_purely_numeric(const std::shared_ptr< SymbolicExpr > &expr)
定义
solve_polynomial_normalization.cpp:8
LMCAS::context
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
定义
exact_factorization.hpp:65
LMCAS::b
const MultiPoly & b
定义
multivariate_factor.hpp:92
LMCAS::a
__attribute__((visibility("default"))) VectorCalculusExprResult curve_integral_scalar_checked(const std __attribute__((visibility("default"))) VectorCalculusExprResult curve_integral_scalar_checked(const std __attribute__((visibility("default"))) std const VectorField const std::string const std::shared_ptr< SymbolicExpr > & a
定义
vector_calculus_curves.hpp:50
LMCAS::free_variables
std::set< std::string > free_variables(const detail::SymbolicNodePtr &expression, detail::RewriteBudget *budget)
定义
expression_analysis.cpp:312
polynomial_solver_support.hpp
symbolic_ast.hpp
内部 AST 定义。
src
solve_polynomial_normalization.cpp
生成于
, 为 LMCAS使用
1.18.0