用0.618法求解min f(t)=t^3-2^T+1
 
第一步:确定单谷区间[a ,b],给定最后区间精度ε>0
第二步:计算两个探索点
         t1=a+0.382(b-a)
         t2=a+0.618(b-a)
        计算f1=f(t1),f2=f(t2)
第三步:若f1<=f2,转第四步,否则转第五步
第四步:若t2-a<=ε,停止迭代,输入t1.否则令b=t2,t2=t1,t1=b-0.618(b-a),f2=f1,计        算f1=f(t1),转第三步
第五步:若b-t1<=ε,停止迭代,输出t2,否则令a=t1,t1=t2,t2=a+0.618(b-a),f1=f2,计        算f2=f(t2)转第三步
怎样把这些过程编程vb?语言??才鸟问题,希望能得到高手门的回答

解决方案 »

  1.   

    说实话我真的不明白楼主说的东西,所以我没法帮你啦,但我可以试试把楼主说的用VB的语言说一遍也许会有点提示吧(我自己觉得的,高手别见笑啊)
    用两个text来接受闭区间a,b的值:
    dim a,b,t1,t2
    a=text1.text
    b=text2.text
    t1=a+0.382(b-a)
    t2=a+0.618(b-a)
    f1=f(t1),f2=f(t2)(不明白这里的f是代表什么运算,如果是t^3-2^T+1
    这个运算的话,就照代入进行运算就是了!!所以只能照写了)
    :k  if f1<=f2 then
           if t2<=ε then
             t1=text3.text  '输入t1
             exit sub
           else
             b=t2
             t2=t1
             t1=b-0.618(b-a)
             f2=f1
             f1=f(t1)
          goto k
          end if
     else
          if b-t1<=ε then
           t2=text3.text '输出t2
            exit sub
          else
            a=t1
            t1=t2
            t2=a+0.618(b-a)
            f1=f2
          goto k
          end if
       
    end if
      

  2.   

    黄金分割法(0.618法)原理:  假设 f(x) 在区间[a,b]间存在极值(极大或极小),在区间内寻找两点t1=a+0.382*(b-a),  t2=a+0.618*(b-a),比较f(t1),f(t2)。以求极大值时为例,如果f(t1)<=f(t2), 则t1=a(被赋值)。如果f(t1)>f(t2), 则t2 =b(被赋值); 这样区间[a,b]就被缩小,且极大值仍在[a,b]范围内。如果继续按以上步骤缩小区间直至所要的精度。最终区间内的一点就是所要求的最值点:Option Explicit
    Dim a As Double
    Dim b As Double
    Dim jingdu As DoublePrivate Sub Command1_Click()
        a = 0
        b = 5
        jingdu = 0.001
        Dim t1 As Double
        Dim t2 As Double
        Do While b - a > jingdu
            t1 = a + 0.382 * (b - a)
            t2 = a + 0.618 * (b - a)
            If f(t1) > f(t2) Then
                 a = t1
            Else
                 b = t2
            End If
        Loop
        Debug.Print f(t1)
        
    End SubPrivate Function f(ByVal t As Double) As Double
        f = t ^ 3 - 2 ^ t + 1
    End Function
      

  3.   

    非常谢谢 vbanddelphi(一枝梨花) 和 rainstormmaster(rainstormmaster提供的算法,虽然前者的算法就是我自己的算法~~~~~~~~~
      因为本人学得不好,所以这类基础的东西也要拿来发问,见笑了。