手动求解(系统)方程式可能容易出错。我在生活中花了很多时间在我的推导中寻找我的纸上的错误。经历过Maple及其solve
方程和rsolve
递归方程的能力之后,我想知道是否有任何工具可以预处理代码以解析某些变量的分析方程,并输出分析形式的解决方案,以便在下一步中,编译器编译解决方案。
我在C ++中编写了这个玩具示例(完全构成,不正确和不受约束),我认为这可能是这样的:
tuple<3> example_function(double y, double z, double alpha) {
// define variables
$real x, p0, gamma; // << unknowns
$real y, z, alpha; // << givens
// define equations
$eq rule1 = x*x / p0^gamma == 1;
$eq rule2 = gamma^2 + p0^2 == 1;
// instruct the preprocessor to solve it
$prog pr = solve {rule1, rule2}
for {x, p0, gamma}
assuming (positive x,
positive z,
positive gamma);
// define output variables to store the results in
double x, p0, gamma;
// now let the preprocessor output the solved equations
$exec pr;
return tuple<3>({x, p0, gamma});
}
美元($)符号表示要预处理的数学语言。 例如,这可以预处理为:
tuple<3> example_function(double y, double z, double alpha) {
double x, p0, gamma;
x = std::pow(y, -z) / (alpha - 1.0);
p0 = x / alpha;
gamma = alpha * alpha;
return tuple<3>({x, p0, gamma});
}
当然,预处理器会知道这种语言是C ++,因此可以使用double
等关键字并使用std::
数学函数。
有这样的事吗?如果没有,有什么理由,你对这个想法有什么看法?