看完了粒子群演算法,模擬退火演算法和遺傳演算法,那麼,傳統的一維搜尋方法應該怎麼樣呢?我們來看看斐波拉契演算法和**分割演算法,大概20次以內就能算出來
#include #include #include #define f(x) (-(x + 10*sin(5*x) + 7*cos(4*x)))
#define q 0.382
float goldsearch(float a, float b, int n)
else
} if (f(a) < f(b))
else
}float fibonacci_num(int n)
float fibonacci_search(float a, float b, int n)
; for(int i = n; i >= 0; i--)
float x, y;
for (int i = 1; i <= n; i++)
else
} if (f(a) < f(b))
else
}double* callback_gettime(float a, float b, int n,float (*search)(float , float , int ))
; start = clock();
ans[0] = (*search)(a, b, n);
end = clock();
delta_time = (end - start)/ clocks_per_sec;
ans[1] = delta_time;
return ans; }
int main()
一維搜尋 黃金分割法
一 分割法的基本思想與原理 分割法適用於 a.b 區間上的任何單峰函式求極小值問題,對函式除要求 單峰 外不做其他要求,甚至可以不連續。分割法是建立在區間消去法原理基礎上的試探方法,即在搜尋區間 a,b 內適當插入兩點a1,a2,並計算其函式值。a1,a2將區間分成三段,應用函式的單峰性質,通過函式...
查詢演算法 斐波那契查詢 黃金分割法
斐波那契搜尋 fibonacci search 又稱斐波那契查詢,是區間中單峰函式的搜尋技術。斐波那契搜尋就是在二分查詢的基礎上根據斐波那契數列進行分割的。在斐波那契數列找乙個等於略大於查詢表中元素個數的數f n 將原查詢表擴充套件為長度為f n 如果要補充元素,則補充重複最後乙個元素,直到滿足f ...
精確一維搜尋 黃金分割法(0 618)
文章內容摘自uestc最優化張老師的ppt 分割法 0.618法 適用於任何單峰值函式?求極小點的問題,甚至對函式可以不要求連續。單峰函式 設?r r,是在 上的全域性極小點,如果對於 上的任意兩點?1,2,且?1 2都有 那麼稱?是區間 上的單峰函式。若?1 2,稱 1,2 為搜尋區間。基本思想 ...