我正在尝试在函数中找到所有根 [f(x) = 0]。我目前的解决方案只有在它们间隔足够大并且不相互干扰时才有效。 (例如它适用于 x^2 - 2)
bool numberIsCloseToZero(num number){
return (num.parse(number.abs().toStringAsFixed(1)) == 0.0) ? true : false;
}
List<num> calculateRoots(String function){
num eval = 0.0;
List<num> roots = [];
for (num x = -10; x < 10; x += 0.1){
eval = calculateYOfX(function, x);
if (numberIsCloseToZero(num.parse(eval.toStringAsFixed(2)))){
roots.add(x);
}
}
return roots;
}
显然,这是由于我的四舍五入。 (例如,x^2 的根的周围值太接近于零,因此假设它们也是根)。你认为我应该通过实际求解方程而不是“蛮力”求根吗?
谢谢
最佳答案
如果你能找到分析解决方案 - 使用它。低阶多项式方程是可能的(如提到的 x^2 - 2
)。
在一般情况下 - 你肯定必须学习数值方法 - 在这种情况下,root finding .
从 bisection 开始方法或Newthon's方法。它们允许在每一步都获得越来越精确的根位置。
关于math - Dart - 查找函数中的所有根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43717553/