麻烦各位兄弟帮我想想这个算法问题,要多少分给多少,我实在想不到了。
一个函数,f(x),它只有一个自变量x,f(x)只有一个最小值,函数的大致形状但如图:不知道怎么发张图,给个链接。要求的是f(x)的最小值,可以用循环枚举来做,当f的精度达到0。0000001时,可以认为是最小。
大家给个思路,随便用语言说说,描述一下也行,不用规范,能看懂就可以,流程图也行。假如只有一个最小值我是这样想的。
1:x0先取一个初值,求出对应的一个f0,设一个比较的大的增量d,用1吧,d=1;
2:x1=x0+d,再算对应的函数值f1(x1)
3:判断,if (f1<f0)then 
           { if (f1-f0〈0.0000001)then 保存结果并退出; 
              else  {x0=x1;f0=f1;回到第2步;} }  
         else 往下
4:d=d/10;增量减少,再 回到第二步;可是这样只能求到第一个最小值,第二个怎么求啊?

解决方案 »

  1.   

    http://photo.itnow.com.cn/opus/images/20040427/4887320040427205235.jpg
    图的连接
      

  2.   

    只记得对函数求导后解f'(x)=0可求得函数极小值对应的x值,其他都忘光了
      

  3.   

    高等数学里面是有求导来确定最小值的,其实,现在f函数不是一个具体的表达式,虽然它是一元的,可是它里面包含几项系数,是由x查其他表对应x查出来的。所以用不到求导的方法。现在想到的只有上面这样一个方法,可是却求不了出现两个最小值的情况,这个f函数经过计算已经证明了是有最小,最多会有两个最小,所以不知道怎么求。
      

  4.   

    先将x分段(每个段中只有一个极值点),然后在每段中用2分法或牛顿法求f'(x)的0点
      

  5.   

    这也是个问题啊,我并不知道f的极小值在哪个x范围内,所以一开始f0取值很大
    有问题能说清楚一点吗?在什么地方?
      

  6.   

    根据该f(x)的背景(物理的或其他的)估计f(x)极值点的间隔,只要分段分得足够密,可以保证每个分段中只有一个极值点,然后对每个段求f'(x)的0点(分段中有很多没有0点,但用2分法很容易判断).
      

  7.   

    求出使f'(x) = 0的点,并计算在这些点和x的边界值处f(x)的值,找出最小值就是了。