1
首次在这里编程。所以我在matlab中写了这个函数,用迭代过程找到三次多项式的根。该函数必须获得正确的根数,所以最后,如果语句足够接近我找到的任何其他根,我使用if语句来删除根,因为它可能是重复的根。然而,正如我刚刚发现的那样,这个问题是,如果多项式的系数超小,那么根就会超级接近于0.我的代码将输出只有一个根,0时,真的它应该显示3种解决方案0.具体情况的提示或提示
我觉得这是一个相当困难的困境,因为迭代过程永远不会得到两次根的确切数字,所以它不是仅仅比较数字完全一样。这可能是因为他们实际上是两个不同的根源,彼此非常接近。有什么建议么?
编辑:这是我写的代码让它不显示双重根的两次,但我意识到这可能会摆脱实际的根源。
rts = [root1, root2, root3];
if abs(root1 - root2) < 1*10^(-7)
rts = [root1, root3];
end
if abs(root1 - root3) < 1*10^(-7)
rts = [root1, root2];
end
if abs(root2 - root3) < 1*10^(-7)
rts = [root1, root2];
end
if abs(root1 - root2) < 1*10^(-7) && abs(root1 - root3) < 1*10^(-7)
rts = root1;
end
看看'eps'函数(http://se.mathworks.com/help/matlab/ref/eps.html)。如果你让这个“足够接近”的参数取决于你想比较的两个值的“eps”,那么你可能可以解决你的问题。 – 2015-03-02 10:19:08
你可以发布一个最小的代码示例吗?你如何准确地做有条件的if语句?你如何检测并显示根数? – JaBe 2015-03-02 10:20:37
Hi JaBe。我添加了我在函数结尾使用的代码。为了统计根数,我只需要这些根数就可以显示出来。我至少需要1e-6的准确性,所以我选择1e-7作为足够接近的条件。 – william 2015-03-02 10:28:29