LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
LMCAS::detail::anonymous_namespace{exact_algebraic.cpp} 命名空间参考

函数

Result< bool > common_root_in_enclosures (const ExactRealAlgebraic &lhs, const ExactRealAlgebraic &rhs, ComputationContext &context)
Polynomial< Rational > monic (Polynomial< Rational > polynomial)
bool overlaps (const Rational &lhs_lower, const Rational &lhs_upper, const Rational &rhs_lower, const Rational &rhs_upper)
bool same_polynomial (const Polynomial< Rational > &lhs, const Polynomial< Rational > &rhs)
int sign (const Rational &value)

变量

constexpr const char * kOperation = "exact_algebraic"

函数说明

◆ common_root_in_enclosures()

Result< bool > LMCAS::detail::anonymous_namespace{exact_algebraic.cpp}::common_root_in_enclosures ( const ExactRealAlgebraic & lhs,
const ExactRealAlgebraic & rhs,
ComputationContext & context )

在文件 exact_algebraic.cpp 第 42 行定义.

44 {
45 auto common = monic(Polynomial<Rational>::gcd(lhs.polynomial, rhs.polynomial));
46 if (common.degree() < 1) {
47 return Result<bool>::success(false);
48 }
49 auto isolated = isolate_real_roots_exact(
50 common, context, "exact_algebraic.equal");
51 if (!isolated) {
52 return Result<bool>::failure(isolated.error());
53 }
54 for (const auto& interval : isolated.value()) {
55 if (overlaps(lhs.lower, lhs.upper, interval.first, interval.second) &&
56 overlaps(rhs.lower, rhs.upper, interval.first, interval.second)) {
57 return Result<bool>::success(true);
58 }
59 }
60 return Result<bool>::success(false);
61}
static Polynomial gcd(Polynomial a, Polynomial b)
计算两个多项式的最大公因式
static Result failure(CasErrc code, std::string message, std::string operation={})
static Result success(T value)
bool overlaps(const Rational &lhs_lower, const Rational &lhs_upper, const Rational &rhs_lower, const Rational &rhs_upper)
Polynomial< Rational > monic(Polynomial< Rational > polynomial)
Result< std::vector< RationalInterval > > isolate_real_roots_exact(const Polynomial< Rational > &polynomial, ComputationContext &context, const std::string &operation)
ExactRealAlgebraic rhs
std::size_t std::size_t ComputationContext & context
ExprResult interval(ExprPtr lower, ExprPtr upper, bool lower_closed, bool upper_closed)
const ExprPtr & rhs

引用了 common_root_in_enclosures(), LMCAS::detail::context, LMCAS::Result< T >::failure(), LMCAS::Polynomial< CoeffType >::gcd(), LMCAS::interval(), LMCAS::detail::isolate_real_roots_exact(), LMCAS::detail::ExactRealAlgebraic::lower, monic(), overlaps(), LMCAS::detail::ExactRealAlgebraic::polynomial, LMCAS::detail::rhs, LMCAS::Result< T >::success(), LMCAS::detail::ExactRealAlgebraic::upper , 以及 LMCAS::Result< T >::value().

被这些函数引用 common_root_in_enclosures().

函数调用图:
这是这个函数的调用关系图:

◆ monic()

Polynomial< Rational > LMCAS::detail::anonymous_namespace{exact_algebraic.cpp}::monic ( Polynomial< Rational > polynomial)

在文件 exact_algebraic.cpp 第 17 行定义.

17 {
18 polynomial.trim();
19 if (polynomial.is_zero()) return polynomial;
20 const Rational leading = polynomial.lead_coeff();
21 for (auto& coefficient : polynomial.coeffs) coefficient = coefficient / leading;
22 polynomial.trim();
23 return polynomial;
24}
bool is_zero() const
判断是否为零多项式
std::vector< CoeffType > coeffs
系数数组,coeffs[i] 为 x^i 的系数
CoeffType lead_coeff() const
获取首项系数
void trim()
去除高次零系数

引用了 LMCAS::Polynomial< CoeffType >::coeffs, LMCAS::Polynomial< CoeffType >::is_zero(), LMCAS::Polynomial< CoeffType >::lead_coeff(), monic() , 以及 LMCAS::Polynomial< CoeffType >::trim().

被这些函数引用 common_root_in_enclosures() , 以及 monic().

函数调用图:
这是这个函数的调用关系图:

◆ overlaps()

bool LMCAS::detail::anonymous_namespace{exact_algebraic.cpp}::overlaps ( const Rational & lhs_lower,
const Rational & lhs_upper,
const Rational & rhs_lower,
const Rational & rhs_upper )

在文件 exact_algebraic.cpp 第 31 行定义.

32 {
33 return !(lhs_upper < rhs_lower) && !(rhs_upper < lhs_lower);
34}

引用了 overlaps().

被这些函数引用 common_root_in_enclosures() , 以及 overlaps().

函数调用图:
这是这个函数的调用关系图:

◆ same_polynomial()

bool LMCAS::detail::anonymous_namespace{exact_algebraic.cpp}::same_polynomial ( const Polynomial< Rational > & lhs,
const Polynomial< Rational > & rhs )

在文件 exact_algebraic.cpp 第 26 行定义.

27 {
28 return lhs.variable_name == rhs.variable_name && lhs.coeffs == rhs.coeffs;
29}
std::string variable_name
变量名

引用了 LMCAS::Polynomial< CoeffType >::coeffs, LMCAS::detail::rhs, same_polynomial() , 以及 LMCAS::Polynomial< CoeffType >::variable_name.

被这些函数引用 same_polynomial().

函数调用图:
这是这个函数的调用关系图:

◆ sign()

int LMCAS::detail::anonymous_namespace{exact_algebraic.cpp}::sign ( const Rational & value)

在文件 exact_algebraic.cpp 第 36 行定义.

36 {
37 if (value < Rational(0)) return -1;
38 if (value > Rational(0)) return 1;
39 return 0;
40}
const std::string const ExprPtr & value

引用了 sign() , 以及 LMCAS::value.

被这些函数引用 sign().

函数调用图:
这是这个函数的调用关系图:

变量说明

◆ kOperation

const char* LMCAS::detail::anonymous_namespace{exact_algebraic.cpp}::kOperation = "exact_algebraic"
constexpr

在文件 exact_algebraic.cpp 第 15 行定义.