黃金分割法求函式最小值

2021-04-18 02:44:32 字數 1929 閱讀 4169

'測試表示式 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

黃金分割法與單峰函式求極值

分割法 又稱 0.618 法 是求單峰函式極值的一種試探法,所謂單峰函式是指只有乙個峰值 區域性極小值也是全域性極小值,或者說只有唯一的區域性極小值 的函式,其嚴格定義為 定義 設 f x 是定義在 a b 上的函式,若 則稱 f x 為 a b 上的單峰函式。求 y x2 顯然為單峰函式 在 1,...

網頁配色之黃金分割法

眾所周知,數學上有乙個 分割點 0.618。據說用次比例數分割是最具美感的,從美眉身材到高樓建築,從藝術到繪畫無不出其之左,因此被稱為 神奇 的 分割點。與此同時,人們也對其進行了大量的研究,研究結果更是大量的 神奇 說法。不過,我輩是現實主義者,神奇 就不談了,還是看看咋用它的 神奇 解決我的問題...

一維搜尋 黃金分割法

一 分割法的基本思想與原理 分割法適用於 a.b 區間上的任何單峰函式求極小值問題,對函式除要求 單峰 外不做其他要求,甚至可以不連續。分割法是建立在區間消去法原理基礎上的試探方法,即在搜尋區間 a,b 內適當插入兩點a1,a2,並計算其函式值。a1,a2將區間分成三段,應用函式的單峰性質,通過函式...