94 const std::shared_ptr<SymbolicExpr>&
rhs,
96 const std::string& y);
113 const std::vector<std::shared_ptr<SymbolicExpr>>& coeffs,
114 const std::shared_ptr<SymbolicExpr>& forcing,
115 const std::string& x,
116 const std::string& y);
129 const std::shared_ptr<SymbolicExpr>&
rhs,
130 const std::string& x,
131 const std::string& y);
147 const std::shared_ptr<SymbolicExpr>&
rhs,
148 const std::string& x,
149 const std::string& y,
150 std::shared_ptr<SymbolicExpr>& P,
151 std::shared_ptr<SymbolicExpr>& Q);
166 const std::shared_ptr<SymbolicExpr>&
rhs,
167 const std::string& x,
168 const std::string& y);
187 const std::shared_ptr<SymbolicExpr>&
rhs,
188 const std::string& x,
189 const std::string& y,
190 std::shared_ptr<SymbolicExpr>& P,
191 std::shared_ptr<SymbolicExpr>& Q,
206 const std::shared_ptr<SymbolicExpr>& M,
207 const std::shared_ptr<SymbolicExpr>& N,
208 const std::string& x,
209 const std::string& y);
220 const std::vector<std::shared_ptr<SymbolicExpr>>& coeffs,
221 const std::string& x);
238 const std::vector<std::shared_ptr<SymbolicExpr>>& coeffs,
239 const std::string& x,
240 std::vector<double>& euler_consts);
256 const std::shared_ptr<SymbolicExpr>&
rhs,
257 const std::string& x,
258 const std::string& y,
265 const std::shared_ptr<SymbolicExpr>&
rhs,
266 const std::string& x,
267 const std::string& y);
284 const std::shared_ptr<SymbolicExpr>& P,
285 const std::shared_ptr<SymbolicExpr>& Q,
287 const std::string& x,
288 const std::string& y,
295 const std::shared_ptr<SymbolicExpr>& P,
296 const std::shared_ptr<SymbolicExpr>& Q,
298 const std::string& x,
299 const std::string& y);
317 const std::shared_ptr<SymbolicExpr>& M,
318 const std::shared_ptr<SymbolicExpr>& N,
319 const std::string& x,
320 const std::string& y,
327 const std::shared_ptr<SymbolicExpr>& M,
328 const std::shared_ptr<SymbolicExpr>& N,
329 const std::string& x,
330 const std::string& y);
346 const std::shared_ptr<SymbolicExpr>& M,
347 const std::shared_ptr<SymbolicExpr>& N,
348 const std::string& x,
349 const std::string& y);
375 const std::vector<double>& coeffs,
376 const std::shared_ptr<SymbolicExpr>& forcing,
377 const std::string& x,
378 const std::string& y,
385 const std::vector<double>& coeffs,
386 const std::shared_ptr<SymbolicExpr>& forcing,
387 const std::string& x,
388 const std::string& y);
406 const std::vector<double>& euler_coeffs,
407 const std::shared_ptr<SymbolicExpr>& forcing,
408 const std::string& x,
409 const std::string& y,
416 const std::vector<double>& euler_coeffs,
417 const std::shared_ptr<SymbolicExpr>& forcing,
418 const std::string& x,
419 const std::string& y);
463 const std::shared_ptr<SymbolicExpr>& y1,
464 const std::shared_ptr<SymbolicExpr>& y2,
465 const std::shared_ptr<SymbolicExpr>& g,
466 const std::string& x,
473 const std::shared_ptr<SymbolicExpr>& y1,
474 const std::shared_ptr<SymbolicExpr>& y2,
475 const std::shared_ptr<SymbolicExpr>& g,
476 const std::string& x);
484 const std::shared_ptr<SymbolicExpr>& p,
485 const std::shared_ptr<SymbolicExpr>& q,
486 const std::shared_ptr<SymbolicExpr>& x0,
487 const std::string& x,
491 const std::shared_ptr<SymbolicExpr>& p,
492 const std::shared_ptr<SymbolicExpr>& q,
493 const std::shared_ptr<SymbolicExpr>& x0,
494 const std::string& x);
517 const std::shared_ptr<SymbolicExpr>& p,
518 const std::shared_ptr<SymbolicExpr>& q,
519 const std::shared_ptr<SymbolicExpr>& x0,
520 const std::string& x,
528 const std::shared_ptr<SymbolicExpr>& p,
529 const std::shared_ptr<SymbolicExpr>& q,
530 const std::shared_ptr<SymbolicExpr>& x0,
531 const std::string& x,
std::vector< double > const_coeffs
常系数: 系数列表 [a_n, a_{n-1}, ..., a_1, a_0] 和非齐次项 f(x)
ODESolutionResult solve_bernoulli_ode_checked(const std::shared_ptr< SymbolicExpr > &P, const std::shared_ptr< SymbolicExpr > &Q, int n, const std::string &x, const std::string &y, ComputationContext &context)
bool is_homogeneous_ode(const std::shared_ptr< SymbolicExpr > &rhs, const std::string &x, const std::string &y)
ODESolutionResult solve_higher_order_ode_checked(const std::vector< double > &coeffs, const std::shared_ptr< SymbolicExpr > &forcing, const std::string &x, const std::string &y, ComputationContext &context)
std::shared_ptr< SymbolicExpr > bernoulli_P
Bernoulli: P(x), Q(x), n 使得 y' + P(x)y = Q(x)y^n
ODEClassification classify_higher_order_ode(const std::vector< std::shared_ptr< SymbolicExpr > > &coeffs, const std::shared_ptr< SymbolicExpr > &forcing, const std::string &x, const std::string &)
std::shared_ptr< SymbolicExpr > forcing_func
ODEType method_used
使用的求解方法
Result< ODESingularityType > ODESingularityResult
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
ODEType
ODE 类型枚举,标识方程所属的求解类别.
@ Euler
Euler (Cauchy-Euler) 方程
@ Bernoulli
Bernoulli 方程 y' + P(x)y = Q(x)y^n
@ Exact
恰当方程 M(x,y)dx + N(x,y)dy = 0
@ Separable
可分离变量型 dy/dx = f(x)g(y)
@ Linear1
一阶线性 dy/dx + P(x)y = Q(x)
@ LaplaceMethod
Laplace 变换法
@ Homogeneous
齐次方程 y' = f(y/x)
@ HigherOrder_ConstCoeff
高阶常系数线性
@ Frobenius
Frobenius 级数解法
@ Linear2_ConstCoeff
二阶常系数线性
ODEClassification classify_first_order_ode(const std::shared_ptr< SymbolicExpr > &rhs, const std::string &x, const std::string &y)
const std::vector< FGLMPoly > const MonomialOrder & order
FrobeniusSolutionResult solve_frobenius_checked(const std::shared_ptr< SymbolicExpr > &p, const std::shared_ptr< SymbolicExpr > &q, const std::shared_ptr< SymbolicExpr > &x0, const std::string &x, int order, ComputationContext &context)
std::shared_ptr< SymbolicExpr > Q_coeff
bool is_linear_first_order(const std::shared_ptr< SymbolicExpr > &rhs, const std::string &x, const std::string &y, std::shared_ptr< SymbolicExpr > &P, std::shared_ptr< SymbolicExpr > &Q)
std::shared_ptr< SymbolicExpr > find_integrating_factor(const std::shared_ptr< SymbolicExpr > &M, const std::shared_ptr< SymbolicExpr > &N, const std::string &x, const std::string &y)
std::shared_ptr< SymbolicExpr > euler_forcing
ODESolutionResult solve_euler_ode_checked(const std::vector< double > &euler_coeffs, const std::shared_ptr< SymbolicExpr > &forcing, const std::string &x, const std::string &y, ComputationContext &context)
std::shared_ptr< SymbolicExpr > P_coeff
一阶线性: P(x), Q(x) 使得 y' + P(x)y = Q(x)
bool is_bernoulli_ode(const std::shared_ptr< SymbolicExpr > &rhs, const std::string &x, const std::string &y, std::shared_ptr< SymbolicExpr > &P, std::shared_ptr< SymbolicExpr > &Q, int &n)
std::optional< ProofCertificate > certificate
Result< FrobeniusSolution > FrobeniusSolutionResult
ODESolutionResult solve_variation_of_parameters_checked(const std::shared_ptr< SymbolicExpr > &y1, const std::shared_ptr< SymbolicExpr > &y2, const std::shared_ptr< SymbolicExpr > &g, const std::string &x, ComputationContext &context)
std::shared_ptr< SymbolicExpr > exact_M
恰当方程: M(x,y), N(x,y)
ODESingularityResult classify_singular_point_checked(const std::shared_ptr< SymbolicExpr > &p, const std::shared_ptr< SymbolicExpr > &q, const std::shared_ptr< SymbolicExpr > &x0, const std::string &x, ComputationContext &context)
ODESingularityType
对一阶 ODE 进行类型分类.
std::vector< double > indicial_roots
指标方程的根(正则奇点时)
std::shared_ptr< SymbolicExpr > series_solution
截断级数解
ODESingularityType point_type
展开点的奇点类型
bool is_constant_coefficient(const std::vector< std::shared_ptr< SymbolicExpr > > &coeffs, const std::string &x)
std::shared_ptr< SymbolicExpr > general_solution
通解表达式
ODESolutionResult solve_homogeneous_ode_checked(const std::shared_ptr< SymbolicExpr > &rhs, const std::string &x, const std::string &y, ComputationContext &context)
std::vector< std::string > constants
任意常数名称列表 (C1, C2, ...)
std::shared_ptr< SymbolicExpr > normalized_residual
std::optional< ProofCertificate > certificate
@ Unknown
Parity not determined
ODESolutionResult solve_exact_ode_checked(const std::shared_ptr< SymbolicExpr > &M, const std::shared_ptr< SymbolicExpr > &N, const std::string &x, const std::string &y, ComputationContext &context)
std::shared_ptr< SymbolicExpr > bernoulli_Q
std::shared_ptr< SymbolicExpr > normalized_residual
Result< ODESolution > ODESolutionResult
std::shared_ptr< SymbolicExpr > exact_N
bool is_exact_ode(const std::shared_ptr< SymbolicExpr > &M, const std::shared_ptr< SymbolicExpr > &N, const std::string &x, const std::string &y)
bool is_euler_equation(const std::vector< std::shared_ptr< SymbolicExpr > > &coeffs, const std::string &x, std::vector< double > &euler_consts)
std::vector< double > euler_coeffs
Euler 方程: 系数列表 [a_n, ..., a_0] 对应 x^n*y^(n) + ... + a_0*y = f(x)
bool is_separable(const std::shared_ptr< SymbolicExpr > &rhs, const std::string &x, const std::string &y)
符号表达式主类 SymbolicExpr 及其工厂方法,运算接口.