我正在尝试创建两个matlab .m文件。 “f.m”包含我想要使用的多项式的函数。
function y = f(x)
y = x.^3 - 7*x + 6;
Compute.m使用该函数调用fzero,返回多项式和值为-10到10的for循环。
clc
fun = @f;
answerArray= [];
for x0 = -10:10
z = fzero(fun,x0);
answerArray=[answerArray z];
end
answerArrayUnique=unique(answerArray)
问题是我的独特方法不适用于某些负值。我得到了答案:
answerArrayUnique =
-3.0000 -3.0000 -3.0000 1.0000 2.0000
奇怪的是,如果每次在负数上唯一失败,那么会有更多-3.0000。任何人都知道造成这种情况的原因是什么?
注意:再次使用独特的方法调用不能解决问题,这让我相信它认为数字进一步扩展到第万分之一的地方是不同的......也许? / em>的
答案 0 :(得分:1)
你应该看到Mendis回答,如何正确地做到这一点。但是,你遇到的问题是因为-3.000不相等。
unique
通过排序然后检查连续数字是否相等来工作。但是,由于您使用数值方法来查找零,因此解是近似的。尝试减去两个相等的解,差异将很小,但不是零。
为避免这种情况,您可以使用uniquetol
来指定公差,在此范围内,您认为两个数字相等。例如uniquetol(answerArray,1e-4)
答案 1 :(得分:0)
在matlab中,表示多项式的最佳方法是通过系数向量。为你的例子:
p = [1 0 -7 +6];
要计算x = 0.8处的值,例如使用:
polyval(p,0.8)
找到你使用的根:
r = roots(p) %output: -3 2 1
仅对非线性函数使用'fzero'并祈祷找到所有解决方案。