首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不使用matlab内置函数的情况下查找函数的多个根?

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

Stack Overflow用户
提问于 2014-03-04 10:50:43
回答 1查看 320关注 0票数 0

我正在尝试找出如何找到一个函数的所有根的方法。我知道如何找到一个,取决于最初的x,但我被困在如何找到所有它们,就像我的练习问题中的情况一样。我所知道的是如何找到一个,但在本例中有三个。我怎么才能找到他们呢?谢谢!

代码语言:javascript
复制
   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
EN

回答 1

Stack Overflow用户

发布于 2014-03-04 11:23:38

要做到这一点,最简单的方法之一是将您正在搜索的区域划分为子区域,找到具有相反符号的端点的区域,然后对合格的子区域进行更精细的搜索(就像您已经编写的那样)。我对MATLAB并不特别熟悉,但这里有一些Python风格的伪代码。A是下界,b是上界,f是函数:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22161923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档