在不使用matlab的内置函数的情况下查找函数的多个根?

时间:2014-03-04 02:50:43

标签: matlab

我正在试图弄清楚如何找到找到函数所有根的方法。我知道如何找到一个,取决于最初的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

1 个答案:

答案 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