标题:求教VB黄金分割法求最值,不知道哪里出问题了 大神帮帮忙看看谢谢
只看楼主
lukiss
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-5-29
结帖率:0
已结贴  问题点数:5 回复次数:5 
求教VB黄金分割法求最值,不知道哪里出问题了 大神帮帮忙看看谢谢
程序代码:
Public Function f(x As Long) As Long              '定义程序f
i = Val(Text2.Text)
f = (0.8 - ((1 + Sqr(i * x)) / (0.97 * x * (i + Sqr(i * x)))) ^ (1 / 3) * x) ^ 2
End Function

Private Sub Command1_Click()

Dim m As Long, n As Long, a As Long, b As Long, fm As Long, c As Long
Dim fa As Long, fb As Long, q As Long
a = 1#                                       '一级和二级传动比的比值取1~1.7
b = 1.7
q = 0.259
m = 1.2674
n = 1.4326
Do While (q > 0.01)                            '精度要求为0.01
    m = a + 0.382 * (b - a)
    n = a + 0.618 * (b - a)
    q = (n - m) / (b - a)
    If fm >= fn Then                            '新的搜索区间
       a = a
       b = n
    ElseIf fm < fn Then                         '新的搜索区间
       a = n
       b = b
    End If
    Loop
    c = (a + b) / 2                       '取中点值
   Text1.Text = c
End Sub


这是用黄金分割法求解X的值使得函数f(x)的值最小,其中i是变量(i=15~40),i是输入值
这个程序我求处理无论i是多少结果都是X=2,是错误的。
求各位大神帮看看 拜谢了!!!在线等
搜索更多相关主题的帖子: 黄金分割 谢谢 看看 
2013-05-29 13:08
lukiss
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-5-29
得分:0 



有图说明分别是i=15 20 25 30 35 40的图 是单峰函数在区间[1,.1.7]里
或者大神门有其他方法求? 麻烦了
2013-05-29 13:10
lukiss
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-5-29
得分:0 
有图说明i=15 20 25 30 35 40时 是单峰函数在区间[1,.1.7]里
或者大神门有其他方法求? 麻烦了
2013-05-29 13:27
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
得分:5 
囧啊囧,带小数点却用 Long ?是疏忽还是没经验?看来是后者了。
dim m as double
m = 1.2674 '你确定类型没错么?
2013-05-29 19:14
lukiss
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-5-29
得分:0 
回复 4楼 bczgvip
是没经验。。
我毕业设计要用VB编软件。。自己看书弄的
这个是看人家的一个例子改的
把Long改成Double 也出错了。。结果是1
引用的函数都没用到 没输入i结果也出来
2013-05-29 22:49
lukiss
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-5-29
得分:0 
回复 4楼 bczgvip
程序代码:
Public Function f(ByVal x As Double, ByVal i As Long) As Double               '定义程序f
i = Val(Text1.Text)
f = (0.8 - ((1 + Sqr(i * x)) / (0.97 * x * (i + Sqr(i * x)))) ^ (1 / 3) * x) ^ 2
End Function

Private Sub Command1_Click()

Dim m As Double, n As Double, a As Double, b As Double, fm As Double, c As Double, q As Double
a = 1#                                       '一级和二级传动比的比值取1~1.7
b = 1.7

Do While (q > 0.01)                            '精度要求为0.01
    m = a + 0.382 * (b - a)
    n = a + 0.618 * (b - a)
    q = (n - m) / (b - a)
    If fm >= fn Then                            '新的搜索区间
       a = a
       b = n
    ElseIf fm < fn Then                         '新的搜索区间
       a = n
       b = b
    End If
    Loop
    c = (a + b) / 2                       '取中点值
   Text2.Text = c
End Sub

还是引用不上前面定义的函数 哪里又出问题了 见笑了!谢谢
2013-05-29 22:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-412497-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.063188 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved