我正在试图弄清楚如何找到找到函数所有根的方法。我知道如何找到一个,取决于最初的x,但我被困在如何找到所有这些,就像在我的练习题中的情况。我所拥有的是如何找到一个,但在这种情况下有三个。我怎么才能找到他们?谢谢!
f = @(x) x^3-6*x^2+11*x-6.1;
xl = 1;
xu = 3;
cnt = 0;
N = 4;
es = .5*10^(2-N);
ea = 1;
n = 1000;
for i = 1:n
while ea > es
xm = xl(i) + (xu -xl(i)) / n;
fxl = f(xl(i));
fxm = f(xm);
if fxl < 0 < fxm
if f(xl(i))*f(xm) < 0
xu = xm;
elseif f(xl(i))*f(xm) > 0
xl = xm;
end
else fxm < 0 < fxl
if f(xl(i))*f(xm) < 0
xu = xm;
elseif f(xl(i))*f(xm) > 0
xl = xm;
end
end
ea = abs((xu-xl)/xu)*100;
cnt = cnt + 1;
end
end
答案 0 :(得分:0)
最简单的方法之一是将您正在搜索的区域拆分为子区域,找到具有相反符号的端点的区域,然后在符合条件的情况下进行更精确的搜索(就像您已经写过的那样)分区域。我并不熟悉MATLAB,但这里有一些Python风格的伪代码。 a是下限,b是上限,f是函数:
a = 1
b = 3
for i in range(1000): # Loops 1000 times
nextval = a + (b - a)/1000 # Increments by 1/1000 of the region
fa = f(a)
fnext = f(nextval)
if fa < 0 < fnext:
# do more refined search
elif fnext < 0 < fa:
# do more refined search
a = nextval # Moves <a> forward so a new region is checked on the next iteration
如果你专门进入多项式,你可能能够完全解决它们。有关详细信息,请参阅此页http://en.wikipedia.org/wiki/Cubic_function。