黄金分割法求函数最小值
来源:互联网 发布:java final 多线程 编辑:程序博客网 时间:2024/09/21 09:05
'测试表达式 x^2+2*x'测试区间[-3 5]'
测试精度e=0.2
'书上最小值x=-1.0255 f=-0.999
Function RESULT(ByVal expression As String, ByVal x As String) As Single
Dim tmpStr As String
tmpStr = Replace(UCase(expression), "LN", "Log")
tmpStr = Replace(tmpStr, "X", x)
Dim OBJ As Object
Set OBJ = CreateObject("MSScriptControl.ScriptControl")
OBJ.Language = "vbscript"
RESULT = OBJ.Eval(tmpStr)
Set OBJ = Nothing
End Function
Private Sub Command1_Click()
Dim e As Single
Dim a1 As String
Dim a3 As String
Const r = 0.618
Dim f As String
f = InputBox("输入表达式")
a1 = InputBox("输入区间左则值")
a3 = InputBox("输入区间右则值")
e = CSng(InputBox("输入允许误差值"))
a11: a11 = CStr(CSng(a3) - r * (CSng(a3) - CSng(a1)))
f1 = RESULT(f, a11)
a12: a12 = CStr(CSng(a1) + r * (CSng(a3) - a1))
f2 = RESULT(f, a12)
22: If Abs((f2 - f1) / f1) <= e Then
If Abs((CSng(a12) - CSng(a11)) / CSng(a11)) <= e Then
GoTo 33
Else
a1 = CStr(a11)
a3 = CStr(a12)
GoTo a11
End If
Else If f1 > f2 Then
a1 = CStr(a11)
a11 = CStr(a12)
f1 = f2
GoTo a12
Else
a3 = CStr(a12)
a12 = CStr(a11)
f2 = f1
a11 = CStr(CSng(a3) - r * (CSng(a3) - CSng(a1)))
f1 = RESULT(f, a11)
GoTo 22
End If
End If
33: If f1 > f2 Then
ax = CSng(a12)
fax = RESULT(f, a12)
Else
ax = CSng(a11)
fax = RESULT(f, a11)
End If
Print "最小值ax=" & ax Print "
最小值fax=" & fax
End Sub
Private Sub Form_Load()
Form1.WindowState = 2
End Sub
- 黄金分割法求函数最小值
- 二分法与黄金分割法求函数方程最小值
- [黄金分割比] 黄金分割法求单峰函数最值
- 黄金分割法与单峰函数求极值
- 求函数的最小值
- 求函数最小值
- 函数求最大值和最小值
- 梯度下降法求函数最小值 基于matlab实现
- 用共轭梯度法求函数极小值和最优解,其中用进退法求步长区间,用黄金分割法求最佳步长
- 一个求最大值与最小值的函数
- 一个求最大值与最小值的函数
- C#聚合函数中求最小值,平均值
- 二维数组求最小值,函数调用
- 通过函数调用求二维数组最小值
- HDU-Strange fuction-求函数的最小值
- 求向量中的最大最小值函数
- 练习二1002 求函数的最小值
- 遗传算法求二元函数的最小值
- 论坛完整版ubb代码
- 佚名 :程序员的10种级别
- OllyDBG分析报告系列(7)---文件加载调试原理
- 蒋醺 :“淡”是人生最深的滋味
- 机器狗病毒技术分析
- 黄金分割法求函数最小值
- 二次插值法求函数最小值
- 新完成的PE viewer
- Oracle,SQL Server,MySQL的自增变量设置
- 佚名 :史上最欠揍的20个手机短信
- 灰鸽子隐藏原理
- 骨干是折腾出来的
- SQL操作全集
- Windows 7 Milestone 1 截图出现