我正在尝试找出如何找到一个函数的所有根的方法。我知道如何找到一个,取决于最初的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发布于 2014-03-04 11:23:38
要做到这一点,最简单的方法之一是将您正在搜索的区域划分为子区域,找到具有相反符号的端点的区域,然后对合格的子区域进行更精细的搜索(就像您已经编写的那样)。我对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。
https://stackoverflow.com/questions/22161923
复制相似问题